PostgreSQLスキルアップノート(自己啓発のための個人サイト)
遺伝的問い合わせ最適化「GEQO」
【一覧に戻る】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■■■■ PostgreSQL スキルアップノート
■■■■
■◆■■ 遺伝的問い合わせ最適化「GEQO」
■■■■
■■■■
■■■■ 2013/02/11
■■■■ 使用環境:-
(C) 2012 ohdb
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
実機での確認は未実施
【マニュアル】
遺伝的問い合わせ最適化 →●[マニュアル]
サーバの設定−遺伝的問い合わせオプティマイザ →●[マニュアル]
【参考記事】
−
【用語等】
■1■ 概要
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
問い合わせのFROM句の項目数が増えれば増えるほど、対象となる結合の組み合せが増え
解析にかかる時間が指数的に増加してくる。
これを軽減するために、
「GEQO」遺伝的問い合わせ最適化 (または遺伝的問い合わせオプティマイザ)
という手法が採用されている。
GEQOは、結合のすべての組み合わせを評価しないでヒューリスティック(発見的)
な方法により短時間で最適な結合方法を求める。
■2■ どんな場合にGEQOが採用されるか?
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
デフォルトではFROM句の項目数が12個以上になったら(9.2の場合)GEQOが使用される。
この閾値はgeqo_threshold パラメータによる。
■3■ GEQOのチューニングは?
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
サーバの設定−遺伝的問い合わせ最適化 →●[マニュアル]
geqoのパラメータはいくつかあるが、注目すべきものは以下くらいか・・?
あまり理解できておらず、省略した中に以下のパラメータよりも重要なものがあるかもしれない。
・geqo 機能の有効/無効 これは無効にはできないはず。
・geqo_threshold どのくらいの結合数でGEQOを使うかの制御(FROM句の項目数)
・geqo_effort 精度を犠牲にして解析時間を短縮したい場合(またはその逆)の制御
・geqo_seed 無作為検索のために使用している乱数の初期値を変化させる
・・値を変えると今までとは別の実行計画に変わる(ことがある)。
ということだと思う。
その結果良くなることもあれば、悪くなることもある・・・
geqo (boolean) 機能の有効/無効
・・普通は必ず有効(デフォルト)のままにしておく。
geqo_threshold (integer) GEQOを使用する基準となるFROM項目数(デフォルトは12)
----------------------------------------------------------------------------------
少なくともこれだけの数のFROM項目数で問い合わせを計画するのに遺伝的問い合わせ最適化を
使用します。(FULL OUTER JOINの生成子は、1つのFROM項目として計算することに注意してく
ださい。)
デフォルトは12です。
もっと単純な問い合わせでは、通常の、そしてしらみつぶしの検索プランナを使用するのが最
善ですが、多くのテーブルを持つ問い合わせでは、しらみつぶしの検索は非常に時間がかかり、
しばしば事前の計画を実行する代償より長くなります。
従って、問い合わせの大きさに対する限界値はGEQOの使用を管理するのに便利な方法です。
----------------------------------------------------------------------------------
geqo_effort (integer) 時間をとるか品質をとるかの制御
----------------------------------------------------------------------------------
GEQOにおける計画時間と問い合わせ計画の品質間のトレードオフを制御します。
この変数は1から10までの範囲の整数でなければなりません。
デフォルトの値は5です。値を大きくすると、問い合わせ計画作成により多くの時間を費すことになりますが、
より効率的な問い合わせ計画が選択される可能性が増加します。
実際geqo_effortは直接何も行いません。
それはGEQOの動作に影響を与える他の変数に対し、デフォルトの値を計算するためにのみ使用されます
(以下で説明します)。
もしよければ、代わりに手作業で他のパラメータを設定できます。
----------------------------------------------------------------------------------
geqo_seed (floating point)
----------------------------------------------------------------------------------
結合順序検索空間にわたって、GEQOが無作為のパスを選択するために使用される乱数発生器の
初期値を制御済ます。
値は0(デフォルト)から1までの範囲です。
値を変動させると探査される結合パスの集合を変化させ、それが見つかっているより良いか、
より悪い最善のパスとなる可能性があります。
----------------------------------------------------------------------------------
他にもgeqo関連のパラメータはいくつかあるが省略。
以上