私は巨大なSQLクエリを持っています。おそらく15-20のテーブルが関わっています。 6から7のサブクエリが再び結合されます。 このクエリでは、ほとんどの場合、500万レコードを実行して返します。Postgresクエリプランが変わり続ける - クエリを1分で完了し、時には決して終了しない場合があります。
このクエリがひどく書かれていても、1分で終了するクエリプランがあります。私は、クエリが実際に実行され、キャッシュされた結果を使用していないことを確認しました。
場合によっては、クエリプランがジャッキアップされて終了しないことがあります。私は毎晩、クエリに関係するテーブルの真空解析を実行します。 work_memoryは現在200MBに設定されています。これを2GBまで増やしてみました。私は、work_memoryが2 GBだったときにクエリが混乱するのを経験していません。しかし、私はそれを減らしてクエリを実行したとき、それは乱されました。今私は2GBにそれを増加させると、クエリはまだ混乱しています。新しい設定でリフレッシュされないクエリプランとは何か関係がありますか?私は自分のセッションで計画を破棄しようとしました。
この時点で私はwork_memとvacuum analyzeしか考えられません。スムーズに実行されているクエリに影響を与える可能性のあるその他の要素は、何も返されず、結果を返す結果となります。
設定に関する詳細が必要な場合は教えてください。またはクエリ自体?私も計画を貼り付けることができます...しかし、ここに貼り付けるためのクエリや計画や大きすぎる..
範囲テーブルの15-20テーブル:遺伝的最適化ツールが起動します。geqo_limitを増やすか、テーブル参照の一部をCTEに追加します。すでにサブクエリがある場合は、これらの1つ以上をCTEに昇格させます。 – wildplasser
oops、名前は 'geqo_threshold'です。デフォルト値は12です。これを高く設定すると(おそらく20が高すぎます...)、プランナーはすべての計画を評価するために**多くの時間**を必要とします。 (計画の数は、基本的にRTEの数で指数関数的です) – wildplasser