PostgreSQL作为常用的开源关系型数据库,提供了丰富的统计信息功能,能够帮助用户了解数据库的运行状态。下面我们先通过一张示意图了解统计信息的作用范围:

PostgreSQL内置统计视图
PostgreSQL默认提供了多个以pg_stat_开头的系统视图,这些视图存储了数据库运行过程中的各类统计信息,不需要额外安装插件就可以直接使用。
常用内置统计视图说明
| 视图名称 | 统计内容 |
|---|---|
| pg_stat_database | 数据库级别的统计信息,包括连接数、事务数、读写行数等 |
| pg_stat_user_tables | 用户表的统计信息,包括顺序扫描次数、索引扫描次数、插入更新删除行数等 |
| pg_stat_activity | 当前数据库连接的活动信息,包括执行的SQL、等待状态、连接时间等 |
内置视图查询示例
如果需要查看当前所有数据库的基本统计信息,可以执行以下SQL:
-- 查询所有数据库的连接数、事务数、读写行数统计 SELECT datname AS 数据库名称, numbackends AS 当前连接数, xact_commit AS 已提交事务数, xact_rollback AS 已回滚事务数, tup_returned AS 返回行数, tup_fetched AS 获取行数, tup_inserted AS 插入行数, tup_updated AS 更新行数, tup_deleted AS 删除行数 FROM pg_stat_database ORDER BY datname;
如果要查看当前正在执行的SQL活动,可以使用pg_stat_activity视图:
-- 查询当前活跃的连接和执行的SQL SELECT pid AS 进程ID, usename AS 用户名, datname AS 数据库名, state AS 连接状态, query AS 执行的SQL, query_start AS 查询开始时间 FROM pg_stat_activity WHERE state != 'idle' ORDER BY query_start DESC;
使用pg_stat_statements扩展监控查询统计
内置视图只能看到实时的或者累计的基础统计,如果需要分析具体SQL语句的执行情况,比如慢查询、执行次数、总耗时等,就需要安装pg_stat_statements扩展。
扩展安装与配置
首先需要在PostgreSQL的配置文件postgresql.conf中添加以下配置,然后重启数据库:
# 开启pg_stat_statements扩展 shared_preload_libraries = 'pg_stat_statements' # 设置统计跟踪的SQL数量,默认5000 pg_stat_statements.max = 10000 # 是否跟踪所有数据库,默认on pg_stat_statements.track = all
重启数据库后,在需要统计的数据库中创建扩展:
-- 在目标数据库中创建扩展 CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
查询SQL执行统计
扩展创建完成后,就可以通过pg_stat_statements视图查询所有执行过的SQL的统计信息:
-- 查询总耗时前10的SQL语句 SELECT query AS SQL语句, calls AS 执行次数, total_exec_time AS 总执行耗时毫秒, mean_exec_time AS 平均执行耗时毫秒, rows AS 返回总行数 FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 10;
统计信息的重置与维护
PostgreSQL的统计信息是累计存储的,如果需要清空历史统计重新开始统计,可以使用对应的重置函数:
- 重置所有统计信息:
SELECT pg_stat_reset(); - 重置
pg_stat_statements的统计:SELECT pg_stat_statements_reset();
需要注意,重置操作会清空所有历史统计数据,建议在需要重新统计的场景下使用,日常监控不需要频繁重置。
实际监控场景建议
在日常运维中,可以结合内置视图和pg_stat_statements扩展实现全面的统计监控:
- 定期检查
pg_stat_database了解数据库整体负载 - 通过
pg_stat_user_tables分析表的访问情况,优化索引配置 - 用
pg_stat_activity实时排查阻塞、慢查询问题 - 通过
pg_stat_statements定位高频、高耗时的SQL,进行针对性优化
如果需要长期监控,还可以将统计信息定时采集存储到专门的监控表中,结合可视化工具展示趋势,更方便地发现数据库的性能变化。
PostgreSQL统计信息数据源监控pg_stat_statements修改时间:2026-05-30 21:42:59