PostgreSQL 13 版本前 pg_stat_statements 仅跟踪SQL的执行时间信息,不跟踪SQL的执行计划生成时间信息。
PostgreSQL 13 版本的pg_stat_statements
新增了这部分信息,手册说明如下。
手册说明
Allow pg_stat_statements to optionally track the planning time of statements (Julien Rouhaud, Pascal Legrand, Thomas Munro, Fujii Masao)
Previously only execution time was tracked.
pg_stat_statements
新增了以下字段跟踪执行计划的时间信息,如下:
- plans: SQL被解析生成执行计划的次数
- total_plan_time: 生成执行计划的时间总和,单位为毫秒。
- min_plan_time: 生成执行计划的最小时间,单位为毫秒。
- max_plan_time: 生成执行计划的最大时间,单位为毫秒。
- mean_plan_time: 生成执行计划的平均时间,单位为毫秒。
- stddev_exec_time: 生成执行计划的出错时间,单位为毫秒。
安装Pg_stat_statements
使用 pg_stat_statements 记录运行中的 SQL 信息详见介绍了pg_stat_statements
的安装部署,本文仅做简单演示,以理解新增字段的含义。
使用超级用户postgres
登录数据库,创建pg_stat_statements
扩展,如下:1
2
3
4
5
6[pg13@ydtf01 ~]$ psql mydb
psql (13beta1)
Type "help" for help.
mydb=# CREATE EXTENSION pg_stat_statements ;
CREATE EXTENSION
$PGDATA/postgresql.conf
配置以下参数,如下:
1 | # - Shared Library Preloading - |
之后重启数据库生效。
查看pg_stat_statements
查看pg_stat_statements
视图,重点关注plans、total_plan_time、min_plan_time、max_plan_time、mean_plan_time、stddev_plan_time
这几个字段,如下:
1 | mydb=# SELECT *FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 1; |
以上说明这条UPDATE
语句共执行185544次(calls字段),执行计划生成了24次(plans字段),生成执行计划的总时间为37.289毫秒(total_plan_time字段)。
其它字段根据字段名称较容易理解,可参考手册,这里不做解释。
pg_stat_statements.track_planning (boolean)
pg_stat_statements
是否开启对执行计划时间的跟踪可通过track_planning
参数控制,默认为on
,只有超级用户才能修改此参数。