web-dev-qa-db-ja.com

Postgresのauto_explainを読んで理解しやすくするためのパーサーはありますか?

それぞれが他のいくつかのPostgres関数を呼び出す多くのPostgres関数があります。単純に_EXPLAIN ANALYSE_ SELECT parent_function()のような呼び出しの場合、parent_functionが行う呼び出しに飛び込まないため、出力は最小限になります。このような回答( pgpsqlで記述されたUDF呼び出しのPostgresクエリプラン )のおかげで、auto_explainが見つかりました。

だから、私たちはこれをオンにしました:

_auto_explain.log_min_duration = 0 auto_explain.log_analyze = true auto_explain.log_verbose = true auto_explain.log_timing = true auto_explain.log_nested_statements = true_

良い知らせは、それが私たちが探していたものを与えてくれたことです:every入れ子になったステートメントが長時間実行される関数の間に呼び出されるタイミングを確認する方法。ただし、出力はvery冗長であり、プロファイラーで「慣れ」ている親子関係を確認するのは困難です。

_some_big_function 1000ms --child_function1 800ms --child_child_function 600ms --child_function2 200ms_

このログ出力を表示するより良い方法はありますか?理想的には、「ネストされたステートメント」を親とグループ化して、一目で私がどこを見ればよいかを示します。 pgbadgerを試しましたが、auto_explainの出力を解析するように構成されていません。これは、この冗長性のauto_explainが通常、運用サーバーで実行されないためです。

関数のプロファイルに役立つ他のログパーサー(または他の手法)はありますか?

4
Taytay

提案#1

EXPLAINプランを作成してすぐにそれを提示したいだけの場合は、SQLフィドルのようなサイト explain.depesz.com 。説明をコピーして貼り付けてヒットするだけです Submit

提案#2

Graphical Explainsに付属するpgAdminIIIを試すことができます

PgAdminおよびその他の方法の使用方法については、次のリンクを参照してください

2
RolandoMySQLDBA