19.9. 运行时统计数据 #
19.9.1. 累积查询和索引统计 #
这些参数控制服务器范围内的累积统计系统。启用后,收集的数据可以通过 pg_stat 和 pg_statio
系列系统视图进行访问。有关更多信息,请参阅第 27 章。
track_activities(boolean) #启用对每个会话当前执行命令的信息收集,包括其标识符和命令开始执行的时间。此参数默认为开启状态。请注意,即使启用了此参数,只有超级用户、具有
pg_read_all_stats角色权限的角色和拥有被报告会话的用户(包括属于他们具有权限的角色的会话)才能看到此信息,因此不应构成安全风险。只有超级用户和具有适当SET权限的用户才能更改此设置。track_activity_query_size(integer) #为每个活动会话指定存储当前执行命令的文本所预留的内存量,它们被用于
pg_stat_activity.query字段。如果指定值时没有单位,则以字节为单位。默认值是 1024 字节。这个参数只能在服务器启动时被设置。track_counts(boolean) #启用对数据库活动的统计信息收集。此参数默认为开启,因为自动清理守护进程需要这些收集到的信息。只有超级用户和具有适当
SET权限的用户才能更改此设置。track_cost_delay_timing(boolean) #启用基于代价的清理延迟计时(参见第 19.10.2 节)。默认情况下该参数关闭,因为它需要反复查询操作系统当前时间,在某些平台上可能带来显著开销。你可以使用 pg_test_timing 工具来衡量系统上的计时开销。基于代价的清理延迟计时信息会显示在
pg_stat_progress_vacuum、pg_stat_progress_analyze中,也会显示在带有VERBOSE选项的 VACUUM 和 ANALYZE 输出中,并且当设置了 log_autovacuum_min_duration 时,自动清理进程还会为自动清理和自动分析记录这些信息。只有超级用户和具有适当SET权限的用户才能更改此设置。track_io_timing(boolean) #启用数据库 I/O 等待的计时。此参数默认关闭,因为计时需要反复向操作系统查询当前时间,在某些平台上可能会产生显著开销。可以使用 pg_test_timing 工具测量本系统上的计时开销。I/O 计时信息会显示在
pg_stat_database中、pg_stat_io中(当object不是wal时)、pg_stat_get_backend_io()函数的输出中(当object不是wal时)、使用BUFFERS选项的 EXPLAIN 输出中、使用VERBOSE选项的 VACUUM 输出中,自动清理进程也会在执行自动清理和自动分析时输出这些信息(需设置 log_autovacuum_min_duration),pg_stat_statements 同样提供这些信息。只有超级用户和具有适当SET权限的用户可以更改此设置。track_wal_io_timing(boolean) #启用 WAL I/O 等待的计时。此参数默认关闭,因为它会反复向操作系统查询当前时间,可能在某些平台上产生显著开销。可以使用 pg_test_timing 工具测量系统上的计时开销。I/O 计时信息显示在
pg_stat_io中object为wal的行,以及pg_stat_get_backend_io()函数输出中object为wal的行。只有超级用户和具有适当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权限的用户才能更改这些设置。