当前位置: 首页 > article >正文

PostgreSQL:pg_stat_statements

目录

一、安装 pg_stat_statements

1.1 确保已安装

1.2 加载共享库

1.3 重启服务

1.4 创建扩展

二、使用 pg_stat_statements

2.1 pg_stat_statements 视图列信息

2.2 常用查询资源消耗多的SQL

2.3 清除累积的统计数据

2.4 禁用 pg_stat_statements 收集数据

三、注意事项


        pg_stat_statements 是 PostgreSQL 的一个扩展,它用于收集关于执行的 SQL 语句的统计信息。这可以帮助你分析查询性能,识别慢查询,并优化数据库。

一、安装 pg_stat_statements

1.1 确保已安装

        在大多数情况下,`pg_stat_statements` 扩展是包含在标准的 PostgreSQL 分发中的,可通过以下语句查询插件是否可用。

SELECT * FROM pg_available_extensions;

1.2 加载共享库

        修改`postgresql.conf` 文件,确保 `shared_preload_libraries` 参数中包含了 `'pg_stat_statements'`。

shared_preload_libraries = 'pg_stat_statements'

# 配置 pg_stat_statements

# pg_stat_statements.max:定义了跟踪的 SQL 语句的最大数量,默认值通常是 5000。
# pg_stat_statements.track:控制哪些语句被跟踪(选项包括 all, top, none)。
# pg_stat_statements.save:是否保存统计信息到磁盘(默认为 on),以便在服务器重启后仍然保留。

1.3 重启服务

        更改此设置后,必须重启 PostgreSQL 服务以使更改生效。

1.4 创建扩展

        通过 psql 或者其他可以执行 SQL 命令的客户端工具使用 SQL 命令来创建扩展。

# 创建扩展

CREATE EXTENSION IF NOT EXISTS pg_stat_statements;

#查看当前数据库实例中已安装和启用的扩展
SELECT * FROM pg_extension;

二、使用 pg_stat_statements

        配置完成并启用了 `pg_stat_statements`,就可以使用它来获取统计信息:主要的视图是 `pg_stat_statements`,它提供了每个记录的查询文本、调用次数、总时间等信息。

2.1 pg_stat_statements 视图列信息

\d pg_stat_statements;

