The <filename>auto_explain</filename> module provides a means for
logging execution plans of slow statements automatically, without
having to run <xref linkend="sql-explain"/>
by hand. This is especially helpful for tracking down un-optimized queries
in large applications.
auto_explain
モジュールは、手動でEXPLAINの実行を必要とせず、自動的に遅い文の実行計画をログ記録する手段を提供します。
大きなアプリケーションにおける最適化されていない問い合わせを追跡するのに特に有用です。
The module provides no SQL-accessible functions. To use it, simply load it into the server. You can load it into an individual session: このモジュールはSQLでアクセスできる関数を提供しません。 使用するには、サーバに単に読み込ませます。 ある個別のセッションに読み込ませることができます。
LOAD 'auto_explain';
(You must be superuser to do that.) More typical usage is to preload
it into some or all sessions by including <literal>auto_explain</literal> in
<xref linkend="guc-session-preload-libraries"/> or
<xref linkend="guc-shared-preload-libraries"/> in
<filename>postgresql.conf</filename>. Then you can track unexpectedly slow queries
no matter when they happen. Of course there is a price in overhead for
that.
(実行するためにはスーパーユーザでなければなりません。)
より一般的な使用方法は、postgresql.conf
のsession_preload_librariesまたはshared_preload_librariesにauto_explain
を含めて、特定のまたはすべてのセッションで事前にロードしておくことです。
すると、想定外に低速な問い合わせを発生時に何も行うことなく追跡することができます。
当然ながらこのためのオーバーヘッドという代償があります。
There are several configuration parameters that control the behavior of
<filename>auto_explain</filename>. Note that the default behavior is
to do nothing, so you must set at least
<varname>auto_explain.log_min_duration</varname> if you want any results.
auto_explain
の動作を制御するいくつかの設定パラメータが存在します。
デフォルトの動作は何もしないことなので、なんらかの結果を望むのであれば少なくともauto_explain.log_min_duration
を設定しなければならないことに注意してください。
auto_explain.log_min_duration
(integer
)
#
<varname>auto_explain.log_min_duration</varname> is the minimum statement
execution time, in milliseconds, that will cause the statement's plan to
be logged. Setting this to <literal>0</literal> logs all plans.
<literal>-1</literal> (the default) disables logging of plans. For
example, if you set it to <literal>250ms</literal> then all statements
that run 250ms or longer will be logged. Only superusers can change this
setting.
auto_explain.log_min_duration
は、文の実行計画がログに記録されるようになる、ミリ秒単位の最小の文実行時間です。
これを0
にすれば、すべての計画が記録されます。
-1
(デフォルト)は計画の記録を無効にします。
例えば、250ms
に設定すると、250ms以上実行する文すべてが記録されます。
スーパーユーザのみがこの設定を変更することができます。
auto_explain.log_parameter_max_length
(integer
)
#
<varname>auto_explain.log_parameter_max_length</varname> controls the
logging of query parameter values. A value of <literal>-1</literal> (the
default) logs the parameter values in full. <literal>0</literal> disables
logging of parameter values. A value greater than zero truncates each
parameter value to that many bytes. Only superusers can change this
setting.
auto_explain.log_parameter_max_length
は、問い合わせパラメータ値を記録するか制御します。
-1
という値(デフォルト)は、パラメータ値を完全に記録します。
0
はパラメータ値の記録を無効にします。
ゼロより大きい値は、各パラメータ値を指定されたバイト数に切り捨てます。
この設定を変更できるのは、スーパーユーザのみです。
auto_explain.log_analyze
(boolean
)
#
<varname>auto_explain.log_analyze</varname> causes <command>EXPLAIN ANALYZE</command>
output, rather than just <command>EXPLAIN</command> output, to be printed
when an execution plan is logged. This parameter is off by default.
Only superusers can change this setting.
auto_explain.log_analyze
は、実行計画のログが取得されたときに出力されるものとして、単にEXPLAIN
出力ではなく、EXPLAIN ANALYZE
出力を行います。
このパラメータはデフォルトで無効です。
スーパーユーザのみがこの設定を変更できます。
When this parameter is on, per-plan-node timing occurs for all
statements executed, whether or not they run long enough to actually
get logged. This can have an extremely negative impact on performance.
Turning off <varname>auto_explain.log_timing</varname> ameliorates the
performance cost, at the price of obtaining less information.
このパラメータが有効の場合、計画ノードごとの時間的調整は事実上ログされるまで如何に時間が掛かろうと、全ての実行文に対して引き起こります。
極端に性能上のマイナスの影響が起こり得ます。
auto_explain.log_timing
を無効にすれば、得られる情報が少なくなるという犠牲を払って、性能の損失が改善されます。
auto_explain.log_buffers
(boolean
)
#
<varname>auto_explain.log_buffers</varname> controls whether buffer
usage statistics are printed when an execution plan is logged; it's
equivalent to the <literal>BUFFERS</literal> option of <command>EXPLAIN</command>.
This parameter has no effect
unless <varname>auto_explain.log_analyze</varname> is enabled.
This parameter is off by default.
Only superusers can change this setting.
auto_explain.log_buffers
は実行計画のログを取得するときに、バッファ使用統計を出力するかどうかを制御します。
EXPLAIN
のBUFFERS
オプションと同じです。
auto_explain.log_analyze
パラメータが設定されていなければ、このパラメータは効果がありません。
このパラメータはデフォルトで無効です。
スーパーユーザのみがこの設定を変更することができます。
auto_explain.log_wal
(boolean
)
#
<varname>auto_explain.log_wal</varname> controls whether WAL
usage statistics are printed when an execution plan is logged; it's
equivalent to the <literal>WAL</literal> option of <command>EXPLAIN</command>.
This parameter has no effect
unless <varname>auto_explain.log_analyze</varname> is enabled.
This parameter is off by default.
Only superusers can change this setting.
auto_explain.log_wal
は実行計画のログを取得するときに、WAL使用統計を出力するかどうかを制御します。
EXPLAIN
のWAL
オプションと同じです。
auto_explain.log_analyze
パラメータが設定されていなければ、このパラメータは効果がありません。
このパラメータはデフォルトで無効です。
スーパーユーザのみがこの設定を変更することができます。
auto_explain.log_timing
(boolean
)
#
<varname>auto_explain.log_timing</varname> controls whether per-node
timing information is printed when an execution plan is logged; it's
equivalent to the <literal>TIMING</literal> option of <command>EXPLAIN</command>.
The overhead of repeatedly reading the system clock can slow down
queries significantly on some systems, so it may be useful to set this
parameter to off when only actual row counts, and not exact times, are
needed.
This parameter has no effect
unless <varname>auto_explain.log_analyze</varname> is enabled.
This parameter is on by default.
Only superusers can change this setting.
auto_explain.log_timing
は、実行計画のログが取得されたときに、ノード毎の時間的調整情報を出力するかどうかを制御します。
EXPLAIN
のTIMING
オプションと同じです。
システムクロックを繰り返し読み出すことによるオーバーヘッドのため、システムの中には問い合わせが非常に遅くなるものがありますので、実際の行数のみ必要で正確な時刻は必要でない場合にはこのパラメータを無効にすると役に立つかも知れません。
auto_explain.log_analyze
が設定されていなければ、このパラメータは効果がありません。
デフォルトで有効です。
スーパーユーザのみがこの設定を変更することができます。
auto_explain.log_triggers
(boolean
)
#
<varname>auto_explain.log_triggers</varname> causes trigger
execution statistics to be included when an execution plan is logged.
This parameter has no effect
unless <varname>auto_explain.log_analyze</varname> is enabled.
This parameter is off by default.
Only superusers can change this setting.
auto_explain.log_triggers
により、実行計画のログを記録するときに、トリガ実行の統計を含めるようになります。
auto_explain.log_analyze
パラメータが設定されていなければ、このパラメータは効果がありません。
このパラメータはデフォルトで無効です。
スーパーユーザのみがこの設定を変更することができます。
auto_explain.log_verbose
(boolean
)
#
<varname>auto_explain.log_verbose</varname> controls whether verbose
details are printed when an execution plan is logged; it's
equivalent to the <literal>VERBOSE</literal> option of <command>EXPLAIN</command>.
This parameter is off by default.
Only superusers can change this setting.
auto_explain.log_verbose
は、実行計画のログが取得されたときに、冗長な詳細が出力されるかどうかを制御します。
EXPLAIN
のVERBOSE
オプションと同じです。
このパラメータはデフォルトで無効です。
スーパーユーザのみがこの設定を変更できます。
auto_explain.log_settings
(boolean
)
#
<varname>auto_explain.log_settings</varname> controls whether information
about modified configuration options is printed when an execution plan is logged.
Only options affecting query planning with value different from the built-in
default value are included in the output. This parameter is off by default.
Only superusers can change this setting.
auto_explain.log_settings
は、実行計画が記録される時に修正された設定オプションに関する情報を表示するかどうかを制御します。
問い合わせ計画に影響し、組み込みのデフォルトの値と異なる値であるオプションだけが出力に含まれます。
このパラメータはデフォルトで無効です。
スーパーユーザのみがこの設定を変更できます。
auto_explain.log_format
(enum
)
#
<varname>auto_explain.log_format</varname> selects the
<command>EXPLAIN</command> output format to be used.
The allowed values are <literal>text</literal>, <literal>xml</literal>,
<literal>json</literal>, and <literal>yaml</literal>. The default is text.
Only superusers can change this setting.
auto_explain.log_format
は使用するEXPLAIN
出力書式を選びます。
許容される値はtext
、xml
、json
、yaml
です。
デフォルトはtextです。
スーパーユーザのみがこの設定を変更することができます。
auto_explain.log_level
(enum
)
#
<varname>auto_explain.log_level</varname> selects the log level at which
auto_explain will log the query plan.
Valid values are <literal>DEBUG5</literal>, <literal>DEBUG4</literal>,
<literal>DEBUG3</literal>, <literal>DEBUG2</literal>,
<literal>DEBUG1</literal>, <literal>INFO</literal>,
<literal>NOTICE</literal>, <literal>WARNING</literal>,
and <literal>LOG</literal>. The default is <literal>LOG</literal>.
Only superusers can change this setting.
auto_explain.log_level
は、auto_explainが問い合わせ計画を記録するログレベルを選択します。
有効な値はDEBUG5
、DEBUG4
、DEBUG3
、DEBUG2
、DEBUG1
、INFO
、NOTICE
、WARNING
、LOG
です。
デフォルトはLOG
です。
スーパーユーザのみがこの設定を変更できます。
auto_explain.log_nested_statements
(boolean
)
#
<varname>auto_explain.log_nested_statements</varname> causes nested
statements (statements executed inside a function) to be considered
for logging. When it is off, only top-level query plans are logged. This
parameter is off by default. Only superusers can change this setting.
auto_explain.log_nested_statements
により、入れ子状の文(関数内から実行される文)を考慮して記録するようになります。
無効ならば、最上位の問い合わせ計画のみが記録されます。
このパラメータはデフォルトで無効です。
スーパーユーザのみがこの設定を変更することができます。
auto_explain.sample_rate
(real
)
#
<varname>auto_explain.sample_rate</varname> causes auto_explain to only
explain a fraction of the statements in each session. The default is 1,
meaning explain all the queries. In case of nested statements, either all
will be explained or none. Only superusers can change this setting.
auto_explain.sample_rate
により、auto_explainは各セッションで一部の文の実行計画のみをログに記録するようになります。
デフォルトは1で、すべての問い合わせの実行計画をログに記録します。
入れ子になった文の場合には、実行計画がすべてログに記録されるか、全くされないかのどちらかです。
スーパーユーザのみがこの設定を変更できます。
In ordinary usage, these parameters are set
in <filename>postgresql.conf</filename>, although superusers can alter them
on-the-fly within their own sessions.
Typical usage might be:
スーパーユーザは自身のセッション内でその場で変更できますが、通常の使用では、これらパラメータはpostgresql.conf
に設定しなければなりません。
典型的な使用方法は以下のようになります。
# postgresql.conf session_preload_libraries = 'auto_explain' auto_explain.log_min_duration = '3s'
postgres=# LOAD 'auto_explain'; postgres=# SET auto_explain.log_min_duration = 0; postgres=# SET auto_explain.log_analyze = true; postgres=# SELECT count(*) FROM pg_class, pg_index WHERE oid = indrelid AND indisunique;
This might produce log output such as: これにより、以下のようなログ出力が作成されます。
LOG: duration: 3.651 ms plan: Query Text: SELECT count(*) FROM pg_class, pg_index WHERE oid = indrelid AND indisunique; Aggregate (cost=16.79..16.80 rows=1 width=0) (actual time=3.626..3.627 rows=1 loops=1) -> Hash Join (cost=4.17..16.55 rows=92 width=0) (actual time=3.349..3.594 rows=92 loops=1) Hash Cond: (pg_class.oid = pg_index.indrelid) -> Seq Scan on pg_class (cost=0.00..9.55 rows=255 width=4) (actual time=0.016..0.140 rows=255 loops=1) -> Hash (cost=3.02..3.02 rows=92 width=4) (actual time=3.238..3.238 rows=92 loops=1) Buckets: 1024 Batches: 1 Memory Usage: 4kB -> Seq Scan on pg_index (cost=0.00..3.02 rows=92 width=4) (actual time=0.008..3.187 rows=92 loops=1) Filter: indisunique
Takahiro Itagaki <email>itagaki.takahiro@oss.ntt.co.jp</email>
板垣 貴裕 <itagaki.takahiro.at.oss.ntt.co.jp>