2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1

19.9. 运行时统计信息 #

19.9.1. 累积查询和索引统计信息 #

这些参数控制着服务器范围的累积统计信息系统。当启用时,收集到的数据可以通过 pg_statpg_statio 系列系统视图访问。有关更多信息,请参阅 第 27 章

track_activities (boolean) #

启用对每个会话当前正在执行的命令、其标识符以及该命令开始执行的时间信息的收集。此参数默认开启。请注意,即使启用,这些信息也仅对超级用户、拥有 pg_read_all_stats 角色的用户以及正在报告的会话的所有者(包括他们拥有权限的角色的会话)可见,因此不应构成安全风险。只有超级用户和具有适当 SET 权限的用户才能更改此设置。

track_activity_query_size (integer) #

指定为每个活动会话的当前执行命令文本保留的内存量,用于 pg_stat_activityquery 字段。如果此值未指定单位,则视为字节。默认值为 1024 字节。此参数只能在服务器启动时设置。

track_counts (boolean) #

启用数据库活动统计信息的收集。此参数默认开启,因为自动清理守护进程需要收集到的信息。只有超级用户和具有适当 SET 权限的用户才能更改此设置。

track_cost_delay_timing (boolean) #

启用基于成本的清理延迟的计时(参见 第 19.10.2 节)。此参数默认关闭,因为它会反复查询操作系统以获取当前时间,这可能在某些平台上造成显著的开销。您可以使用 pg_test_timing 工具来衡量系统上的计时开销。基于成本的清理延迟计时信息会显示在 pg_stat_progress_vacuumpg_stat_progress_analyze 中,在 VACUUMANALYZE 命令使用 VERBOSE 选项时的输出中,并且 autovacuum 会在 log_autovacuum_min_duration 设置时为自动清理和自动分析记录这些信息。只有超级用户和具有适当 SET 权限的用户才能更改此设置。

track_io_timing (boolean) #

启用数据库 I/O 等待的计时。此参数默认关闭,因为它会反复查询操作系统以获取当前时间,这可能在某些平台上造成显著的开销。您可以使用 pg_test_timing 工具来衡量系统上的计时开销。I/O 计时信息显示在 pg_stat_databasepg_stat_io(如果 object 不是 wal)、pg_stat_get_backend_io() 函数(如果 object 不是 wal)、使用 BUFFERS 选项的 EXPLAIN 命令输出、使用 VERBOSE 选项的 VACUUM 命令输出、autovacuum 的自动清理和自动分析(当 log_autovacuum_min_duration 设置时)以及 pg_stat_statements 中。只有超级用户和具有适当 SET 权限的用户才能更改此设置。

track_wal_io_timing (boolean) #

启用 WAL I/O 等待的计时。此参数默认关闭,因为它会反复查询操作系统以获取当前时间,这可能在某些平台上造成显著的开销。您可以使用 pg_test_timing 工具来衡量系统上的计时开销。I/O 计时信息显示在 pg_stat_ioobjectwal 时,以及 pg_stat_get_backend_io() 函数的 objectwal 时的输出中。只有超级用户和具有适当 SET 权限的用户才能更改此设置。

track_functions (enum) #

启用函数调用次数和使用时间的跟踪。指定 pl 只跟踪过程语言函数,指定 all 还跟踪 SQL 和 C 语言函数。默认值为 none,表示禁用函数统计信息跟踪。只有超级用户和具有适当 SET 权限的用户才能更改此设置。

注意

足够简单的、可以被“内联”到调用查询中的 SQL 语言函数,无论此设置如何,都不会被跟踪。

stats_fetch_consistency (enum) #

确定在事务内多次访问累积统计信息时的行为。当设置为 none 时,每次访问都会从共享内存重新获取计数器。当设置为 cache 时,对某个对象的首次统计信息访问会将该统计信息缓存到事务结束,除非调用了 pg_stat_clear_snapshot()。当设置为 snapshot 时,首次统计信息访问会缓存当前数据库中所有可访问的统计信息,直到事务结束,除非调用了 pg_stat_clear_snapshot()。在事务中更改此参数会丢弃统计信息快照。默认值为 cache

注意

none 最适合监控系统。如果值只访问一次,这是最有效的。 cache 确保重复访问得到相同的值,这对于涉及例如自连接的查询很重要。 snapshot 在交互式检查统计信息时可能很有用,但开销更高,尤其是在存在许多数据库对象的情况下。

19.9.2. 统计信息监控 #

compute_query_id (enum) #

启用查询标识符的核心计算。查询标识符可以在 pg_stat_activity 视图中显示,使用 EXPLAIN,或在日志中发出(如果通过 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 权限的用户才能更改这些设置。

提交更正

如果您在文档中看到任何不正确、与您对特定功能的使用经验不符或需要进一步澄清的内容,请使用 此表单 报告文档问题。