字段类型描述
useridoid执行该语句的用户 OID
dbidoid数据库中执行语句的 OID
toplevelboolean如果查询作为顶级语句执行(如果 pg_stat_statements.track 设置为 top ,则始终为真)
queryidbigint哈希码用于识别相同的规范化查询。
querytext文本示例语句
plansbigint语句被计划次数(如果启用了 pg_stat_statements.track_planning,否则为0)
total_plan_timedouble precision 总规划该语句所花费的时间,以毫秒为单位(如果启用了 pg_stat_statements.track_planning,否则为0)
min_plan_timedouble precision 最小用于规划语句的时间,以毫秒为单位(如果启用了 pg_stat_statements.track_planning,否则为0)
max_plan_timedouble precision 最大用于语句规划的时间,以毫秒为单位(如果启用了 pg_stat_statements.track_planning,否则为0)
mean_plan_timedouble precision 平均花费在语句规划上的时间,以毫秒为单位(如果启用了 pg_stat_statements.track_planning,否则为0)
stddev_plan_timedouble precision 语句规划时间的人口标准差,以毫秒为单位(如果启用了 pg_stat_statements.track_planning,否则为0)
callsbigint执行语句的次数
total_exec_timedouble precision 执行该语句所花费的总时间,以毫秒为单位
min_exec_timedouble precision 执行语句的最短时间,以毫秒为单位
max_exec_timedouble precision 执行语句所花费的最大时间,以毫秒为单位
mean_exec_timedouble precision 平均执行语句耗时,以毫秒为单位
stddev_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)
temp_blk_read_timedouble precision 该语句读取临时文件块所花费的总时间,以毫秒为单位(如果启用 track_io_timing,否则为0)
temp_blk_write_timedouble precision 该语句写入临时文件块所花费的总时间,以毫秒为单位(如果启用 track_io_timing,否则为0
wal_recordsbigint该语句生成的 WAL 记录总数
wal_fpibigint该语句生成的 WAL 完整页面图像总数
wal_bytesnumeric该语句生成的 WAL 总字节数
jit_functionsbigint该语句总共 JIT 编译的函数数
jit_generation_timedouble precision 该语句生成 JIT 代码所花费的总时间,以毫秒为单位
jit_inlining_countbigint函数内联次数
jit_inlining_timedouble precision 该语句在内联函数上花费的总时间,以毫秒为单位
jit_optimization_countbigint语句被优化的次数
jit_optimization_timedouble precision 该语句在优化上花费的总时间,以毫秒为单位
jit_emission_countbigint代码被发出次数
jit_emission_timedouble precision 该语句在生成代码上花费的总时间,以毫秒为单位

2.2 常用查询资源消耗多的SQL

  • 调用次数较多的SQL

select userid,dbid,query,calls,rows,total_exec_time,mean_exec_time from pg_stat_statements order by calls desc limit 10;

  • 总执行时间较长的SQL

select userid,dbid,query,calls,rows,total_exec_time,mean_exec_time from pg_stat_statements order by total_exec_time desc limit 10;

  • 平均执行时间较长的SQL

select userid,dbid,query,calls,rows,total_exec_time,mean_exec_time from pg_stat_statements order by mean_exec_time desc limit 10;

2.3 清除累积的统计数据

SELECT pg_stat_statements_reset();

2.4 禁用 pg_stat_statements 收集数据

        如果只是想停止收集新的统计数据,但不想完全移除这个扩展,可以将配置参数 pg_stat_statements.track 设置为 none。这将禁用所有的统计信息收集。

ALTER SYSTEM SET pg_stat_statements.track = 'none';

        如果不再需要这个扩展,并且希望彻底从数据库中删除它,可以通过运行下面的 SQL 命令来完成:

DROP EXTENSION IF EXISTS pg_stat_statements;

        移除该扩展不会影响已经存储在磁盘上的统计数据;它只会阻止未来的数据收集。如果想清除所有现有的统计数据,可以在移除扩展之前清空相关的视图或表。

三、注意事项

  • pg_stat_statements 可能会影响数据库性能,因为它需要跟踪额外的信息。在生产环境中使用时,应该谨慎并监控其影响。
  • 统计信息是累积的,除非被重置,否则它们会一直增加。
  • 为了更精确的性能分析,可能需要结合使用其他工具和日志,例如 EXPLAIN ANALYZE。

http://www.kler.cn/a/444860.html

相关文章:

  • *【每日一题 基础题】 [蓝桥杯 2023 省 B] 飞机降落
  • [python SQLAlchemy数据库操作入门]-02.交易数据实体类建立
  • springboot中Controller内文件上传到本地以及阿里云
  • 使用计算机创建一个虚拟世界
  • QGIS修行记-如何使用QGIS进行换行标注
  • java list 和数组互相转换的一些方法
  • 90度Floating B to B 高速连接器信号完整性仿真
  • Hutool工具包的常用工具类的使用介绍
  • PostgreSQL技术内幕21:SysLogger日志收集器的工作原理
  • 鸿蒙 NEXT 开发之后台任务开发服务框架学习笔记
  • 一款特别有趣的 Minecraft(我的世界)游戏服务器项目:Pumpkin
  • 鸿蒙项目云捐助第九讲鸿蒙App应用的捐助详情页功能实现
  • ffmpeg-SDL显示BMP
  • 鸿蒙高级特性 - 动态UI加载
  • Unity复刻胡闹厨房复盘 模块一 新输入系统订阅链与重绑定
  • 在Windows本地用网页查看编辑服务器上的 jupyter notebook
  • 【漫话机器学习系列】014.贝叶斯法则(Bayes Theorem)
  • Fabric8 Kubernetes Client 7.0.0内存泄漏深度分析与案例实践
  • Immer编写更简单的逻辑
  • SpringBoot3+Vue3开发在线考试系统
  • 说说你对 css3 display:flex 弹性盒模型 的理解
  • 阿里云 ECS 实例上升级 Docker 并使用多阶段构建
  • STM8单片机学习笔记·GPIO的片上外设寄存器
  • 轻松拿捏Spring
  • Arcgis for javascript 开发学习经验
  • 相机主要调试参数