pg_stat_statements模块提供一种方法追踪一个服务器所执行的所有 SQL 语句的执行统计信息。

该模块必须通过在 postgresql.conf 的 shared_preload_libraries 中增加pg_stat_statements 来载入,因为它需要额外的共享内存。这意味着增加或移除该模块需要一次服务器重启。

当 pg_stat_statements 被载入时,它会跟踪该服务器 的所有数据库的统计信息。该模块提供了一个视图 pg_stat_statements 以及函数 pg_stat_statements_reset 和pg_stat_statements 用于访问和操纵这些统计信息。这些视图 和函数不是全局可用的,但是可以用 CREATE EXTENSION pg_stat_statements 为特定数据库启用它们。

apt 、yum 安装

需要安装相同版本的contrib包,以ubuntu为例。

# apt install postgresql-contrib-9.6
# dpkg -l |grep -i postgresql-contrib-9.6
ii  postgresql-contrib-9.6              9.6.8-1.pgdg16.04+1                        amd64        additional facilities for PostgreSQL

源码编译安装

编译安装时如果是如下方式,则已经安装了。

$ make world
$ make install-world

否则,需要进入到源码的 \contrib\pg_stat_statements\ 下单独编译安装

$ cd /tmp/postgresql-9.6.8\contrib\pg_stat_statements\
$ make
$ make install

创建 pg_stat_statements

由于pg_stat_statements 既使用了hook,同时又是以 extension 形式被使用,所以需要做两件事情:

1、修改 postgrsql.conf 的 shared_preload_libraries 值后,重启postgresql。

$ vi postgresql.conf
shared_preload_libraries = 'pg_stat_statements'         # (change requires restart)# systemctl stop postgresql
# systemctl start postgresql

2、创建 extension
由于pg_stat_statements针对的是数据库级别,所以需要首先进入指定数据库

postgres=# \c peiybdb
peiybdb=# create extension pg_stat_statements;

创建好后,多出一个视图 pg_stat_statements 和 两个函数 pg_stat_statements_reset;

peiybdb=# \dfList of functionsSchema |           Name           | Result data type |                                                                                                                                                                                                                                                                                                                          Argument data types                                                                                                                                                                                                                                                                                                                           |  Type
--------+--------------------------+------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------public | pg_stat_statements       | SETOF record     | showtext boolean, OUT userid oid, OUT dbid oid, OUT queryid bigint, OUT query text, OUT calls bigint, OUT total_time double precision, OUT min_time double precision, OUT max_time double precision, OUT mean_time double precision, OUT stddev_time double precision, OUT rows bigint, OUT shared_blks_hit bigint, OUT shared_blks_read bigint, OUT shared_blks_dirtied bigint, OUT shared_blks_written bigint, OUT local_blks_hit bigint, OUT local_blks_read bigint, OUT local_blks_dirtied bigint, OUT local_blks_written bigint, OUT temp_blks_read bigint, OUT temp_blks_written bigint, OUT blk_read_time double precision, OUT blk_write_time double precision | normalpublic | pg_stat_statements_reset | void             |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | normal
(2 rows)peiybdb=# \df+ pg_stat_statements List of functionsSchema |        Name        | Result data type |                                                                                                                                                                                                                                                                                                                          Argument data types                                                                                                                                                                                                                                                                                                                           |  Type  | Volatility | Parallel |  Owner   | Security | Access privileges | Language |      Source code       | Description
--------+--------------------+------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------+------------+----------+----------+----------+-------------------+----------+------------------------+-------------public | pg_stat_statements | SETOF record     | showtext boolean, OUT userid oid, OUT dbid oid, OUT queryid bigint, OUT query text, OUT calls bigint, OUT total_time double precision, OUT min_time double precision, OUT max_time double precision, OUT mean_time double precision, OUT stddev_time double precision, OUT rows bigint, OUT shared_blks_hit bigint, OUT shared_blks_read bigint, OUT shared_blks_dirtied bigint, OUT shared_blks_written bigint, OUT local_blks_hit bigint, OUT local_blks_read bigint, OUT local_blks_dirtied bigint, OUT local_blks_written bigint, OUT temp_blks_read bigint, OUT temp_blks_written bigint, OUT blk_read_time double precision, OUT blk_write_time double precision | normal | volatile   | safe     | postgres | invoker  |                   | c        | pg_stat_statements_1_3 |
(1 row)
peiybdb=# \dList of relationsSchema |        Name        | Type  |  Owner
--------+--------------------+-------+----------public | pg_stat_statements | view  | postgrespeiybdb=# \d+ pg_stat_statementsView "public.pg_stat_statements"Column        |       Type       | Modifiers | Storage  | Description
---------------------+------------------+-----------+----------+-------------userid              | oid              |           | plain    | dbid                | oid              |           | plain    | queryid             | bigint           |           | plain    | query               | text             |           | extended | calls               | bigint           |           | plain    | total_time          | double precision |           | plain    | min_time            | double precision |           | plain    | max_time            | double precision |           | plain    | mean_time           | double precision |           | plain    | stddev_time         | double precision |           | plain    | rows                | bigint           |           | plain    | shared_blks_hit     | bigint           |           | plain    | shared_blks_read    | bigint           |           | plain    | shared_blks_dirtied | bigint           |           | plain    | shared_blks_written | bigint           |           | plain    | local_blks_hit      | bigint           |           | plain    | local_blks_read     | bigint           |           | plain    | local_blks_dirtied  | bigint           |           | plain    | local_blks_written  | bigint           |           | plain    | temp_blks_read      | bigint           |           | plain    | temp_blks_written   | bigint           |           | plain    | blk_read_time       | double precision |           | plain    | blk_write_time      | double precision |           | plain    |
View definition:SELECT pg_stat_statements.userid,pg_stat_statements.dbid,pg_stat_statements.queryid,pg_stat_statements.query,pg_stat_statements.calls,pg_stat_statements.total_time,pg_stat_statements.min_time,pg_stat_statements.max_time,pg_stat_statements.mean_time,pg_stat_statements.stddev_time,pg_stat_statements.rows,pg_stat_statements.shared_blks_hit,pg_stat_statements.shared_blks_read,pg_stat_statements.shared_blks_dirtied,pg_stat_statements.shared_blks_written,pg_stat_statements.local_blks_hit,pg_stat_statements.local_blks_read,pg_stat_statements.local_blks_dirtied,pg_stat_statements.local_blks_written,pg_stat_statements.temp_blks_read,pg_stat_statements.temp_blks_written,pg_stat_statements.blk_read_time,pg_stat_statements.blk_write_timeFROM pg_stat_statements(true) pg_stat_statements(userid, dbid, queryid, query, calls, total_time, min_time, max_time, mean_time, stddev_time, rows, shared_blks_hit, shared_blks_read, shared_blks_dirtied, shared_blks_written, local_blks_hit, local_blks_read, local_blks_dirtied, local_blks_written, temp_blks_read, temp_blks_written, blk_read_time, blk_write_time);

