PG监控插件之pg_stat_statements

0    1589    10

Tags:

👉 本文共约4612个字,系统预计阅读时间或需18分钟。

1、什么是pg_stat_statements?

是pg的一个扩展插件,通常用于统计数据库的资源开销,分析TOP SQL 。

对于pg数据库来说,性能调优并不仅仅意味着正确调整postgresql.conf或者内核参数,还意味着我们需要找到性能瓶颈,找出慢查询,并理解系统当下正在做什么。而借助pg_stat_statements,就可以帮助我们确定哪些查询导致了性能低下,以及这些慢查询它们的执行频率等信息。

2、安装pg_stat_statements?

安装

pg_stat_statements是PostgreSQL的核心插件之一。可以在编译PostgreSQL时安装,也可以单独安装。

编译时安装:

单独安装:

配置

  1. 修改postgresql.conf中的shared_preload_libraries,然后重启PostgreSQL。

如果要跟踪IO消耗的时间,还需要打开如下参数

设置单条SQL的最长长度,超过被截断显示(可选),指定为每个活动会话跟踪当前正在执行的命令的字节数,用于pg_stat_activity.query字段。 默认值为1024,建议增大该值至 4096或更大。此参数只能在服务器启动时设置。

配置pg_stat_statements采样参数(可选)

配置完成后,需要重启PG。

  1. 每个数据库都创建扩展

查看版本

3、什么是shared_preload_libraries?

参考:https://developer.aliyun.com/article/8235

PG支持通过动态库的方式来扩展pg的功能,在调用动态库涉及的函数时会自动加载这些库,但是某些动态库需要预加载。比如pg_stat_statements。

shared_preload_libraries就是指定在服务器启动时预加载一个或多个shared libraries。它包含一个以逗号分隔的库名称列表。条目之间的空白将被忽略,如果需要在名称中包含空格或逗号,则使用双引号包含库名。此参数只能在服务器启动时设置,注意,如果没有找到指定的库, 服务器将无法启动。

此外,还有两个相关参数:local_preload_libraries和session_preload_libraries

local_preload_libraries:这个变量用于指定一个或者多个要在连接开始时预加载的共享库。它包含一个由逗号分隔的库名列表。任何用户都能设置这个选项。能够被这样载入的库只限定于$libdir/plugins下面的so文件。可以使用local_preload_libraries显式指定这个目录。这个特性的目的是允许非特权用户将调试或性能测量库加载到特定的会话中,而不需要显式的load命令。可以使用ALTER ROLE set设置该参数。

session_preload_libraries:这个变量指定一个或者多个要在连接开始时预载入的共享库,只有超级用户可以更改这个设置。它能动态加载所有目录下面的so文件,如果未指定相对目录,自动到dynamic_library_path指定的目录中搜索so。

除了预加载(启动数据库时加载,或者连接数据库时加载),PostgreSQL还有一种方法加载so,即使用LOAD语句。

Load命令将一个共享库文件加载到PostgreSQL服务器的地址空间中,如果文件已经加载,则该命令不执行任何操作。当调用C函数时,包含C函数的共享库文件将自动加载。

对于load命令,普通用户只能动态加载$libdir/plugins下面的so文件。如果未指定相对目录,自动到$libdir/plugins/中搜索so。

超级用户能动态加载所有目录下面的so文件,如果未指定相对目录,自动到dynamic_library_path指定的目录中搜索so。

4、pg_stat_statements视图字段信息?

名字类型参考描述
useridoidpg_authid.oid执行该语句的用户的OID
dbidoidpg_database.oid执行该语句的数据库的OID
querytext有代表性的语句的文本 (多达 track_activity_query_size 字节)
callsbigint执行的次数
total_exec_timedouble precision该语句花费的总时间,以毫秒计
rowsbigint该语句恢复或影响的行的总数
shared_blks_hitbigint该语句命中的共享块缓存的总数
shared_blks_readbigint该语句读取的共享块的总数
shared_blks_dirtiedbigint该语句弄脏的共享块的总数
shared_blks_writtenbigint该语句写入的共享块的总数
local_blks_hitbigint该语句命中的本地块缓存的总数
local_blks_readbigint该语句读取的本地块的总数
local_blks_dirtiedbigint该语句弄脏的本地块的总数
local_blks_writtenbigint该语句写入的本地块的总数
temp_blks_readbigint该语句读取的临时块的总数
temp_blks_writtenbigint该语句写入的临时块的总数
blk_read_timedouble precision该语句读取块花费的总时间,以毫秒计 (如果启用了track_io_timing,否则为0)
blk_write_timedouble precision该语句写入块花费的总时间,以毫秒计 (如果启用了track_io_timing,否则为0)

这个视图和函数pg_stat_statements_reset,在安装了pg_stat_statements扩展后可用。

我们可以看到该试图包含丰富的信息。

查询pg_stat_statements视图,可以得到统计信息

SQL语句中的一些过滤条件在pg_stat_statements中会被替换成变量,减少重复显示的问题。

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!
AiDBA后续精彩内容已被站长无情隐藏,请输入验证码解锁本文!
验证码:
获取验证码: 请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“AiDBA”或者“dbaup6”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复