PostgreSQL插件-pg_stat_statements-安装和使用

文章目录

    • 插件介绍
    • 插件安装
      • 1.修改配置文件`postgresql.conf`
      • 2.插件相关参数
        • 参数默认值
        • 参数说明
        • 特别注意pg_stat_statements.max参数
          • 设置太小日志会有警告
    • 插件使用
      • 1.创建插件
      • 2.使用插件
      • 3.重置数据
      • 4.删除插件
    • 可能会出现的问题
      • 1.没有编译安装插件
      • 2.没有配置shared_preload_libraries
      • 3.跟踪数据太多,导致内存占用过大


插件介绍

pg_stat_statements模块提供了一种跟踪服务器执行的所有 SQL 语句的规划和执行统计信息的方法。

插件相关介绍可参考:PostgreSQL插件-pg_stat_statements-跟踪SQL查询计划和执行的统计数据。

版本说明:这里用的是pg16版本的pg_stat_statements 1.10 (不用pg版本有对应的插件版本,不同版本的插件内容可能会有所差异,例如可能会新增某字段)。

插件安装

1.修改配置文件postgresql.conf

因为pg_stat_statements这个插件的数据是存放在内存里面的,而且需要在初始化的时候就申请一块内存区域,因此需要将插件配置在shared_preload_libraries参数里面(如果之前已经有配置了插件,多个插件之间用逗号分隔)

shared_preload_libraries = 'pg_stat_statements'

2.插件相关参数

参数默认值

如果不配置参数,默认是这些值:

#SELECT * from pg_settings WHERE name ~ 'pg_stat_statements';pg_stat_statements.max = 5000
pg_stat_statements.save = on
pg_stat_statements.track = top
pg_stat_statements.track_planning =	off
pg_stat_statements.track_utility = on
参数说明
  • pg_stat_statements.max :pg_stat_statements视图记录行数,如果实际行数超过该值,会将最少使用的记录删掉,源码详见 entry_dealloc 函数 。
  • pg_stat_statements.save:指定是否在服务器关闭时保存语句统计信息。如果是off,则不会在关机时保存统计信息,也不会在服务器启动时重新加载统计信息。缺省值为 on
  • pg_stat_statements.track:控制模块对哪些语句进行计数。top指定跟踪顶级语句(由客户端直接发出的语句)、all跟踪嵌套语句(如在函数中调用的语句)或none禁用语句统计信息收集。缺省值为top
  • pg_stat_statements.track_planning:控制模块是否跟踪计划操作和工期。启用此参数可能会产生明显的性能损失,尤其是当具有相同查询结构的语句由许多并发连接执行时,这些并发连接争用更新少量pg_stat_statements条目。缺省值为 off
  • pg_stat_statements.track_utility:控制模块是否跟踪实用程序命令。实用程序命令是 除 SELECTINSERTUPDATEDELETE以外的所有命令。缺省值为on
特别注意pg_stat_statements.max参数
  1. 改参数范围:100 … 1073741823
  2. 不能太大,上面提到了数据是存在内存里面的,太大的话会占用很多内存,以至于可能会影响正常业务。
设置太小日志会有警告

这里设置的是10,会有警告WARNING日志,而且是不生效的,即还是默认值。

2025-02-10 13:55:52.287 CST,,,21388,,67a994e8.538c,71,,2025-02-10 13:55:52 CST,,0,DEBUG:  00000: find_in_dynamic_libpath: trying "/usr/local/pgsql/lib/pg_stat_statements"
2025-02-10 13:55:52.287 CST,,,21388,,67a994e8.538c,72,,2025-02-10 13:55:52 CST,,0,LOCATION:  find_in_dynamic_libpath, dfmgr.c:583
2025-02-10 13:55:52.287 CST,,,21388,,67a994e8.538c,73,,2025-02-10 13:55:52 CST,,0,DEBUG:  00000: find_in_dynamic_libpath: trying "/usr/local/pgsql/lib/pg_stat_statements.so"
2025-02-10 13:55:52.287 CST,,,21388,,67a994e8.538c,74,,2025-02-10 13:55:52 CST,,0,LOCATION:  find_in_dynamic_libpath, dfmgr.c:583
2025-02-10 13:55:52.288 CST,,,21388,,67a994e8.538c,75,,2025-02-10 13:55:52 CST,,0,WARNING:  22023: 10 is outside the valid range for parameter "pg_stat_statements.max" (100 .. 1073741823)
2025-02-10 13:55:52.288 CST,,,21388,,67a994e8.538c,76,,2025-02-10 13:55:52 CST,,0,LOCATION:  parse_and_validate_value, guc.c:3137
2025-02-10 13:55:52.288 CST,,,21388,,67a994e8.538c,77,,2025-02-10 13:55:52 CST,,0,DEBUG:  00000: loaded library "pg_stat_statements"
2025-02-10 13:55:52.288 CST,,,21388,,67a994e8.538c,78,,2025-02-10 13:55:52 CST,,0,LOCATION:  load_libraries, miscinit.c:1841

