PostgreSQL:SQL信息统计拓展

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: 概述pg_stat_statements是PostgreSQL数据库的一个拓展插件,用于收集数据库中的SQL运行信息,例如SQL的总执行时间,调用次数,共享内存命中率等信息。用于监控数据库的性能,是数据库性能监控的重要拓展模块pg_stat_statements 默认在PG的源码包中就有,无需下...

概述

pg_stat_statements是PostgreSQL数据库的一个拓展插件,用于收集数据库中的SQL运行信息,例如SQL的总执行时间,调用次数,共享内存命中率等信息。用于监控数据库的性能,是数据库性能监控的重要拓展模块
pg_stat_statements 默认在PG的源码包中就有,无需下载,但是需要手动配置安装一下,下面就来演示一次

下载安装

如果你是编译安装,直接去源码包中的contrib/pg_stat_statements目录,执行编译和安装动作即可
(如果你是yum安装,则需要下载源码包去找到拓展,最好是与你安装的数据库同版本的)
pg的源码包中有一些自带的功能插件

[root@stephen contrib]# pwd
/opt/postgresql-11.4/contrib
[root@stephen contrib]# ls pg_stat_statements
expected pg_stat_statements--1.3--1.4.sql pg_stat_statements.conf
Makefile pg_stat_statements--1.4--1.5.sql pg_stat_statements.control
pg_stat_statements--1.0--1.1.sql pg_stat_statements--1.4.sql pg_stat_statements--unpackaged--1.0.sql
pg_stat_statements--1.1--1.2.sql pg_stat_statements--1.5--1.6.sql sql
pg_stat_statements--1.2--1.3.sql pg_stat_statements.c

编译安装

make && make install

创建拓展

postgres=# create extension pg_stat_statements ;
CREATE EXTENSION

设置参数
安装完成之后,在PG的配置文件中的postgres.conf文件中添加以下参数

shared_preload_libraries='pg_stat_statements'     
track_io_timing = on
track_activity_query_size = 2048
pg_stat_statements.max = 1000
pg_stat_statements.track = all
pg_stat_statements.track_utility = on
pg_stat_statements.save = on

参数介绍

  • shared_preload_libraries:动态库的加载,可设置多个共享库,多个之间逗号风格。如果设置了不支持的共享库,数据库会重启报错且无法启动
  • pg_stat_statements.max :设置记录最大 的SQL数,默认5000条,如果达到设置值,执行频率最小的SQL会被丢弃
  • pg_stat_statements.track:设置哪类SQL记录,top指的是最外层的SQL,all包含函数中涉及的SQL
  • pg_stat_statements.track_utility:设置是否记录select,update,delete,insert以外的SQL命令
  • pg_stat_statements.save = on:当数据库关闭时是否将SQL信息记录到文件中,一般为on

全部安装完成之后,就在数据库下可以看到一个视图

postgres=# \d
List of relations
-[ RECORD 1 ]--------------
Schema | public
Name | pg_stat_statements
Type | view
Owner | postgres

这就是 pg_stat_statements 记录SQL执行情况的视图

使用

开启之后,任何执行在数据库中的语句都会被记录下来

如,我在数据库中做几次查询

stephen=# select * from datax_test limit 10;

然后就可以在pg_stat_statements这个视图中看到关于这个SQL执行的情况

stephen=# select * from pg_stat_statements where queryid = 2362179633810610809;
-[ RECORD 1 ]-------+----------------------------------
userid        | 10        #执行此SQL的用户oid
dbid        | 16384        #此SQL执行的数据库的oid
queryid        | 2362179633810610809        #此SQL的编号
query        | select * from datax_test limit $1        #此SQL的内容
calls        | 6        #此SQL的调用次数
total_time        | 17.551195        #执行总时间(ms)
min_time        | 0.030288        #最小时间        
max_time        | 17.390669        #最大时间
mean_time        | 2.92519916666667        #平均时间
stddev_time        | 6.46915489671277        #SQL花费时间的表中偏差
rows        | 60        #返回的行数
shared_blks_hit        | 5        #命中的共享内存数据块数
shared_blks_read        | 1        #共享内存度
shared_blks_dirtied        | 0        #产生的共享内存脏块数量
shared_blks_written        | 0        #写入的共享内存数据块数
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        | 17.332569        #从磁盘读取花费时间
blk_write_time        | 0        #从磁盘写入花费时间

重置统计
随着数据库运行,统计的pg_stat_statements 视图会越来越大可以通过pg_stat_statements_reset函数来清理已经获取的SQL

stephen=# select count(*) from pg_stat_statements;
 count 
-------
   106
(1 row)

stephen=# select pg_stat_statements_reset();
 pg_stat_statements_reset 
--------------------------
 
(1 row)

stephen=# select count(*) from pg_stat_statements;
 count 
-------
     2
(1 row)
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
4月前
|
存储 SQL 关系型数据库
PolarDB这个sql行存和列存性能差别好大 ,为什么?
PolarDB这个sql行存和列存性能差别好大 ,为什么?
33 0
|
4月前
|
SQL 大数据 HIVE
每天一道大厂SQL题【Day06】电商购买金额统计实战
每天一道大厂SQL题【Day06】电商购买金额统计实战
36 0
|
4月前
|
SQL 大数据
每天一道大厂SQL题【Day03】订单量统计
每天一道大厂SQL题【Day03】订单量统计
27 0
|
4月前
|
SQL 大数据 API
每天一道大厂SQL题【Day08】服务日志SQL统计
每天一道大厂SQL题【Day08】服务日志SQL统计
42 0
|
3月前
|
SQL Oracle 关系型数据库
Oracle-Oracle SQL Report (awrsqrpt.sql/awrsqrpi.sql)生成指定SQL的统计报表
Oracle-Oracle SQL Report (awrsqrpt.sql/awrsqrpi.sql)生成指定SQL的统计报表
28 0
|
17天前
|
SQL 关系型数据库 MySQL
mysql一条sql查询出多个统计结果
mysql一条sql查询出多个统计结果
13 0
|
1月前
|
SQL
现有用户成就统计需求,每个用户有多个成就,某一个成就会被多人拥有,写出数据表设计方案,用一条sql查出每个成就(B.ach_name)下的男生(sex=0)和女生(sex=1)分别有多少?
现有用户成就统计需求,每个用户有多个成就,某一个成就会被多人拥有,写出数据表设计方案,用一条sql查出每个成就(B.ach_name)下的男生(sex=0)和女生(sex=1)分别有多少?
41 0
|
1月前
|
SQL 关系型数据库 分布式数据库
在PolarDB中,如果慢SQL导致了CPU升高,进而又产生了更多的慢SQL
【2月更文挑战第22天】在PolarDB中,如果慢SQL导致了CPU升高,进而又产生了更多的慢SQL
12 1
|
1月前
|
SQL
SQL 查找入职员工时间排名倒数第三的员工所有信息
SQL 查找入职员工时间排名倒数第三的员工所有信息
|
2月前
|
SQL 算法 JavaScript
【数据库SQL server】关系型数据库的基本知识
【数据库SQL server】关系型数据库的基本知识
150 0