postgresql|数据库|postgresql-12的内置插件pg_stat_statements的启用和使用

news2024/11/24 3:27:08

前言:

        插件就是原软件的扩展功能。postgresql有非常多的各种各样的插件,当然了,插件不安装对于我们使用数据库并没有什么太多的影响,可能只是不舒服一些而已,但有一些插件我们如果有安装,那么,对于数据库的维护,管理工作可能会更加的方便,快捷,pg_stat_statements这个插件就是这样的一个插件,概括起来,这个插件的功能就是提供postgresql监控的,提供了一种跟踪执行的所有SQL语句的统计信息的方法。

        这里多说一句,不像MySQL,开启binlog日志就可以统计慢查询了,postgresql需要启用这个插件来统计慢查询。(通常,postgresql安装完毕后,默认是不启用这个插件的,因为这个插件会消耗系统的内存,因此。如果数据库负载平时就比较重的情况下,谨慎开启此插件)

        OK,下面将就如何编译安装此插件并开启插件以及最后的使用此插件达到我们的数据库监控的目的做一个简单的介绍。

本文使用的数据库示例的版本是postgresql-12.5,安装方式为源码编译安装,操作系统是centos7

一,

源码安装包和安装目录

源码包指的是postgresql-12.5.tar.bz2

安装目录如下:

PGDATA=/opt/pgsql/data
export PGDATA
PGHOME=/opt/pgsql
export PGHOME
PATH=$PATH:$PGHOME/bin:$PGDATA
export PATH PGDATA

二,

源码包内有如下目录:

[root@centos61 postgresql-12.5]# ll
total 1216
-rw-r--r--.  1 1107 1107    522 Nov 10  2020 aclocal.m4
drwxrwxrwx.  2 1107 1107   4096 Nov 10  2020 config
-rw-r--r--.  1 root root 434063 May 20 20:17 config.log
-rwxr-xr-x.  1 root root  39995 May 20 20:17 config.status
-rwxr-xr-x.  1 1107 1107 575329 Nov 10  2020 configure
-rw-r--r--.  1 1107 1107  84108 Nov 10  2020 configure.in
drwxrwxrwx. 56 1107 1107   4096 Nov 10  2020 contrib
-rw-r--r--.  1 1107 1107   1192 Nov 10  2020 COPYRIGHT
drwxrwxrwx.  3 1107 1107     87 Nov 10  2020 doc
-rw-r--r--.  1 root root   3998 May 20 20:17 GNUmakefile
-rw-r--r--.  1 1107 1107   3998 Nov 10  2020 GNUmakefile.in
-rw-r--r--.  1 1107 1107    284 Nov 10  2020 HISTORY
-rw-r--r--.  1 1107 1107  61479 Nov 10  2020 INSTALL
-rw-r--r--.  1 1107 1107   1665 Nov 10  2020 Makefile
-rw-r--r--.  1 1107 1107   1212 Nov 10  2020 README
drwxrwxrwx. 16 1107 1107   4096 May 20 20:17 src

contrib目录就是插件目录,进入该目录编译安装即可(make和make install):

