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

PostgreSQL内核慢SQL优化分享-慢SQL收集

pg_stat_statements 和 pg_profile 是 SQL 优化的两大核心工具。

  • pg_stat_statements:主要用于全局捕获 SQL 执行的统计信息,快速定位高频、高耗时、高平均耗时的 SQL,为累计信息。
  • pg_profile:类似于 Oracle AWR,可以在指定时间段内生成快照,提供简洁的可视化界面,通过按照时间段生成详细的报告,精准定位特定时间的性能瓶颈。

一、pg_stat_statements

pg_stat_statements 存储 SQL 首次被统计到当前的累计值。

可以通过pg_stat_statements_reset()函数重置,通过pg_stat_statements_info视图查看重置的时间。

pg_stat_statements.max参数,限制 pg_stat_statements 能存储“不同 sql”的最大条数,超过此参数,将淘汰 “最久没执行” 的低频 SQL。

核心字段及说明

  • dbid:数据库 id
  • queryid:sql 唯一 hash id
  • query:sql 文本记录
  • calls:总执行次数
  • total_exec_time:总执行时间(单位:毫秒)
  • mean_exec_time:平均执行时间(单位:毫秒)
  • max_exec_time:最大执行时间(单位:毫秒)
  • min_exec_time:最小执行时间(单位:毫秒)
  • stddev_exec_time:执行时间标准差
  • rows:总返回或影响的行数,用于判断 SQL 的执行效率与数据处理量
  • shared_blks_hit:共享缓存命中次数,缓存命中越高越好

如果没有定期重置 pg_stat_statements 由于其累计统计的 “时间稀释” 效应,平均执行时间可能不准确,可结合stddev_exec_time分析 sql 稳定性情况。

例如:

  • stddev_exec_time ≈ 0→ 执行时间极度稳定,每次执行耗时都接近平均值
  • stddev_exec_time很小(< mean_exec_time 的 50%)→ 执行时间稳定:偶尔波动,但整体接近平均值
  • stddev_exec_time很大(> mean_exec_time 的 2 倍)→ 执行时间极不稳定

常用查询 SQL

下面介绍几个常用的查询 SQL,由于 pg_stat_statements 是累计值,可通过不同的排序条件过滤常用的统计场景。

1. Top SQL by execution time(按总执行时间排序)
SELECTcalls,-- 总执行时间(毫秒,保留2位小数)ROUND(total_exec_time::NUMERIC,2)AStotal_exec_time_ms,-- 总执行时间(秒)ROUND(total_exec_time::NUMERIC/1000,2)AStotal_exec_time_s,-- 平均执行时间(毫秒)ROUND(mean_exec_time::NUMERIC,2)ASmean_exec_time_ms,-- 最大执行时间(毫秒)ROUND(max_exec_time::NUMERIC,
http://www.jsqmd.com/news/609433/

相关文章:

  • 游戏行业的测试:趣味性与稳定性的权衡
  • OpenClaw 定时任务-Cron 配置介绍
  • 知识付费小程序开发详细步骤 - 码云数智
  • hello-agent-第二章:从感知到行动,构建你的第一个智能体循环
  • 工业缺陷检测AI方案:YOLO定位+SAM分割+云端部署
  • 最新 AI 论文盘点(2026-04-07):6 篇新作看 latent reasoning 可解释性、小模型搜索代理、持久化 agent runtime,以及机器人系统如何开始认真补工程短板
  • 研一到研二:LLM实习准备的时间线规划
  • TMC9660:无需编程的智能伺服驱动解决方案,硬件集成FOC与降压转换器
  • Synology群晖Audio Station终极歌词插件:3分钟免费安装QQ音乐歌词方案
  • 2026 输氢管道品牌实力排名 君诚凭全链优势领跑氢能储运赛道 - 外贸老黄
  • JAVA教练培训课程培训教练排课系统源码的设计理念
  • Phimp.me性能优化实践:如何提升图片处理速度的10个技巧
  • 从单机到多机:手把手教你用Docker搭建跨服务器日志收集(LPG实战)
  • 突破Win11游戏联机壁垒:IPXWrapper实现经典游戏网络重生
  • 2026年想提升技术?收藏这份AI大模型小白进阶学习攻略,轻松入门高薪赛道!
  • 告别CP2102!合宙ESP32C3简约版USB CDC直连Arduino IDE全攻略,省成本还省事
  • OpenClaw技能组合:Kimi-VL-A3B-Thinking与其他AI模型的管道协作
  • 3分钟解密KMS_VL_ALL_AIO:让Windows与Office授权永续的智能方案
  • 实战指南:基于STM32F411CEU6的LED灯控制与按键交互实现
  • ARM SCP入门-简介和代码下载编译
  • 别再踩坑了!SQL Server数据类型那点事儿,看懂这篇少背三个锅蹬
  • 进口水漆全屋定制,亲测这家源头厂
  • 拓朋N59智能对讲机,为督察民警全天候执勤保驾护航
  • 为什么你的.NET 9边缘服务总在断连?揭秘NetworkManager冲突、Systemd socket activation适配与心跳保活黄金参数
  • 【论文学习】CVPR 2026 和 ICLR 2026论文
  • 手把手教你解决i.MX6ULL双网卡频繁掉线:从时钟波形异常到引脚驱动能力调整
  • 第一篇博客:从新开始学习C语言
  • windows下如何生成ssl证书
  • ALAD-K1551T(P)精准赋能,打造高效医疗体检一体机
  • 从Labelme到Label-studio:图像与文本标注工具的全方位对比与应用指南