PostgreSQL插件-pg_stat_statements-安装和使用

news2025/2/12 1:53:41

文章目录

    • 插件介绍
    • 插件安装
      • 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.coloradmin.cn/o/2296596.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从Word里面用VBA调用NVIDIA的免费DeepSeekR1

看上去能用而已。 选中的文字作为输入,运行对应的宏即可;会先MSGBOX提示一下,然后相关内容追加到word文档中。 需要自己注册生成好用的apikey Option ExplicitSub DeepSeek()Dim selectedText As StringDim apiKey As StringDim response A…

C语言学习笔记:子函数的调用实现各个位的累加和

在C语言程序学习之初,我们都会学习如何打印 hello world,在学习时我们知道了int main()是主函数,程序从main函数开始执行,这是流程控制的一部分内容。在主函数中我们想要实现一些功能,比如求各个…

grafana面板配置opentsdb

新增面板: 这里add-panel: 如果不是想新增面板而是想新增一行条目,则点击convert to row: 在新增的面板这里可以看到选择数据源 Aggregator:聚合条件,区分下第一行和第二行的aggregator,第一个是对指标值的聚合&…

2025年02月10日Github流行趋势

项目名称:dify 项目地址url:https://github.com/langgenius/dify项目语言:TypeScript历史star数:64707今日star数:376项目维护者:takatost, crazywoola, laipz8200, iamjoel, JohnJyong项目简介&#xff1a…

Ansible简单介绍及用法

一、简介 Ansible是一个简单的自动化运维管理工具,基于Python语言实现,由Paramiko和PyYAML两个关键模块构建,可用于自动化部署应用、配置、编排task(持续交付、无宕机更新等)。主版本大概每2个月发布一次。 Ansible与Saltstack最大的区别是…

渗透利器工具:Burp Suite 联动 XRAY 图形化工具.(主动扫描+被动扫描)

Burp Suite 联动 XRAY 图形化工具.(主动扫描被动扫描) Burp Suite 和 Xray 联合使用,能够将 Burp 的强大流量拦截与修改功能,与 Xray 的高效漏洞检测能力相结合,实现更全面、高效的网络安全测试,同时提升漏…

HTML-day1(学习自用)

目录 一、HTML介绍 二、常用的标签 1、各级标题(h1-h6) 2、段落标签(p) 3、文本容器(span) 4、图片标签(img) 5、超链接标签(a) 6、表格(t…

Vue07

一、Vuex 概述 目标:明确Vuex是什么,应用场景以及优势 1.是什么 Vuex 是一个 Vue 的 状态管理工具,状态就是数据。 大白话:Vuex 是一个插件,可以管理 Vue 通用的数据 (多组件共享的数据)。例如:购物车数…

Godot开发框架探索#2

前言 距离上次发文又又又隔了很长一段时间。主要原因还是因为思绪在徘徊,最近纠结的点有以下几个:1.渴求一个稳定的Godot开发框架;2.要不要使用更轻量的开发框架,或者直接写引擎; 3.对自己想做的游戏品类拿不定主意。…

deepseek实现私有知识库

前言 之前写了如何本地部署deepseek,已经可以私有化问答了,本地搭建deepseek实操(ollama搭建,docker管理,open-webui使用) 其中我觉得最厉害的还是这个模型蒸馏,使我们可以用很低的代价使用大模…

【探索未来科技】2025年国际学术会议前瞻

【探索未来科技】2025年国际学术会议前瞻 【探索未来科技】2025年国际学术会议前瞻 文章目录 【探索未来科技】2025年国际学术会议前瞻前言1. 第四届电子信息工程、大数据与计算机技术国际学术会议( EIBDCT 2025)代码示例:机器学习中的线性回…

大模型基本原理(四)——如何武装ChatGPT

传统的LLM存在几个短板:编造事实、计算不准确、数据过时等,为了应对这几个问题,可以借助一些外部工具或数据把AI武装起来。 实现这一思路的框架包括RAG、PAL、ReAct。 1、RAG(检索增强生成) LLM生成的内容会受到训练…

开发完的小程序如何分包

好几次了,终于想起来写个笔记记一下 我最开始并不会给小程序分包,然后我就各种搜,发现讲的基本上都是开发之前的小程序分包,可是我都开发完要发布了,提示我说主包太大需要分包,所以我就不会了。。。 好了…

java配置api,vue网页调用api从oracle数据库读取数据

一、主入口文件 1:java后端端口号 2:数据库类型 和 数据库所在服务器ip地址 3:服务器用户名和密码 二、映射数据库表中的数据 resources/mapper/.xml文件 1:column后变量名是数据库中存储的变量名 property的值是column值的…

iOS三方登录 - Facebook登录

引言 在出海APP的开发中,集成主流社交平台的三方登录已成为必不可少的一环。Facebook 作为全球最大的社交网络平台之一,其提供的 Facebook 登录功能能够大大简化用户注册和登录流程,提高用户体验,减少流失率。对于开发者而言&…

机器学习 - 理解偏差-方差分解

为了避免过拟合,我们经常会在模型的拟合能力和复杂度之间进行权衡。拟合能力强的模型一般复杂度会比较高,容易导致过拟合。相反,如果限制模型的复杂度,降低其拟合能力,又可能会导致欠拟合。因此,如何在模型…

深度学习01 神经网络

目录 神经网络 ​感知器 感知器的定义 感知器的数学表达 感知器的局限性 多层感知器(MLP, Multi-Layer Perceptron) 多层感知器的定义 多层感知器的结构 多层感知器的优势 偏置 偏置的作用 偏置的数学表达 神经网络的构造 ​神经网络的基本…

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

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

PromptSource官方文档翻译

目录 核心概念解析 提示模板(Prompt Template) P3数据集 安装指南 基础安装(仅使用提示) 开发环境安装(需创建提示) API使用详解 基本用法 子数据集处理 批量操作 提示创建流程 Web界面操作 手…

2025年软件测试五大趋势:AI、API安全、云测试等前沿实践

随着软件开发的不断进步,测试方法也在演变。企业需要紧跟新兴趋势,以提升软件质量、提高测试效率,并确保安全性,在竞争激烈的技术环境中保持领先地位。本文将深入探讨2025年最值得关注的五大软件测试趋势。 Parasoft下载https://…