可以使用 pg_stat_statements_reset() 函数来重置 pg_stat_statements,方便阶段性的分析慢sql,比如专项优化、大版本上线监控。

peiybdb=# select pg_stat_statements_reset();pg_stat_statements_reset
--------------------------(1 row)
peiybdb=#
peiybdb=#
peiybdb=# select count(1) from pg_stat_statements;count
-------1
(1 row)

查找top sql

top io sql

平均单次 io

select userid::regrole, dbid, query from pg_stat_statements order by (blk_read_time+blk_write_time)/calls desc limit 20;

累计 io

select userid::regrole, dbid, query from pg_stat_statements order by (blk_read_time+blk_write_time) desc limit 20;

top time sql

平均 time

select userid::regrole, dbid, query from pg_stat_statements order by mean_time desc limit 20;

累计 time

select userid::regrole, dbid, query from pg_stat_statements order by total_time desc limit 20;

不稳定,时快时慢

select userid::regrole, dbid, query from pg_stat_statements order by stddev_time desc limit 20;

top shared memory

select userid::regrole, dbid, query from pg_stat_statements order by (shared_blks_hit+shared_blks_dirtied) desc limit 20;

top temp memory

select userid::regrole, dbid, query from pg_stat_statements order by temp_blks_written desc limit 20;

参考:
http://postgres.cn/docs/9.6/pgstatstatements.html
https://blog.csdn.net/ctypyb2002/article/details/77711802

