PostgreSQL:SQL信息统计拓展

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 概述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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
3月前
|
XML SQL 数据格式
XML动态sql查询当前时间之前的信息报错
XML动态sql查询当前时间之前的信息报错
54 2
|
8天前
|
SQL 监控 关系型数据库
SQL语句当前及历史信息查询-performance schema的使用
本文介绍了如何使用MySQL的Performance Schema来获取SQL语句的当前和历史执行信息。Performance Schema默认在MySQL 8.0中启用,可以通过查询相关表来获取详细的SQL执行信息,包括当前执行的SQL、历史执行记录和统计汇总信息,从而快速定位和解决性能瓶颈。
|
23天前
|
SQL
开启慢SQL设置long_query_time=0.1为啥会统计的sql却存在小于100毫秒的sql
开启慢SQL设置long_query_time=0.1为啥会统计的sql却存在小于100毫秒的sql
30 1
|
2月前
|
SQL Java
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
34 1
|
1月前
|
SQL 存储 关系型数据库
mysql 数据库空间统计sql
mysql 数据库空间统计sql
46 0
|
2月前
|
SQL 存储 关系型数据库
postgre的sql call是干啥的
postgre的sql call是干啥的
|
2月前
|
SQL 关系型数据库 C语言
PostgreSQL SQL扩展 ---- C语言函数(三)
可以用C(或者与C兼容,比如C++)语言编写用户自定义函数(User-defined functions)。这些函数被编译到动态可加载目标文件(也称为共享库)中并被守护进程加载到服务中。“C语言函数”与“内部函数”的区别就在于动态加载这个特性,二者的实际编码约定本质上是相同的(因此,标准的内部函数库为用户自定义C语言函数提供了丰富的示例代码)
|
3月前
|
SQL 存储 关系型数据库
PostgreSQL核心之SQL基础学习
PostgreSQL核心之SQL基础学习
45 3
|
3月前
|
SQL 流计算
Flink SQL 在快手实践问题之由于meta信息变化导致的state向前兼容问题如何解决
Flink SQL 在快手实践问题之由于meta信息变化导致的state向前兼容问题如何解决
49 1
|
3月前
|
SQL 关系型数据库 PostgreSQL
PostgreSQL 如何通过身份证号码进行年龄段的统计?
【8月更文挑战第20天】PostgreSQL 如何通过身份证号码进行年龄段的统计?
475 2