PostgreSQL/pgsql监控--慢查询插件pg_stat_statements

​本文转载自公众号【新运维新数据】

文章来源:PostgreSQL监控(一)---pg_stat_statements - 墨天轮
 

PS:为方便新人阅读,本人对部分内容做了修改,如【扩展】改为【扩展插件】,因为在日常习惯上,【扩展】是动词,但此文中其实它是名词。

PS:更多内容请阅读“postgresql公司”的英文手册以及“PgSQL中文社区”翻译的中文手册对应章节:

postgresql公司-PgSQL14-英文手册pg_stat_statements对应章节https://www.postgresql.org/docs/14/pgstatstatements.htmlpostgresql公司-PgSQL15-英文手册pg_stat_statements对应章节https://www.postgresql.org/docs/15/pgstatstatements.html

postgresql中文社区-PgSQL14-中文手册pg_stat_statements对应章节icon-default.png?t=M85Bhttp://www.postgres.cn/docs/14/pgstatstatements.html

文章开始:

#1 pg_stat_statements

在日常运维工作中,我们会经常需要定位一些SQL引起的性能问题,包括分析执行SQL的统计信息、定位抓取慢SQL语句等等。

本期就为大家介绍一款监控SQL语句的扩展插件pg_stat_statements。

pg_stat_statements模块提供了一个方法用来追踪服务器所执行的所有SQL语句执行统计信息,也可以记录数据库的资源开销,得益于该模块的作用,使得PostgreSQL在一些性能分析的问题上也获得了横向的扩展,直观且快捷地展现出SQL语句对于数据库的性能影响。

#2 在Linux中安装配置pg_stat_statements扩展插件

下面就介绍一下如何安装并使用这个扩展插件,如果在安装数据库服务的时候已经编译好了,那就可以在数据库内直接创建扩展即可。

当然也可以对其进行单独的编译安装,找到源码目录,进入到pg_stat_statements目录下。

$ cd src/contrib/pg_stat_statements/
$ make && make install

完成了扩展的编译安装,我们还需要修改配置文件中的相应参数' shared_preload_libraries ',这个变量指定一个或者多个要在服务器启动时预载入的共享库,使用pg_stat_statements扩展插件需要将其加入共享库中(同时使用多个扩展插件时,使用英文逗号分隔)

$ vi postgresql.conf
shared_preload_libraries='pg_stat_statements'


可以根据自己的需要,配置以下几个常用的参数

pg_stat_statements.max = 10000      #保留多少条统计信息,默认值5000
pg_stat_statements.track = all        #记录所有sql
pg_stat_statements.track_utility = off   #是否跟踪非DML语句
pg_stat_statements.save = on    #重启之后是否保留统计信息

配置完成后需要重启数据库服务,然后登录数据库,创建扩展

postgres=# create extension pg_stat_statements;

至此,扩展插件安装完成。

可以在数据库的public模式中看到,我们获得了一个新的视图【pg_stat_statements】,SQL执行的统计信息都可以从该视图获取信息,文末附录了该视图各字段的解释

#3 常用统计SQL

以下列出了几个常用的统计SQL供参考

--最耗时的TOP 5 SQL
select dbid, query from pg_stat_statements 
 order by total_time desc limit 5;
--最消耗IO的TOP 5 SQL
select dbid, query from pg_stat_statements 
 order by  (blk_read_time+blk_write_time) desc limit 5;
--响应时间抖动最严重的TOP 5 SQL
select dbid, query from pg_stat_statements 
 order by  stddev_time desc limit 5;


快速、直观的SQL统计信息,能够帮助运维工程师在日常维护工作中更迅速地定位一些因为执行SQL引起的数据库性能问题,pg_stat_statements插件无疑提供了一个极为高效的方法和途径!

#4附录

pg_stat_statements视图中各字段释义(注:新版本的PgSQL提供的字段会有调整,详见上面链接里相应版本的中文手册或英文手册)

### PostgreSQL 内置系统函数 `pg_` 的官方文档和使用示例 #### 函数概述 PostgreSQL 提供了一系列以 `pg_` 开头的内置系统函数,这些函数主要用于管理和查询数据库内部状态、配置以及其他元数据。这类函数通常用于高级管理任务或诊断目的。 #### 查询路径相关函数:`pg_relation_filepath` 此函数返回指定关系(表、索引等)的数据文件存储位置。这对于了解物理存储布局非常有用[^2]: ```sql SELECT pg_relation_filepath('my_table'); ``` 该命令会显示名为 `my_table` 表对应的磁盘上实际存储路径。 #### 插件支持函数:`pg_stat_statements` 虽然严格来说这不是一个标准的 `pg_` 系统函数,但是作为一个重要的性能分析工具插件的一部分,它同样值得关注。通过加载 `pg_stat_statements` 扩展模块可以获取 SQL 语句执行统计信息,有助于优化查询性能[^4]: 为了激活并利用这一特性,在超级用户权限下运行如下指令: ```sql CREATE EXTENSION IF NOT EXISTS pg_stat_statements; -- 启用后可以通过下面的查询来查看统计数据 SELECT * FROM pg_stat_statements LIMIT 10; ``` 上述例子展示了如何限制输出到最近十条记录以便快速浏览。 #### 自定义过程语言中的应用:PL/pgSQL 中调用 `pg_` 函数 当涉及到更复杂的逻辑处理时,可以在 PL/pgSQL 这样的过程中直接嵌入对各种 `pg_` 类型函数的调用,实现动态行为控制或者基于特定条件的操作自动化[^3]。 例如,编写一段简单的匿名代码块来打印当前服务器版本号: ```plpgsql DO $$ BEGIN RAISE NOTICE 'Current server version is %', pg_version(); END $$ LANGUAGE plpgsql; ``` 请注意这里假设存在这样一个虚构的 `pg_version()` 方法;实际上应当查阅最新版的手册确认具体可用接口名称。 #### 获取更多帮助 对于完整的 `pg_` 函数列表及其详细的参数说明,请参阅 [PostgreSQL 官方文档](https://www.postgresql.org/docs/current/functions-admin.html),其中包含了所有管理员级别操作所需的知识点[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值