[root@centos61 pg_stat_statements]# pwd
/root/postgresql-12.5/contrib/pg_stat_statements
[root@centos61 pg_stat_statements]# ll
total 240
drwxrwxrwx. 2 1107 1107    36 Nov 10  2020 expected
-rw-r--r--. 1 1107 1107  1128 Nov 10  2020 Makefile
-rw-r--r--. 1 1107 1107  1246 Nov 10  2020 pg_stat_statements--1.0--1.1.sql
-rw-r--r--. 1 1107 1107  1336 Nov 10  2020 pg_stat_statements--1.1--1.2.sql
-rw-r--r--. 1 1107 1107  1454 Nov 10  2020 pg_stat_statements--1.2--1.3.sql
-rw-r--r--. 1 1107 1107   345 Nov 10  2020 pg_stat_statements--1.3--1.4.sql
-rw-r--r--. 1 1107 1107   305 Nov 10  2020 pg_stat_statements--1.4--1.5.sql
-rw-r--r--. 1 1107 1107  1427 Nov 10  2020 pg_stat_statements--1.4.sql
-rw-r--r--. 1 1107 1107   376 Nov 10  2020 pg_stat_statements--1.5--1.6.sql
-rw-r--r--. 1 1107 1107   806 Nov 10  2020 pg_stat_statements--1.6--1.7.sql
-rw-r--r--. 1 1107 1107 92975 Nov 10  2020 pg_stat_statements.c
-rw-r--r--. 1 1107 1107    48 Nov 10  2020 pg_stat_statements.conf
-rw-r--r--. 1 1107 1107   191 Nov 10  2020 pg_stat_statements.control
-rw-r--r--. 1 root root 53528 May 20 20:28 pg_stat_statements.o
-rwxr-xr-x. 1 root root 43992 May 20 20:28 pg_stat_statements.so
-rw-r--r--. 1 1107 1107   449 Nov 10  2020 pg_stat_statements--unpackaged--1.0.sql
drwxrwxrwx. 2 1107 1107    36 Nov 10  2020 sql
[root@centos61 pg_stat_statements]# make
make -C ../../src/backend generated-headers
make[1]: Entering directory `/root/postgresql-12.5/src/backend'
make -C catalog distprep generated-header-symlinks
make[2]: Entering directory `/root/postgresql-12.5/src/backend/catalog'
make[2]: Nothing to be done for `distprep'.
make[2]: Nothing to be done for `generated-header-symlinks'.
make[2]: Leaving directory `/root/postgresql-12.5/src/backend/catalog'
make -C utils distprep generated-header-symlinks
make[2]: Entering directory `/root/postgresql-12.5/src/backend/utils'
make[2]: Nothing to be done for `distprep'.
make[2]: Nothing to be done for `generated-header-symlinks'.
make[2]: Leaving directory `/root/postgresql-12.5/src/backend/utils'
make[1]: Leaving directory `/root/postgresql-12.5/src/backend'
[root@centos61 pg_stat_statements]# make install
make -C ../../src/backend generated-headers
make[1]: Entering directory `/root/postgresql-12.5/src/backend'
make -C catalog distprep generated-header-symlinks
make[2]: Entering directory `/root/postgresql-12.5/src/backend/catalog'
make[2]: Nothing to be done for `distprep'.
make[2]: Nothing to be done for `generated-header-symlinks'.
make[2]: Leaving directory `/root/postgresql-12.5/src/backend/catalog'
make -C utils distprep generated-header-symlinks
make[2]: Entering directory `/root/postgresql-12.5/src/backend/utils'
make[2]: Nothing to be done for `distprep'.
make[2]: Nothing to be done for `generated-header-symlinks'.
make[2]: Leaving directory `/root/postgresql-12.5/src/backend/utils'
make[1]: Leaving directory `/root/postgresql-12.5/src/backend'
/usr/bin/mkdir -p '/usr/local/pgsql/lib'
/usr/bin/mkdir -p '/usr/local/pgsql/share/extension'
/usr/bin/mkdir -p '/usr/local/pgsql/share/extension'
/usr/bin/install -c -m 755  pg_stat_statements.so '/usr/local/pgsql/lib/pg_stat_statements.so'
/usr/bin/install -c -m 644 ./pg_stat_statements.control '/usr/local/pgsql/share/extension/'
/usr/bin/install -c -m 644 ./pg_stat_statements--1.4.sql ./pg_stat_statements--1.6--1.7.sql ./pg_stat_statements--1.5--1.6.sql ./pg_stat_statements--1.4--1.5.sql ./pg_stat_statements--1.3--1.4.sql ./pg_stat_statements--1.2--1.3.sql ./pg_stat_statements--1.1--1.2.sql ./pg_stat_statements--1.0--1.1.sql ./pg_stat_statements--unpackaged--1.0.sql  '/usr/local/pgsql/share/extension/'

观察发现,编译的内容在/usr/local/pgsql目录下,因此,将以下文件拷贝到/opt/pgsql目录下即可:

