多くのクエリでベンチマークテストを実行しています。私は一連のクエリを持っており、それらはお互いに複数回実行されます。私はPostgreSQLがクエリプランをキャッシュすることを知っています。これは考慮する必要がありますが、これが常に起こるとは限りません。PostgreSQLは同じクエリでプランキャッシュに近づいていますか?
私には2つのアプローチがあります。私は、(a)クエリプランを強制的に実行してクエリを実行するか、(b)「ウォームアップ」してプランをキャッシュし、毎回再利用するかのいずれかを検討しています。どのように実行すればよいのでしょうか、または何かが起こっていることを確実にするために何を予防措置を取ることができますか?
キャッシュ内のプランを監視できれば大丈夫ですが、可能かどうかはわかりません。
更新:私のクエリは、データを取得するための複雑なSELECTであり、DELETE/INSERTなどはありません。これは、ベンチマークでクエリプランナにあまり敬意を払うべきではありませんか?
- は、あなたがあなたのクエリがあればなってどのくらい速いのベンチマークにしたい場合は文がPL/pgSQL機能
だから、内部で実行される
ありがとうございます!準備されたステートメントによる計画のオーバーヘッドなしにベンチマークを提案します。また、PostgreSQLもPL/pgSQL関数を介してクエリプランをキャッシュしていると言います。つまり、PL/pgSQLプロシージャを使用して少なくとも5回実行すると同じ動作が期待できることを暗示しています。 6回目以降は? – Zeruno
はい、大丈夫です。時々PostgreSQLはジェネリックプランが十分ではないと判断し、カスタムプランを作成し続けます。テストするには、関数内のステートメントに対して 'EXPLAIN EXECUTE prepared_statement'またはauto_explainを使用できます。そこに '$ 1'がある場合、一般的な計画が使用されます。パラメータのないステートメントはもちろん、常に汎用プランを使用します。 –
あなたのよく説明された返信をありがとう!非常に役立ちます。 – Zeruno