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 扩展,如下:

[pg13@ydtf01 ~]$ psql mydb
psql (13beta1)
Type "help" for help.

mydb=# CREATE EXTENSION pg_stat_statements ;
CREATE EXTENSION

$PGDATA/postgresql.conf 配置以下参数,如下:

# - 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 这几个字段,如下:

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字段)。

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

我来评几句
登录后评论

已发表评论数()

相关站点

热门文章