插件使用

1.创建插件

CREATE extension pg_stat_statements;

2.使用插件

关键视图:pg_stat_statements。

相关使用可参考:PostgreSQL插件-pg_stat_statements-查找最耗费资源的SQL(Top SQL)

SELECT * from pg_stat_statements;
-- 相关字段
-- userid	dbid	toplevel	queryid	query	plans	total_plan_time	min_plan_time	max_plan_time	mean_plan_time	stddev_plan_time	calls	total_exec_time	min_exec_time	max_exec_time	mean_exec_time	stddev_exec_time	rows	shared_blks_hit	shared_blks_read	shared_blks_dirtied	shared_blks_written	local_blks_hit	local_blks_read	local_blks_dirtied	local_blks_written	temp_blks_read	temp_blks_written	blk_read_time	blk_write_time	temp_blk_read_time	temp_blk_write_time	wal_records	wal_fpi	wal_bytes	jit_functions	jit_generation_time	jit_inlining_count	jit_inlining_time	jit_optimization_count	jit_optimization_time	jit_emission_count	jit_emission_time

3.重置数据

SELECT pg_stat_statements_reset();-- 最近重置数据事件可见stats_reset列
SELECT * from pg_stat_statements_info;
-- dealloc	stats_reset

4.删除插件

DROP extension pg_stat_statements;

可能会出现的问题

1.没有编译安装插件

会提示,没有pg_stat_statements.so

处理方法:编译安装pg_stat_statements。

cd contrib/pg_stat_statements
make && make install

2.没有配置shared_preload_libraries

需要注意:这个报错,不是出现在CREATE extension,而是在使用时。

处理方法:配置shared_preload_libraries。

SELECT * from pg_stat_statements;
-- > ERROR:  pg_stat_statements must be loaded via shared_preload_libraries

3.跟踪数据太多,导致内存占用过大

需要注意:这个报错,不是出现在CREATE extension,而是出现在使用时。

处理方法:调小参数 。

pg_stat_statements.max = 5000

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/15877.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

亚博microros小车-原生ubuntu支持系列:26手势控制小车基础运动

背景知识 手指检测:亚博microros小车-原生ubuntu支持系列:4-手部检测-CSDN博客 程序功能说明 功能开启后,摄像头捕获图像,识别手势来控制小车移动。 手势 “5”小车前进拳头小车后退手势 “1”小车向左手势 “2”小车向右 运…

OpenFeign远程调用返回的是List<T>类型的数据

在使用 OpenFeign 进行远程调用时,如果接口返回的是 List 类型的数据,可以通过以下方式处理: 直接定义返回类型为List Feign 默认支持 JSON 序列化/反序列化,如果服务端返回的是 List的JSON格式数据,可以直接在 Feig…

【hive】记一次hiveserver内存溢出排查,线程池未正确关闭导致

一、使用 MemoryAnalyzer软件打开hprof文件 很大有30G,win内存24GB,不用担心可以打开,ma软件能够生成索引文件,逐块分析内存,如下图。 大约需要4小时。 overview中开不到具体信息。 二、使用Leak Suspects功能继续…

【Docker】

