pg_stat_statements:查询性能监控
pg_stat_statements
是一个数据库扩展,它暴露了一个同名的视图,用于跟踪数据库中执行的SQL语句的统计信息。下表展示了一些可用的统计数据和元数据:
列名 | 列类型 | 描述 |
---|---|---|
userid | oid (引用 pg_authid.oid ) | 执行语句的用户OID |
dbid | oid (引用 pg_database.oid ) | 执行语句所在数据库的OID |
toplevel | bool | 如果查询作为顶级语句执行则为真(当pg_stat_statements.track设置为top时始终为真) |
queryid | bigint | 用于标识相同规范化查询的哈希码 |
query | text | 代表性语句的文本 |
plans | bigint | 语句被规划的次数(如果启用了pg_stat_statements.track_planning,否则为零) |
total_plan_time | double precision | 规划语句所花费的总时间,以毫秒为单位(如果启用了pg_stat_statements.track_planning,否则为零) |
min_plan_time | double precision | 规划语句所花费的最小时间,以毫秒为单位(如果启用了pg_stat_statements.track_planning,否则为零) |
完整的统计信息列表可在pg_stat_statements文档中查看。
有关查询优化的更多信息,请参阅查询性能指南。
启用扩展
- 进入仪表盘的数据库页面
- 点击侧边栏中的扩展选项
- 搜索"pg_stat_statements"并启用该扩展
检查活动
pg_stat_statements
的一个常见用途是追踪昂贵或缓慢的查询。pg_stat_statements
视图为每个执行的查询包含一行统计信息。例如,您可以利用这些统计信息来识别针对特定表频繁执行且缓慢的查询。
12345678910111213141516select 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
根据结果,我们可以做出明智决策,确定需要优化或建立索引的查询。