postgresql 查找慢sql之二: pg_stat_statements
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相关推荐
- PostgreSQL 如何查找TOP SQL (例如IO消耗最高的SQL) (包含SQL优化内容)
目录 背景 一.安装pg_stat_statements 二.加载pg_stat_statements模块 三.配置pg_stat_statements采样参数 四.创建pg_stat_stateme ...
- sql statements_Postgresql监控sql模块之pg_stat_statements模块--部署篇
概述 今天主要介绍一下PG一个很重要的模块--pg_stat_statements模块,对于做性能观察还是很不错的. 一.pg_state_statements模块简介 1.简介 pg_stat_st ...
- Citus 分布式 PostgreSQL 集群 - SQL Reference(查询处理)
一个 Citus 集群由一个 coordinator 实例和多个 worker 实例组成. 数据在 worker 上进行分片和复制,而 coordinator 存储有关这些分片的元数据.向集群发出的所 ...
- 牛客网SQL实战二刷 | Day10
「牛客网SQL实战二刷」是个系列学习笔记博文,今天解析7道SQL题目- 第55 - 61题. 每篇笔记的格式大致为,三大板块: 大纲 题目(题目描述.思路.代码.相关参考资料/答疑) 回顾 ❤️「往期 ...
- 牛客网SQL实战二刷 | Day2
「牛客网SQL实战二刷」是个系列学习笔记博文,每天解析6道SQL题目- 今天是第7-12 题!该系列的其他博文,可在「我的博客」 中查看- 每篇笔记的格式大致为,三大板块: 大纲 题目(题目描述.思路 ...
- 高级SQL优化(二) ——《12年资深DBA教你Oracle开发与优化——性能优化部分》
目录: Oracle数据完整性和锁机制 索引及优化之表分析 表分析.约束及表间关系 Oracle体系结构1 Oracle体系结构2 海量数据库及分区1 海量数据库及分区2 海量数据库及分区 ...
- SQL注入-二次注入和多语句注入
二次注入 一.二次注入的定义 简单的说二次注入就是已经存储到数据库中的用户输入,在进行再一次读取的时候进去SQL查询语句中的注入. 二.二次注入的原理 第一步:插入恶意数据 第一次进行数据库插入数据的 ...
- 第十三章 使用动态SQL(二)
文章目录 第十三章 使用动态SQL(二) 准备SQL语句 %Prepare() %PrepareClassQuery() 成功准备的结果 `preparse()`方法 第十三章 使用动态SQL(二) ...
- “查找”学习提纲(二)——树型查找和散列查找
文章目录 前言 代码模板 二叉排序/查找/搜索树查找 适用 性能 代码模板 折半查找和二叉排序树查找总结 平衡二叉(排序)树/AVL树 构造相应层数的树至少需要的结点数 平衡调整的过程 平衡调整的类型 ...
- 牛客网SQL实战二刷 | 完整解析 -- 目录索引
「牛客网SQL实战二刷」是个系列学习笔记博文,Day1 - Day10,每天解析6道SQL题目- 初衷是留给自己一份笔记,也希望能分享给「一起学习SQL的你」? 每篇笔记的格式大致为,三大板块: 大纲 ...
最新文章
- LA4238 Area of Polycubes(立方体的表面积)
- 用神经网络分类陀螺和遥远星体
- 每天一道LeetCode-----有序数组右移n位后查找某个元素
- WCF的事务(5篇)
- javascript excel
- ajax为什么返回html标签,AJAX与特定值后返回的HTML标签
- springcloud服务网关Netflix Zuul入门简介
- php使用hset报错,hSet 命令/方法/函数
- Hash和Bloom Filter
- LCS(HDU_5495 循环节)
- 论存储芯片对国家发展的重要性
- Veket Win7PE Win10PE多启动维护优盘制作
- 完美mix-in(混入)模式———js对象想怎么玩就怎么玩
- 创维电视盒子导致网络瘫痪诡异事件处理方法(openwrt端口隔离)
- 更多免费资源解压密码_更多免费(几乎免费)法律图片资源
- 简明扼要理解YOLOX
- ASP.NET正则实现表情替换为图片,如[hanx]替换为img src=img/hanx.gif/
- TC358746AXBG/748XBG 桥接器说明
- (六)类和对象(二)const
- 抖音怎么引流卖童装?淘宝童装卖家利用抖音引流