由 John Doe 七月 21, 2025
你想要查看数据库中所有会话连接的历史统计信息吗?
特性提交日志
为 pg_stat_database 新增会话和会话时间计数器。
这为 pg_stat_database 增加了会话数量、不同类型的会话终止类型的计数器,以及数据库中活跃时间与空闲时间的计时器。
在内部,还将参数 “force” 重命名为 “disconnect”。这是该参数之前唯一的使用场景,因此将其重新用于这个更具体的场景,比新增一个参数更简洁。
讨论:https://postgr.es/m/b07e1f9953701b90c66ed368656f2aef40cac4fb.camel@cybertec.at
示例
在本次提交的特性中,pg_stat_database 系统视图新增了以下列:
- session_time(会话时间)
- active_time(活跃时间)
- idle_in_transaction_time(事务中空闲时间)
- sessions(会话数)
- sessions_abandoned(废弃的会话数)
- sessions_fatal(因致命错误终止的会话数)
- sessions_killed(被杀死的会话数)
时间列的值以毫秒为单位,分别表示连接到特定数据库的所有会话的总持续时间、运行查询所花费的时间(与空闲时间相对),以及在事务中处于空闲状态所花费的时间。
此外,还有 4 个计数器用于统计会话数量,第一个是总会话数,另外三个是非正常退出的会话数:
- sessions_abandoned:通常是网络连接问题或客户端应用程序崩溃导致的会话退出
- sessions_fatal:因致命(FATAL)级别错误而终止的会话数
- sessions_killed:被用户杀死的会话数。例如,通过调用
pg_terminate_backend()
所有这些统计信息都可以实时查看:
$ select * from pg_stat_database where datname = 'redrock' \gx
-[ RECORD 1 ]-------------------------------------------
datid | 220513
datname | redrock
numbackends | 1
xact_commit | 296
xact_rollback | 2
blks_read | 321
blks_hit | 9137
tup_returned | 87291
tup_fetched | 2768
tup_inserted | 6
tup_updated | 9
tup_deleted | 0
conflicts | 0
temp_files | 0
temp_bytes | 0
deadlocks | 0
checksum_failures | [null]
checksum_last_failure | [null]
blk_read_time | 4.25
blk_write_time | 0
session_time | 3954923.837
active_time | 90.272
idle_in_transaction_time | 0
sessions | 14
sessions_abandoned | 0
sessions_fatal | 0
sessions_killed | 0
stats_reset | 2025-07-18 12:19:08.396411+08
这些信息对于生成监控图表非常有用,特别是生成 active_time 的变化曲线会很有意义。
非常不错的体验,感谢所有参与的社区人员。
参考
提交日志:https://git.postgresql.org/pg/commitdiff/960869da0803427d14335bba24393f414b476e2c