postgresql 查找慢sql之二: pg_stat_statements相关推荐

  1. PostgreSQL 如何查找TOP SQL (例如IO消耗最高的SQL) (包含SQL优化内容)

    目录 背景 一.安装pg_stat_statements 二.加载pg_stat_statements模块 三.配置pg_stat_statements采样参数 四.创建pg_stat_stateme ...

  2. sql statements_Postgresql监控sql模块之pg_stat_statements模块--部署篇

    概述 今天主要介绍一下PG一个很重要的模块--pg_stat_statements模块,对于做性能观察还是很不错的. 一.pg_state_statements模块简介 1.简介 pg_stat_st ...

  3. Citus 分布式 PostgreSQL 集群 - SQL Reference(查询处理)

    一个 Citus 集群由一个 coordinator 实例和多个 worker 实例组成. 数据在 worker 上进行分片和复制,而 coordinator 存储有关这些分片的元数据.向集群发出的所 ...

  4. 牛客网SQL实战二刷 | Day10

    「牛客网SQL实战二刷」是个系列学习笔记博文,今天解析7道SQL题目- 第55 - 61题. 每篇笔记的格式大致为,三大板块: 大纲 题目(题目描述.思路.代码.相关参考资料/答疑) 回顾 ❤️「往期 ...

  5. 牛客网SQL实战二刷 | Day2

    「牛客网SQL实战二刷」是个系列学习笔记博文,每天解析6道SQL题目- 今天是第7-12 题!该系列的其他博文,可在「我的博客」 中查看- 每篇笔记的格式大致为,三大板块: 大纲 题目(题目描述.思路 ...

  6. 高级SQL优化(二) ——《12年资深DBA教你Oracle开发与优化——性能优化部分》

    目录: Oracle数据完整性和锁机制  索引及优化之表分析  表分析.约束及表间关系  Oracle体系结构1 Oracle体系结构2  海量数据库及分区1  海量数据库及分区2  海量数据库及分区 ...

  7. SQL注入-二次注入和多语句注入

    二次注入 一.二次注入的定义 简单的说二次注入就是已经存储到数据库中的用户输入,在进行再一次读取的时候进去SQL查询语句中的注入. 二.二次注入的原理 第一步:插入恶意数据 第一次进行数据库插入数据的 ...

  8. 第十三章 使用动态SQL(二)

    文章目录 第十三章 使用动态SQL(二) 准备SQL语句 %Prepare() %PrepareClassQuery() 成功准备的结果 `preparse()`方法 第十三章 使用动态SQL(二) ...

  9. “查找”学习提纲(二)——树型查找和散列查找

    文章目录 前言 代码模板 二叉排序/查找/搜索树查找 适用 性能 代码模板 折半查找和二叉排序树查找总结 平衡二叉(排序)树/AVL树 构造相应层数的树至少需要的结点数 平衡调整的过程 平衡调整的类型 ...

  10. 牛客网SQL实战二刷 | 完整解析 -- 目录索引

    「牛客网SQL实战二刷」是个系列学习笔记博文,Day1 - Day10,每天解析6道SQL题目- 初衷是留给自己一份笔记,也希望能分享给「一起学习SQL的你」? 每篇笔记的格式大致为,三大板块: 大纲 ...

最新文章

  1. LA4238 Area of Polycubes(立方体的表面积)
  2. 用神经网络分类陀螺和遥远星体
  3. 每天一道LeetCode-----有序数组右移n位后查找某个元素
  4. WCF的事务(5篇)
  5. javascript excel
  6. ajax为什么返回html标签,AJAX与特定值后返回的HTML标签
  7. springcloud服务网关Netflix Zuul入门简介
  8. php使用hset报错,hSet 命令/方法/函数
  9. Hash和Bloom Filter
  10. LCS(HDU_5495 循环节)
  11. 论存储芯片对国家发展的重要性
  12. Veket Win7PE Win10PE多启动维护优盘制作
  13. 完美mix-in(混入)模式———js对象想怎么玩就怎么玩
  14. 创维电视盒子导致网络瘫痪诡异事件处理方法(openwrt端口隔离)
  15. 更多免费资源解压密码_更多免费(几乎免费)法律图片资源
  16. 简明扼要理解YOLOX
  17. ASP.NET正则实现表情替换为图片,如[hanx]替换为img src=img/hanx.gif/
  18. TC358746AXBG/748XBG 桥接器说明
  19. (六)类和对象(二)const
  20. 抖音怎么引流卖童装?淘宝童装卖家利用抖音引流

热门文章

  1. 五大特色展区抢占C位,2019深圳国际全触与显示展引燃触控显示产业未来
  2. Java笔记(错题)
  3. 我愿称之为:最强播放器!
  4. 被讨厌的勇气:共同体感觉
  5. 一文读懂随机森林的解释和实现
  6. 架构设计的深入思考与总结——概述
  7. 最大公约数是啥意思_最大公约数是什么意思
  8. 浅析显卡市场的未来走向:现在可以抄底了吗?
  9. 云计算技术实际上就是计算机网络的,浅析计算机网络的云计算技术.doc
  10. 人工智能就业前景越来越严峻了,你还在坚持吗?