PostgreSQL 13: Pg_stat_statements视图新增执行计划耗时信息

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
2
# - Shared Library Preloading -
shared_preload_libraries = 'pg_stat_statements' # (change requires restart)

之后重启数据库生效。

查看pg_stat_statements

查看pg_stat_statements视图,重点关注plans、total_plan_time、min_plan_time、max_plan_time、mean_plan_time、stddev_plan_time这几个字段,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
mydb=# SELECT *FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 1;
-[ RECORD 1 ]-------+--------------------------------------------------
userid | 16384
dbid | 16386
queryid | -2142594174639416796
query | UPDATE user1 SET username=$3||$1 WHERE userid=$2
plans | 24
total_plan_time | 37.289208999999985
min_plan_time | 0.051327
max_plan_time | 9.368227
mean_plan_time | 1.5537170416666664
stddev_plan_time | 3.2327633469339148
calls | 185544
total_exec_time | 362509.9102230071
min_exec_time | 0.025989
max_exec_time | 70.43187400000001
mean_exec_time | 1.9537678945317534
stddev_exec_time | 2.269387966116336
rows | 185544
shared_blks_hit | 808806
shared_blks_read | 300084
shared_blks_dirtied | 205121
shared_blks_written | 38383
local_blks_hit | 0
local_blks_read | 0
local_blks_dirtied | 0
local_blks_written | 0
temp_blks_read | 0
temp_blks_written | 0
blk_read_time | 0
blk_write_time | 0
wal_records | 438722
wal_fpi | 92674
wal_bytes | 773484932

以上说明这条UPDATE语句共执行185544次(calls字段),执行计划生成了24次(plans字段),生成执行计划的总时间为37.289毫秒(total_plan_time字段)。

其它字段根据字段名称较容易理解,可参考手册,这里不做解释。

pg_stat_statements.track_planning (boolean)

pg_stat_statements是否开启对执行计划时间的跟踪可通过track_planning参数控制,默认为on,只有超级用户才能修改此参数。

参考

最后推荐和张文升共同编写的《PostgreSQL实战》,本书基于PostgreSQL 10 编写,共18章,重点介绍SQL高级特性、并行查询、分区表、物理复制、逻辑复制、备份恢复、高可用、性能优化、PostGIS等,涵盖大量实战用例!

购买链接:https://item.jd.com/12405774.html

PostgreSQL实战
感谢支持!
0%