[root@centos61 pgsql]# pwd
/usr/local/pgsql
[root@centos61 pgsql]# ls
lib  share
[root@centos61 pgsql]# cp lib/* /opt/pgsql/lib/
[root@centos61 pgsql]# cp share/* /opt/pgsql/share/

二,

编辑postgresql.conf文件,准备开启此插件:

shared_preload_libraries = 'pg_stat_statements' # (change requires restart)
pg_stat_statements.max = 10000
pg_stat_statements.track = all
track_activity_query_size = 4096

以上参数的说明:

  • pg_stat_statements.max(integer)

           pg_stat_statements.max是最大追踪的统计数据数量(即,视图中的最大行数)。如果数据量大于最大值,那么执行最少的语句将会被丢弃(本人测试,如果语句执行次数都为1时,其次是时间久的数据被丢弃),这个值默认是1000,这个变量在服务启动前设置。

  • pg_stat_statements.track(enum)

            pg_stat_statements.track控制统计数据规则,两个值top和all,top用于追踪top-level statement(直接由客户端方发送的,all还会追踪嵌套的statements(例如在函数中调用的statements,本例使用的是all)

  • pg_stat_statements.track_utility(boolen)

           pg_stat_statements.track_utility控制是否跟踪公共程序命令(utility commands),公共程序命令是SELECT/INSERT/UPDATE/DELETE以外的命令,默认值是开启,只有超级用户可以更改此设置。(因为默认是开启,所以这里不做显式设置)

  • pg_stat_statements.save(boolean)

           pg_stat_statements.save指定在服务器关闭时,是否保存统计信息。如果设置off,服务关闭时,统计信息将不会保存。默认值是on。这个值只能够在postgresql.conf中或者命令行设置。(因为默认是开启,所以这里不做显式设置)

  • track_activity_query_size

该模块需要额外的共享内存,内存大小大致为pg_stat_statements.max* track_activity_query_size。要注意的是,一旦模块被加载,即使pg_stat_statements.track设置为none,共享内存都会被消耗。假如 pg_stat_statements.max 值为 10000, track_activity_query_size值为4096, 也就消耗了 40 M内存。(本例为40M共享内存)

三,

命令行激活插件

postgres=# create extension pg_stat_statements;
ERROR:  extension "pg_stat_statements" already exists

(已经激活过了)

那么,激活过后的会出现一个视图和两个函数:

#注,可以看到dx命令后的插件说明,此插件的版本是1.7


postgres=# \dx
                                       List of installed extensions
        Name        | Version |   Schema   |                         Description                          
--------------------+---------+------------+--------------------------------------------------------------
 pg_stat_statements | 1.7     | public     | track execution statistics of all SQL statements executed
 plpgsql            | 1.0     | pg_catalog | PL/pgSQL procedural language

postgres=# \dv
               List of relations
 Schema |        Name        | Type |  Owner   
--------+--------------------+------+----------
 public | pg_stat_statements | view | postgres
(1 row)

 四,

使用此插件

当然了,在使用以下查询的时候,最好是有一些实际的查询SQL语句执行,否则会看不出来效果。

最耗 IO SQL

执行如下命令,查询单次调用最耗 IO SQL TOP 5。

 
  1. select userid::regrole, dbid, query from pg_stat_statements order by (blk_read_time+blk_write_time)/calls desc limit 5;

执行如下命令,查询总最耗 IO SQL TOP 5。

 
  1. select userid::regrole, dbid, query from pg_stat_statements order by (blk_read_time+blk_write_time) desc limit 5;

最耗时 SQL

执行如下命令,查询单次调用最耗时 SQL TOP 5。

 
  1. select userid::regrole, dbid, query from pg_stat_statements order by mean_time desc limit 5;

执行如下命令,查询总最耗时 SQL TOP 5。

 
  1. select userid::regrole, dbid, query from pg_stat_statements order by total_time desc limit 5;

响应时间抖动最严重 SQL

执行如下命令,查询响应时间抖动最严重 SQL。

 
  1. select userid::regrole, dbid, query from pg_stat_statements order by stddev_time desc limit 5;

最耗共享内存 SQL

执行如下命令,查询最耗共享内存 SQL。

 
  1. select userid::regrole, dbid, query from pg_stat_statements order by (shared_blks_hit+shared_blks_dirtied) desc limit 5;

最耗临时空间 SQL

执行如下命令,查询最耗临时空间 SQL。

 
  1. select userid::regrole, dbid, query from pg_stat_statements order by temp_blks_written desc limit 5;

小结:

postgresql的插件种类非常多,但pg_stat_statements这个插件是非常有用的基础插件,此插件安装是比较简单的,但需要注意,postgresql.conf 文件内的关于此插件的任何改动都需要重启数据库才可以生效。

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

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

相关文章

chatgpt赋能Python-pythonfrom

PythonFrom是什么? PythonFrom 是一种基于 Python 语言的开源数据采集与清洗框架,它提供了现代化的数据处理流程,非常适合于爬虫、数据挖掘和机器学习等应用场景。 特点 1. 简单易学 PythonFrom 采用了类似于 SQL 的语法结构,…

Spark Json系列UDF 姿势大全

主要基于jsonpath GitHub - yangyongyongyong/sparkThomasUDF at dev 解决的痛点 每次修改都要写udf函数 重复劳动,所以这里把json中常见的修改和读取都封装起来 场景案例 读取value 数组类型结果 读取value string类型结果 jsonArray 新增 元素 jsonObject 新增/更新 kv对 …

Pycharm安装教程,附详细图解

简介 PyCharm是一款Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如, 调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制等等。此外,该IDE提供了一些高级功能&a…

Android RecyclerView实现侧滑删除

距上次写博客有半年多了,回忆起来都觉得不可思议,中间也想憋俩大招,总是被耽误,这俩月忙完之后,终于空下来了,恰好新项目我和UI俩人商量一下,用MD来实现app。中间有个需求是RecyclerView中侧滑显…

node + alipay-sdk 沙箱环境简单测试电脑网站支付

正式上线需要上传营业执照,不知道怎么去申请一个。。。。。 使用沙箱测试,首先前往支付宝开放平台控制台可看到左下方的沙箱测试链接: 然后设置接口加签方式,选择系统默认密钥: 系统默认密钥 -> 公钥模式 -> 查看…

将小米SoundMove 无缝接入 ChatGPT

将小米SoundMove 无缝接入 ChatGPT 本教程内容参考 Github 地址(可选)部署查看小米 SoundMove 信息的环境(可选)查看小米 SoundMove 的信息以容器方式部署程序到小米万兆路由器实际效果有待改善点 本教程内容 1 是记录了将小米 SoundMove 接入 ChatGPT 的操作步骤。 2 是将小米…

Chrome Performance 页面性能分析

Chrome Performance 页面性能分析 背景介绍 性能优化是前端开发一个非常重要的组成部分,如何更好地进行网络传输,如何优化浏览器渲染过程,来定位项目中存在的问题。Chrome DevTools给我们提供了2种常用方式 Audits和Performance&#xff0c…

Flink学习——基本转换算子

目录 一、filter算子 二、map算子 三、聚合算子 1.keyBy——按键分区 2.简单聚合 (1)min:在输入流上,对指定的字段求最小值 (2)minBy:返回包含字段最小值的整条数据 (3)max:在输入流上,对指定的字段求最大值 …

【Navicat 连接MySQL时出现错误1251:客户端不支持服务器请求的身份验证协议;请考虑升级MySQL客户端】

使用Navicat连接时报1251错误,如下图: 原因 MySQL8.0后的版本加密规则是“caching_sha2_password”,而 MySQL8.0之前的版本加密规则是“mysql_native_password” 解决办法 更改加密规则,将MySQL用户登录密码加密规则还原成“…

Python:常见的面试题和答案

1. 什么是Python? 答:Python是一种高级编程语言,被广泛应用于Web开发、数据分析、人工智能等领域。 2. Python的优点是什么? Python的优点包括: 简单易学:Python语法简单,易于上手&#xff…

chatgpt赋能Python-pythonfly

PythonFly介绍 PythonFly是一个功能丰富的Python Web框架,它提供了快速开发Web应用的工具和方法。PythonFly可以轻易扩展、分布式部署和最小化代码重复。PythonFly利用Python的清晰和简单的语法,让Web应用程序更容易阅读和维护。 PythonFly的特点 快速…

CSS图像填充文字(镂空文字效果 / 文字镂空效果)

先展示一下最终效果&#xff1a; 开始做 1. 搭建基本代码结构 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>CSS图像填充文字&#xff08;镂空文字效果&#xff09;</title></head><body><div cl…

20230520查找中国移动的APP在RK3566下调用UVC摄像头出错

20230520查找中国移动的APP在RK3566下调用UVC摄像头出错 2023/5/20 23:34 SDK&#xff1a;Android12RK3566平台 android12 UVC camera 没插摄像头&#xff0c;但是/dev/video0-13标号被占用&#xff0c;是啥原因导致的 板子上也没有摄像头 【板子没有接CSI/MIPI接口的I2C通道…

操作系统(持续更新)

操作系统的定义 操作系统&#xff08;operating system&#xff0c;OS&#xff09;是配置在计算机硬件上的第一层软件&#xff0c;是对硬 件系统的首次扩充&#xff0c;其主要作用是管理硬件设备&#xff0c;提高它们的利用率和系统吞吐量&#xff0c;并为 用户和应用程序提供一…

Spring Cloud 和3种架构分析 以及微服务的详细分析和示意图

目录 SpringCloud & SpringCloud Alibaba架构介绍 Spring Cloud 基本介绍 官方文档 提出问题, 引出微服务 单机架构 - 示意图 动静分离架构&#xff1a;静态缓存 文件存储 解析 分布式架构&#xff1a;业务拆分负载均衡 解析 微服务架构&#xff1a;使用Spring Clo…

UE C++ Windows平台调用讯飞语音合成接口

UE C Windows平台调用讯飞语音合成接口 环境设置调用讯飞语音接口回放语音数据输出EXE 环境设置 下载讯飞语音合成的Windows平台的C版本SDK&#xff0c;包含lib库文件和dll动态链接库在UE工程下新建一个ThirdParty/msc目录&#xff0c;将lib库文件和dll动态链接库放入其中[PRO…

mybatis是如何集成到spring的之托管mapper接口

前言 mybatis集成到spring可以参考spring mvc集成mybatis进行数据库访问 &#xff0c;其中mybatis集成到spring最重要的两个配置分别是SqlSessionFactoryBean和MapperScannerConfigurer&#xff0c;如下所示&#xff1a; <!--mybatis sqlSeesionFactory配置--><bean…

实验五 串行通讯建模以及教程

目录 教程&#xff1a; 第一步下载matlib 第二步找到Simulink 相关文件 链接&#xff1a;https://pan.baidu.com/s/1Im-TUVfV4d8dok2ebXbmjw?pwd2222 提取码&#xff1a;2222 【实验目的】 1、了解MATLAB软件环境和Simulink建模过程&#xff0c;掌握Simulink图形化编程方…

给 compose draw 绘制的非规则图形添加点击监听

前言 导言 在之前的两篇文章中&#xff0c;我们从实例出发&#xff0c;以实践的方式简单介绍了 compose 自定义绘制&#xff08;如何自己绘制想要的控件&#xff09;、为自定义绘制增加动画&#xff08;让控件动起来&#xff09;。 在这篇文章中&#xff0c;我们依然从实例出…

Linux 权限-+完整思维导图+实图例子+深入细节+通俗易懂建议收藏

绪论 当时间的主人&#xff0c;命运的主宰&#xff0c;灵魂的舵手。上一回已将基础权限全部学习完了&#xff0c;本章开始我们将进入到权限的学习。 话不多说安全带系好&#xff0c;发车啦&#xff08;建议电脑观看&#xff09;。 附&#xff1a;红色&#xff0c;部分为重点部分…