一、概述 1、Docker为什么出现? 开发和运维两套环境,而环境配置十分麻烦。如在Windows上开发,要发布到Linux上运行。 Docker给以上问题提出解决方案:Java --- Jar(环境)---打包项目带上环境(镜像&#x…

游戏手柄Type-c方案,支持一边充电一边传输数据

乐得瑞推出LDR6023SS,专门针对USB-C接口手机手柄方案,支持手机快充,支持任天堂游戏机,PS4等设备~同时支持手机充电跟数据传输 1、概述 LDR6023SS SSOP16 是乐得瑞科技针对 USB Type-C 标准中的 Bridge 设备而开发的双 USB-C DRP …

【报错解决】Sql server 2022连接数据库时显示证书链是由不受信任的颁发机构颁发的

SSMS 20在连接Sql server 2022数据库时有如下报错: A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - 证书链是由不受信任的颁发机构颁发的。 原因是尝试使…

「vue3-element-admin」告别 vite-plugin-svg-icons!用 @unocss/preset-icons 加载本地 SVG 图标

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 🌺 仓库主页: GitCode︱ Gitee ︱ Github 💖 欢迎点赞 👍 收藏 ⭐评论 …

NineData云原生智能数据管理平台新功能发布|2025年1月版

本月发布 14 项更新,其中重点发布 6 项、功能优化 7 项、安全性更新 1 项。 重点发布 数据库 Devops - 数据导出功能增强 支持 AWS ElastiCache 数据源:现已支持通过 SQL 查询语句或直接通过库表导出 AWS ElastiCache 数据,方便用户快速提取…

游戏引擎学习第96天

讨论了优化和速度问题,以便简化调试过程 节目以一个有趣的类比开始,提到就像某些高端餐厅那样,菜单上充满了听起来陌生或不太清楚的描述,需要依靠服务员进一步解释。虽然这听起来有些奇怪,但实际上,它反映…

Docker 1. 基础使用

1. Docker Docker 是一个 基于容器的虚拟化技术,它能够将应用及其依赖打包成 轻量级、可移植 的容器,并在不同的环境中运行。 2. Docker指令 (1)查看已有镜像 docker images (2)删除镜像 docker rmi …

基于机器学习时序库pmdarima实现时序预测

目录 一、Pmdarima实现单变量序列预测1.1 核心功能与特性1.2 技术优势对比1.3 python案例1.3.1 时间序列交叉验证1.3.1.1 滚动交叉验证1.3.1.2 滑窗交叉验证 时间序列相关参考文章: 时间序列预测算法—ARIMA 基于VARMAX模型的多变量时序数据预测 基于机器学习时序库…

【论文笔记】Are Self-Attentions Effective for Time Series Forecasting? (NeurIPS 2024)

官方代码https://github.com/dongbeank/CATS Abstract 时间序列预测在多领域极为关键,Transformer 虽推进了该领域发展,但有效性尚存争议,有研究表明简单线性模型有时表现更优。本文聚焦于自注意力机制在时间序列预测中的作用,提…

Matlab机械手碰撞检测应用

本文包含三个部分: Matlab碰撞检测的实现URDF文件的制作机械手STL文件添加夹爪 一.Matlab碰撞检测的实现 首先上代码 %% 检测在结构环境中机器人是否与物体之间发生碰撞情况,如何避免? % https://www.mathworks.com/help/robotics/ug/che…

从零开始:使用Jenkins实现高效自动化部署

在这篇文章中我们将深入探讨如何通过Jenkins构建高效的自动化部署流水线,帮助团队实现从代码提交到生产环境部署的全流程自动化。无论你是Jenkins新手还是有一定经验的开发者,这篇文章都会为你提供实用的技巧和最佳实践,助你在项目部署中走得…

鸿蒙harmony 手势密码

1.效果图 2.设置手势页面代码 /*** 手势密码设置页面*/ Entry Component struct SettingGesturePage {/*** PatternLock组件控制器*/private patternLockController: PatternLockController new PatternLockController()/*** 用来保存提示文本信息*/State message: string …

【Unity3D】UGUI的anchoredPosition锚点坐标

本文直接以实战去理解锚点坐标,围绕着将一个UI移动到另一个UI位置的需求进行说明。 (anchoredPosition)UI锚点坐标,它是UI物体的中心点坐标,以UI物体锚点为中心的坐标系得来,UI锚点坐标受锚点(Anchors Min…

Mp4视频播放机无法播放视频-批量修改视频分辨率(帧宽、帧高)

背景 家人有一台夏新多功能 视频播放器(夏新多功能 视频播放器),用来播放广场舞。下载了一些广场舞视频, 只有部分视频可以播放,其他视频均无法播放,判断应该不是帧速率和数据速率的限制, 分析可能是播放器不支持帧高度大于720的视频。由于视频文件较多,需要借助视频编…

自动化xpath定位元素(附几款浏览器xpath插件)

在 Web 自动化测试、数据采集、前端调试中,XPath 仍然是不可或缺的技能。虽然 CSS 选择器越来越强大,但面对复杂 DOM 结构时,XPath 仍然更具灵活性。因此,掌握 XPath,不仅能提高自动化测试的稳定性,还能在爬…

ASP.NET Core 如何使用 C# 向端点发出 POST 请求

使用 C#,将 JSON POST 到 REST API 端点;如何从 REST API 接收 JSON 数据。 本文需要 ASP .NET Core,并兼容 .NET Core 3.1、.NET 6和.NET 8。 要从端点获取数据,请参阅本文。 使用 . 将 JSON 数据发布到端点非常容易HttpClien…

【AI学习】关于 DeepSeek-R1的几个流程图

遇见关于DeepSeek-R1的几个流程图,清晰易懂形象直观,记录于此。 流程图一 来自文章《Understanding Reasoning LLMs》, 文章链接:https://magazine.sebastianraschka.com/p/understanding-reasoning-llms?continueFlagaf07b1a0…