数据库

pg_stat_statements:查询性能监控


pg_stat_statements 是一个数据库扩展,它暴露了一个同名的视图,用于跟踪数据库中执行的SQL语句的统计信息。下表展示了一些可用的统计数据和元数据:

列名列类型描述
useridoid (引用 pg_authid.oid)执行语句的用户OID
dbidoid (引用 pg_database.oid)执行语句所在数据库的OID
toplevelbool如果查询作为顶级语句执行则为真(当pg_stat_statements.track设置为top时始终为真)
queryidbigint用于标识相同规范化查询的哈希码
querytext代表性语句的文本
plansbigint语句被规划的次数(如果启用了pg_stat_statements.track_planning,否则为零)
total_plan_timedouble precision规划语句所花费的总时间,以毫秒为单位(如果启用了pg_stat_statements.track_planning,否则为零)
min_plan_timedouble precision规划语句所花费的最小时间,以毫秒为单位(如果启用了pg_stat_statements.track_planning,否则为零)

完整的统计信息列表可在pg_stat_statements文档中查看。

有关查询优化的更多信息,请参阅查询性能指南

启用扩展

  1. 进入仪表盘的数据库页面
  2. 点击侧边栏中的扩展选项
  3. 搜索"pg_stat_statements"并启用该扩展

检查活动

pg_stat_statements的一个常见用途是追踪昂贵或缓慢的查询。pg_stat_statements视图为每个执行的查询包含一行统计信息。例如,您可以利用这些统计信息来识别针对特定表频繁执行且缓慢的查询。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
select calls, mean_exec_time, max_exec_time, total_exec_time, stddev_exec_time, queryfrom pg_stat_statementswhere calls > 50 -- 至少调用50次 and mean_exec_time > 2.0 -- 平均每次调用至少2毫秒 and total_exec_time > 60000 -- 总共花费至少一分钟服务器时间 and query ilike '%user_in_organization%' -- 筛选涉及user_in_organization表的查询order by calls desc

根据结果,我们可以做出明智决策,确定需要优化或建立索引的查询。

相关资源