Using EXPLAIN/ja

From PostgreSQL wiki
Jump to navigationJump to search

文の実行に時間がかかる原因を見つけ出すためにはEXPLAINコマンドを使用します。 2つの方法で実行できます。 EXPLAIN ANALYZEを使用する場合、文は実際に実行されます。このため、プランナがどのように想定して進行したかと、実際に何が起こったかを比較することができます。 データを変更する文の場合、EXPLAIN ANALYZEを実行した時にも変更が発生することに注意してください。文によりデータベースに何も変化を与えないようにさせたければ、単にEXPLAINを使用してください。

EXPLAINの出力の解析を助けるツールがいくつかあります。

  • pgadminには、実際に何が発生しているかの詳細の理解を助ける、ビジュアルEXPLAINツールが含まれます。Reading PgAdmin Graphical Explain Plansを参照してください。
  • Visual Explain。元々はEnterprise DBで維持、改良され、EnterpriseDB Advanced ServerパッケージにバインドされていたRedHat component。これはソースコードを使用した他のPostgreSQLインストレーションに対して Developer Studioパッケージを実行することで構築可能です。
  • explain.depesz.comは抽出・要約した回数を付けて計画を示します。また選択した基準を元に強調表示します。
  • explain-analyze.infoは問い合わせを割合で分析し、推定値が現実と大きくずれた部分を強調表示します。(現在利用できません。)

また、この話題に関するチュートリアルがいくつか存在します。ただほとんどのタイトルが"Explaining Explain"となっています(;;)

プランナがおかしな決定を行う原因としてよくある問題は、Planner Statisticsの更新が維持されていないことです。 他にも、サーバに利用可能なメモリ量を通知するチューニングパラメータをデフォルトの非常に小さな値のままにしていることがあります。 例えば、標準的な設定では1MB以上必要なソートはメモリ内で処理するには大きすぎるためディスクに吐き出されます。 Tuning Your PostgreSQL Serverでは、メモリサイズの指定や問い合わせ計画作成に大きく影響するチューニングパラメータに関して優れた実践を紹介しています。

計画に関して途方に暮れた時の行動のひとつとして、完全なEXPLAIN ANALYZEの出力を問い合わせとそこに含まれるスキーマを付けてpgsql-performanceメーリングリストに投稿することがあります。 より早く有益な回答を得るために投稿する前にSlowQueryQuestionsを読んでください。 PostgreSQLの最新バージョンに近いものを使用していない場合は、ほとんどの回答はおそらく以降のバージョンで問題は解消しているというものになるでしょう。 少なくとも使用中のバージョンの最新のマイナーバージョン(つまり8.2.3を使用しているならば8.2.6(最新のバージョンが8.2.6ならば)までアップグレード)で試し、計画が改良されるかどうかを確認することで助かることがあるかもしれません。

計画の解釈時間を省き、テーブル内のデータが増大した時にどう変化するかがわかる、先端的な技法があります。 これは統計情報の収集頻度をどの程度にすればよいかを検討する際にも参考になります。 Putting EXPLAIN results into a tableは自動化用の技法を提供します。explainでよく使われるオプションにはpl/pgsqlの簡単な例があります。