web-dev-qa-db-ja.com

Postgresでクエリの解析と計画をベンチマークする方法は?

PGでクエリの計画と解析の手順をベンチマークしようとしています。

  • ただし、クエリプランナーが何らかのキャッシュを使用しているようです。EXPLAIN ANALYZEの最初の実行のみがPlanning timeセクションで高い値を報告しているようです。その後、1ms未満です。これをオフにするにはどうすればよいですか?
  • ドキュメントは、解析時間がEXPLAIN ANALYZEで考慮されていないことを明確に述べています。クエリの解析にかかった時間を報告する他のコマンド/ツールはありますか?

EXPLAIN ANALYZEで示される計画時間は、解析されたクエリからクエリプランを生成して最適化するのにかかった時間です。解析や書き換えは含まれません。

2
Saurabh Nanda

実際に準備された計画はキャッシュされません(準備されたステートメントを使用している場合を除く)。しかし、計画を立てるために検索する必要があるすべてのメタデータをキャッシュします。したがって、元の計画時間には、そのすべてのメタデータを読み取るのにかかった時間が含まれます。

実験目的でキャッシングを無効にしたい場合、最も簡単な方法は、psqlを閉じて、すべての実験の間に再び開くことです。

インストルメンテーションの場合、 log_statement_stats またはその類縁を使用して、parse-plan-executeプロセスの各ステップの時間を計ることができます。あなたもすることができます set client_min_messages = logこれにより、これらのレポートされた統計は、サーバーログファイルからフェッチする必要がなく、psql画面に直接表示されます。これらのいずれかを設定するには、スーパーユーザーになる必要があります。

2
jjanes