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関連のパラメータはいくつかあるが省略。



                                                                                                            
以上 
inserted by FC2 system