それぞれが他のいくつかの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が通常、運用サーバーで実行されないためです。
関数のプロファイルに役立つ他のログパーサー(または他の手法)はありますか?
EXPLAINプランを作成してすぐにそれを提示したいだけの場合は、SQLフィドルのようなサイト explain.depesz.com
。説明をコピーして貼り付けてヒットするだけです Submit。
Graphical Explainsに付属するpgAdminIIIを試すことができます
PgAdminおよびその他の方法の使用方法については、次のリンクを参照してください