# F.4.自动的_解释

F.4.1.配置参数F.4.2.实例F.4.3.著者

这个自动解释模块提供了一种自动记录慢语句执行计划的方法,无需运行解释手工这对于跟踪大型应用程序中未优化的查询尤其有用。

该模块不提供SQL可访问的函数。要使用它,只需将其加载到服务器中即可。您可以将其加载到单个会话中:

LOAD 'auto_explain';

(你必须是超级用户才能这么做。)更典型的用法是通过包括自动解释在里面一场_预加载_图书馆共享_预加载_图书馆在里面postgresql。形态。然后,无论何时发生,您都可以跟踪异常缓慢的查询。当然,这在管理费用中是有代价的。

# F.4.1.配置参数

有几个配置参数可以控制自动解释。请注意,默认行为是什么都不做,因此必须至少设置自动解释。日志最短持续时间如果你想要任何结果。

自动解释。日志最短持续时间 (整数)

自动解释。日志最短持续时间是导致记录语句计划的最短语句执行时间(以毫秒为单位)。将此设置为0记录所有计划。-1(默认设置)禁用计划的日志记录。例如,如果将其设置为250毫秒然后将记录所有运行250ms或更长时间的语句。只有超级用户才能更改此设置。

自动解释。日志分析 (布尔值)

自动解释。日志分析原因解释分析输出,而不仅仅是解释输出,在记录执行计划时打印。默认情况下,此参数处于关闭状态。只有超级用户才能更改此设置。

# 笔记

启用此参数后,所有执行的语句都会按计划节点计时,无论它们是否运行足够长的时间以实际记录。这可能会对性能产生极其负面的影响。关掉自动解释。对数计时以获取较少信息为代价,改善了性能成本。

自动解释。日志缓冲区 (布尔值)

自动解释。日志缓冲区控制记录执行计划时是否打印缓冲区使用统计信息;这相当于缓冲区选择解释。除非自动解释。日志分析已启用。默认情况下,此参数处于关闭状态。只有超级用户才能更改此设置。

自动解释。原木 (布尔值)

自动解释。原木控制记录执行计划时是否打印WAL使用统计信息;这相当于沃尔选择解释。除非自动解释。日志分析已启用。默认情况下,此参数处于关闭状态。只有超级用户才能更改此设置。

自动解释。对数计时 (布尔值)

自动解释。对数计时控制在记录执行计划时是否打印每个节点的定时信息;这相当于时机选择解释。重复读取系统时钟的开销会显著降低某些系统上的查询速度,因此,当只需要实际行计数而不需要精确时间时,将此参数设置为off可能会很有用。除非自动解释。日志分析已启用。默认情况下,此参数处于启用状态。只有超级用户才能更改此设置。

自动解释。日志触发器 (布尔值)

自动解释。日志触发器导致在记录执行计划时包含触发器执行统计信息。除非自动解释。日志分析已启用。默认情况下,此参数处于关闭状态。只有超级用户才能更改此设置。

自动解释。详细记录 (布尔值)

自动解释。详细记录控制记录执行计划时是否打印详细信息;这相当于冗长的选择解释。默认情况下,此参数处于关闭状态。只有超级用户才能更改此设置。

自动解释。日志设置 (布尔值)

自动解释。日志设置控制在记录执行计划时是否打印有关修改的配置选项的信息。输出中只包括影响查询计划的选项,这些选项的值与内置默认值不同。默认情况下,此参数处于关闭状态。只有超级用户才能更改此设置。

自动解释。日志格式 (枚举)

自动解释。日志格式选择解释要使用的输出格式。允许的值为文本, xml, json亚马尔.默认为文本。只有超级用户才能更改此设置。

自动解释。对数级 (枚举)

自动解释。对数级选择自动运行的日志级别_explain将记录查询计划。有效值为调试5, 调试4, 调试3, 调试2, 调试1, 信息, 注意, 警告日志.默认值为日志。只有超级用户才能更改此设置。

自动解释。日志嵌套语句 (布尔值)

自动解释。日志嵌套语句使嵌套语句(在函数内执行的语句)被考虑用于日志记录。禁用时,只记录顶级查询计划。默认情况下,此参数处于关闭状态。只有超级用户才能更改此设置。

自动解释。抽样率 (真实的)

自动解释。抽样率导致自动_只解释每节课中的一小部分陈述。默认值为1,表示解释所有查询。在嵌套语句的情况下,要么解释所有语句,要么不解释任何语句。只有超级用户才能更改此设置。

通常情况下,这些参数在postgresql。形态,尽管超级用户可以在自己的会话中动态更改它们。典型用法可能是:

# postgresql.conf
session_preload_libraries = 'auto_explain'

auto_explain.log_min_duration = '3s'

# F.4.2.范例

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;

这可能会产生日志输出,例如:

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

# F.4.3.作者

板垣隆弘<[itagaki。takahiro@oss.ntt.co.jp](mailto:itagaki。takahiro@oss.ntt.co.jp)>