20.9. 运行时统计信息#
20.9.1. 累积查询和索引统计信息#
这些参数控制服务器范围内的累积统计信息系统。启用后,可以通过pg_stat
和pg_statio
系统视图族访问收集的数据。有关更多信息,请参阅第 28 章。
track_activities
(boolean
) #启用对每个会话当前执行的命令的信息的收集,以及其标识符和该命令开始执行的时间。此参数默认开启。请注意,即使启用,此信息也仅对超级用户、具有
pg_read_all_stats
角色权限的角色以及拥有正在报告的会话的用户(包括属于他们具有权限的角色的会话)可见,因此它不应构成安全风险。只有超级用户和具有适当SET
权限的用户才能更改此设置。track_activity_query_size
(integer
) #指定为
pg_stat_activity
.query
字段保留的用于存储每个活动会话当前执行命令文本的内存量。如果未指定单位,则此值将以字节为单位。默认值为 1024 字节。此参数只能在服务器启动时设置。track_counts
(boolean
) #启用对数据库活动统计信息的收集。此参数默认开启,因为自动清理守护进程需要收集的信息。只有超级用户和具有适当
SET
权限的用户才能更改此设置。track_io_timing
(boolean
) #启用数据库 I/O 调用的计时。此参数默认关闭,因为它会重复查询操作系统以获取当前时间,这可能会在某些平台上导致很大的开销。您可以使用 pg_test_timing 工具来测量系统上的计时开销。I/O 计时信息显示在
pg_stat_database
中,在 EXPLAIN 的输出中,当使用BUFFERS
选项时,在 VACUUM 的输出中,当使用VERBOSE
选项时,由自动清理进行自动清理和自动分析,当 log_autovacuum_min_duration 设置时,以及由 pg_stat_statements 设置。只有超级用户和具有适当SET
权限的用户才能更改此设置。track_wal_io_timing
(boolean
) #启用 WAL I/O 调用的计时。此参数默认关闭,因为它会重复查询操作系统以获取当前时间,这可能会在某些平台上导致很大的开销。您可以使用 pg_test_timing 工具来测量系统上的计时开销。I/O 计时信息显示在
pg_stat_wal
中。只有超级用户和具有适当SET
权限的用户才能更改此设置。track_functions
(enum
) #启用函数调用计数和使用时间的跟踪。指定
pl
仅跟踪过程语言函数,指定all
还跟踪 SQL 和 C 语言函数。默认值为none
,禁用函数统计信息跟踪。只有超级用户和具有适当SET
权限的用户才能更改此设置。注意
足够简单以“内联”到调用查询中的 SQL 语言函数将不会被跟踪,无论此设置如何。
stats_fetch_consistency
(枚举
) #确定在事务中多次访问累积统计信息时的行为。当设置为
none
时,每次访问都会从共享内存中重新获取计数器。当设置为cache
时,对对象统计信息的首次访问会缓存这些统计信息,直到事务结束,除非调用pg_stat_clear_snapshot()
。当设置为snapshot
时,首次统计信息访问会缓存当前数据库中可访问的所有统计信息,直到事务结束,除非调用pg_stat_clear_snapshot()
。在事务中更改此参数会丢弃统计信息快照。默认值为cache
。注意
none
最适用于监控系统。如果只访问一次值,这是最有效率的。cache
确保重复访问会产生相同的值,这对于涉及自连接等查询非常重要。snapshot
在交互式检查统计信息时可能很有用,但开销较高,尤其是在存在许多数据库对象的情况下。
20.9.2. 统计信息监控#
compute_query_id
(枚举
) #启用查询标识符的内核计算。可以使用
EXPLAIN
在pg_stat_activity
视图中显示查询标识符,或在通过 log_line_prefix 参数进行配置时在日志中发出。扩展 pg_stat_statements 也需要计算查询标识符。请注意,如果内核查询标识符计算方法不可接受,则可以改用外部模块。在这种情况下,必须始终禁用内核计算。有效值为off
(始终禁用)、on
(始终启用)、auto
(允许 pg_stat_statements 等模块自动启用它)和regress
(与auto
的效果相同,但查询标识符不会显示在EXPLAIN
输出中,以便于自动回归测试)。默认值为auto
。注意
为了确保只计算并显示一个查询标识符,计算查询标识符的扩展应在已计算查询标识符时引发错误。
log_statement_stats
(boolean
)
log_parser_stats
(boolean
)
log_planner_stats
(boolean
)
log_executor_stats
(boolean
) #对于每个查询,将各个模块的性能统计信息输出到服务器日志。这是一个粗略的分析工具,类似于 Unix
getrusage()
操作系统工具。log_statement_stats
报告总语句统计信息,而其他报告每个模块的统计信息。log_statement_stats
不能与任何每个模块的选项一起启用。默认情况下,所有这些选项都已禁用。只有超级用户和具有适当SET
权限的用户才能更改这些设置。