postgresql|数据库|插件学习(二)---postgresql-12的外置插件pg_profile的启用和使用

news2024/11/25 13:25:16

前言:

postgresql数据库有非常多的插件,那么,pg_profile算是监控类的插件,该插件会通过内置的pg_stat_statements插件和dblink插件这两个插件监控查询postgresql的状态,并可以通过打快照的方式得到awr报告。

###注:AWR全称Automatic Workload Repository,自动负载信息库,该概念是oracle数据库的,但postgresql也有类似的插件,比如,今天要讲的这个pg_profile

本文将就如何安装这个pg_profile插件,以及如何使用此插件得到一个可用的性能监测awr报告。

一,

pg_profile的安装

PEV

Releases · zubkov-andrei/pg_profile · GitHub

以上两个网址都可以下载pg_profile,操作文档见此网址:pg_profile/pg_profile.md at 4.0 · zubkov-andrei/pg_profile · GitHub

那么,下载的版本是pg_profile--0.3.6.tar.gz,该版本不是很高,因为用的是pg12版本。

总共就四个文件,文件如下:

 

 pg_profile.control文件内容如下:

说的是有两个插件依赖,dblink(这个是源码包自带的),plpgsql(这个是默认的)

# Profiler extension for PostgreSQL
comment = 'PostgreSQL load profile repository and report builder'
default_version = '0.3.6'
relocatable = false
requires = 'dblink,plpgsql'
superuser = false

那么,三个SQL脚本文件放置到$PGHOME目录下的share/extension/ 目录下,pg_profile.control放置到$PGHOME目录下的lib目录下就算安装完毕了。

dblink插件需要源码包安装,安装方式见上一个博客:postgresql|数据库|插件学习(一)---postgresql-12的内置插件pg_stat_statements的启用和使用_晚风_END的博客-CSDN博客

同时也需要安装pg_stat_statements插件,上面的文章都写了。

二,

pg_profile的配置

postgresql.conf 文件内增加如下配置,并重启数据库使之生效

shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.max = 10000
pg_stat_statements.track = 'top'
pg_stat_statements.save = on
track_activities = on
track_counts = on
track_io_timing = on
track_wal_io_timing = on      # Since Postgres 14
track_functions = all/pl

 通过命令行登入数据库,执行以下命令:

postgres=# CREATE EXTENSION dblink;
postgres=# CREATE EXTENSION pg_stat_statements;
postgres=# CREATE SCHEMA profile;
postgres=# CREATE EXTENSION pg_profile SCHEMA profile;

这些命令执行完毕后,将会可以看到有四个插件:
 

postgres=# \dx
                                       List of installed extensions
        Name        | Version |   Schema   |                         Description                          
--------------------+---------+------------+--------------------------------------------------------------
 dblink             | 1.2     | public     | connect to other PostgreSQL databases from within a database
 pg_profile         | 0.3.6   | profile    | PostgreSQL load profile repository and report builder
 pg_stat_statements | 1.7     | public     | track execution statistics of all SQL statements executed
 plpgsql            | 1.0     | pg_catalog | PL/pgSQL procedural language
(4 rows)

还可以看到大量的函数和视图:

 

 扩展参数(一般不需要设置):

您可以在postgresql.conf中定义扩展参数。默认值:

  • pg_profile.topn = 20 - 顶级对象(语句、关系等)的数量。),在每个排序后的报表中报告。此外,该参数影响样本的大小——您希望在报告中出现的对象越多,我们需要在样本中保留的对象就越多。
  • pg_profile.max_sample_age = 7 - 样品的保留时间(天)。样本、老化pg_profile.max_sample_age天数等将在下次调用take_sample()时自动删除。
  • pg_profile.track_sample_timings = off - 当此参数打开时,pg_profile将跟踪详细的采样时间。.
  • pg_profile.max_query_length = 20000 - 报告的查询长度限制。报告中的所有查询都将被截断到此长度。此设置不影响查询文本收集-在一个样本期间收集完整的查询文本,因此可以获得

三,

pg_profile的使用

查看数据库信息:

postgres=# select * from profile.show_servers();
 server_name |          connstr           | enabled | description 
-------------+----------------------------+---------+-------------
 local       | dbname=postgres port=35432 | t       | 
(1 row)

创建一个远程的服务器(远程的数据库ip是192.168.123.60,开放端口是5432,该服务器也安装了pg_profile):

[root@EULER1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:6d:97:07 brd ff:ff:ff:ff:ff:ff
    inet 192.168.123.60/24 brd 192.168.123.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::1b25:fbf0:3c0d:2037/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:d2:bc:7d brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fed2:bc7d/64 scope link 
       valid_lft forever preferred_lft forever
11: vetha169aaf@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether b6:b7:7e:4a:62:d0 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::b4b7:7eff:fe4a:62d0/64 scope link 
       valid_lft forever preferred_lft forever
[root@EULER1 ~]# netstat -antup |grep postgre
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      29063/postgres      

在本地服务器上执行,不在60上哦: 

postgres=# SELECT profile.create_server('euler','host=192.168.123.60 dbname=postgres port=5432');
 create_server 
---------------
             4
(1 row)

postgres=# select * from profile.show_servers();
 server_name |                    connstr                    | enabled | description 
-------------+-----------------------------------------------+---------+-------------
 local       | dbname=postgres port=35432                    | t       | 
 euler       | host=192.168.123.60 dbname=postgres port=5432 | t       | 
(2 rows)

 

打快照

两个命令等价的

两个服务器都打快照

####下面的两个命令等价的

SELECT profile.snapshot() ;
select * from profile.take_sample();


postgres=# SELECT profile.snapshot() ;
        snapshot        
------------------------
 (local,OK,00:00:00.31)
 (euler,OK,00:00:00.7)
(2 rows)

单独打远程快照:

postgres=# select * from profile.take_sample('euler');
 take_sample 
-------------
           0
(1 row)

 

输出如下:

postgres=# select * from profile.take_sample();
 server | result |   elapsed   
--------+--------+-------------
 local  | OK     | 00:00:00.32
(1 row)
postgres=# SELECT profile.snapshot() ;
        snapshot        
------------------------
 (local,OK,00:00:00.36)
(1 row)

查看快照:

postgres=# select profile.show_samples();
           show_samples            
-----------------------------------
 (1,"2023-05-21 17:43:40+08",t,,,)
 (2,"2023-05-21 17:45:03+08",t,,,)
 (3,"2023-05-21 17:50:50+08",t,,,)
 (4,"2023-05-21 17:51:14+08",t,,,)
(4 rows)

查看远程快照:

postgres=# SELECT profile.snapshot() ;
        snapshot        
------------------------
 (local,OK,00:00:00.4)
 (euler,OK,00:00:00.77)
(2 rows)

postgres=# select profile.show_samples();
           show_samples            
-----------------------------------
 (1,"2023-05-21 17:43:40+08",t,,,)
 (2,"2023-05-21 17:45:03+08",t,,,)
 (3,"2023-05-21 17:50:50+08",t,,,)
 (4,"2023-05-21 17:51:14+08",t,,,)
 (5,"2023-05-21 18:02:45+08",t,,,)
 (6,"2023-05-21 19:40:54+08",t,,,)
 (7,"2023-05-21 19:42:31+08",t,,,)
 (8,"2023-05-21 19:42:54+08",t,,,)
 (9,"2023-05-21 19:43:22+08",t,,,)
(9 rows)

postgres=# select profile.show_samples('euler');
           show_samples            
-----------------------------------
 (1,"2023-05-21 19:38:41+08",t,,,)
 (2,"2023-05-21 19:40:54+08",t,,,)
 (3,"2023-05-21 19:42:28+08",t,,,)
 (4,"2023-05-21 19:42:31+08",t,,,)
 (5,"2023-05-21 19:42:43+08",t,,,)
 (6,"2023-05-21 19:42:54+08",t,,,)
 (7,"2023-05-21 19:43:11+08",t,,,)
 (8,"2023-05-21 19:44:01+08",t,,,)
(8 rows)

 

生成普通报告(第二个是远程的):

psql -Upostgres -p 35432  -qtc "select profile.get_report(1,3)"  --output awr_report_postgres_1_3.html

psql -Upostgres -p 35432  -qtc "select profile.get_report('euler',1,3)"  --output awr_report_postgres_1_3.html

生成差异化报告:

需要输入四个快照ID,前两个为一组,后两个为一组

psql -Upostgres -p 35432  -qtc "select profile.get_diffreport(1,2,3,4)"  --output awr_report_postgres_1_4.html

生成远程数据库服务器的差异化报告 :

psql -Upostgres -p 35432  -qtc "select profile.get_diffreport('euler',1,2,3,4)"  --output awr_report_postgres_1_4.html

本地的普通报告: 

 远程服务器euler的差异化报告:

 

 

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

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

相关文章

攻防世界 wife_wife

查看提示&#xff1a;不需要爆破 进入到靶场中&#xff0c;发现需要注册用户 到达注册页面&#xff0c;is admin需要打勾&#xff0c;并输入同样 burpsuite抓包 原来payload&#xff1a;{"username":"1","password":"1","isAdmin…

MySQL数据库---笔记2

MySQL数据库---笔记2 一、函数1.1、字符串函数1.2、数值函数1.3、日期函数1.4、流程函数 二、约束2.1、概述2.2、演示2.3、外键约束 一、函数 函数 是指一段可以直接被另一段程序调用的程序或代码。 1.1、字符串函数 函数功能CONCAT(S1,S2,…Sn)字符串拼接&#xff0c;将S1&…

分布式医疗云平台【基础功能搭建、数据表定义、ERP业务表、系统表、其它配置表 】(三)-全面详解(学习总结---从入门到深化)

基础功能搭建 创建数据库 数据表定义 ERP业务表 系统表 其它配置表 基础功能搭建 创建数据库 执行脚本&#xff0c;创建基础数据 数据表定义 业务表 his_care_order: 药用处方表&#xff0c;涉及的业务模块&#xff1a;处方收费、处方发药、新开检查 his_care_history…

jetson填坑-单独安装cuda,cudnn,tensorrt任意适用版本

前言 jetson无法单独安装cuda&#xff0c;cudnn&#xff0c;tensorrt的解决方法&#xff0c;比下载SDK manager刷机安装简单好多倍 这个方法是直接下载deb包安装&#xff0c;deb包安装网站 https://repo.download.nvidia.com/jetson/ 单独安装cuda 1 sudo apt-get install …

ArcMap:第一届全国大学生GIS应用技能大赛(滁州学院)详解

目录 01 上午题 1.1 题目 1.2 数据 1.2.1 如何添加比赛数据&#xff1f; 1.2.2 比赛数据展示 1.3 思路 1.3.1 坐标系问题 1.4 实操 1.4.1 建立空间数据库和比赛数据导入 1.4.2 坐标系问题解决 1.4.3 要素的订正 1.4.4 数据入库和符号化管理&#xff1b; 1.4.5 其…

C++ thread编程(Linux系统为例)—thread成员函数

c 11 之后有了标准的线程库&#xff1a;std::thread。 参考thread库的使用 构造函数 thread的构造函数有下面四个重载 默认构造函数 thread() noexcept初始化构造函数 template <class Fn, class... Args> explicit thread (Fn&& fn, Args&&... arg…

HP-800G4-DM 电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。&#xff08;下载请直接百度黑果魏叔&#xff09; 硬件型号驱动情况 主板HP 800G4 DM 35W 处理器intel i5-9600T已驱动 内存Samsung DDR4 2666 32G*2已驱动 硬盘WD SN750 500G已驱动 显卡intel UHD 630已驱动 声卡瑞昱…

SpringBoot项目中Controller层、Service层、Dao层、entity层、Configuration层、Utils层作用

SpringBoot项目中各层的作用 1、Controller层2、Service层3、Dao层&#xff08;Mapper层&#xff09;4、entity层&#xff08;model层&#xff09;5、Configuration层6、Utils层各层作用架构图 1、Controller层 Controller层为控制层&#xff0c;一般使用 RestController 或 C…

【Linux入门】Linux指令(2)

【Linux入门】Linux指令(2) 目录 【Linux入门】Linux指令(2)时间相关的指令cal指令find指令&#xff08;重要&#xff0c;选项很多&#xff09;-namegrep指令zip/unzip指令tar指令&#xff08;重要&#xff09;bc指令uname -r指令重要的几个热键[Tab],[ctrl]-c, [ctrl]-d关机&a…

车载软件架构——闲聊几句AUTOSAR OS(一)

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 人们会在生活中不断攻击你。他们的主要武器是向你灌输对自己的怀疑:你的价值、你的能力、你的潜力。他们往往会将此伪装成客观意见,但无一例外的是,他们想…

transformers两个入门示例

根据《attention is all you need》论文而形成的transformers框架在chat-gpt应用中大放异彩&#xff0c;目前transformers框架已经成了炙手可热的框架。它不仅在nlp方面很作用很大&#xff0c;根据官网的介绍&#xff0c;它还可以做很多事情&#xff0c;比如图片分类&#xff0…

【SpringCloud】二、服务注册与发现 Eureka与Nacos

文章目录 一、Eureka1、服务提供者与消费者2、Eureka原理分析3、搭建Eureka4、服务注册5、模拟多服务实例启动6、服务的发现 二、Ribbon1、负载均衡的原理2、源码分析3、负载均衡策略 三、Nacos三、网关gateway1、网关的作用2、搭建网关服务 一、Eureka 1、服务提供者与消费者…

多源传感器GNSS INS 视觉 LiDAR 组合导航与SLAM开源项目总结

多源传感器GNSS INS 视觉 LiDAR 组合导航与SLAM开源项目总结 本文基于 吴桐wutong 微信公众号文章完善而来。 开源代码总览 名称传感器类型组合类型滤波方法备注RTKLIBG-KFGAMP、rtklibexplorerhttps://www.rtklib.com/GPSTKG-KFhttps://github.com/SGL-UT/GPSTkBNCG-KFppp_…

[MRCTF2020]Ez_bypass1

一打开就是一坨看起来像乱码的东西 查看源码才看的舒服点&#xff0c;原来是一串PHP代码 这么长一段&#xff0c;翻译起来还有点麻烦 首先第一个if语句 检测GET传参gg和id是否存在 如果不存在就输出’Please input first‘&#xff08;请先输入&#xff09;并利用die函数退出脚…

java boot项目基础配置之banner与日志配置演示 并教会你如何使用文档查看配置

上文 我们简单讲了一下 springboot 项目的配置 都是写在resources下的application.properties中 springboot 项目中 配置都写在这一个文件 可以说非常方便 不像之前 写个项目配置这里一个哪里一个 看到是非常费力 我们启动项目 这里有个图案 其实 这叫 banner 我们就用配置来…

从零开始:Java中如何定义和访问静态字段和方法

&#x1f9d1;‍&#x1f4bb;CSDN主页&#xff1a;夏志121的主页 &#x1f4cb;专栏地址&#xff1a;Java基础进阶核心技术专栏 目录 &#x1f377; 一、静态字段 &#x1f378; 二、静态常量 &#x1f379; 三、静态方法 &#x1f37a; 四、工厂方法 &#x1f964; 五、…

使用Vue完成一个户籍管理系统

js <template> <div> <h2>学籍管理系统</h2> <div> 姓名&#xff1a; <input v-model"user.name" /> </div> <div> 年龄&#xff1a; <input v-model"user.age" /> </div> <div> 性别…

python + windQuant:挑选公司

给定一些k线选股指标&#xff0c;如何挑选符合条件的公司&#xff0c;以python windquant为例&#xff1f; 【申明&#xff1a;本例只用来作为python学习交流之用&#xff0c;切勿以此作为投资的选股条件】 0、用以下条件挑选公司&#xff1a; 仅作示例用&#xff1a; 【1】…

黑马QtDay1学习笔记

文章目录 黑马QtDay1学习笔记1 Qt简介2 Qt项目创建2.1 项目名称 不能有空格和中文2.2 项目路径不能有中文路径2.3 创建窗口三大基类2.4 Main函数中2.5 .pro文件 3 QPushButton按钮4 Qt中的对象树5 Qt中的坐标系6 Qt中信号和槽基本使用7 自定义信号和槽7.1 自定义信号 写在 sign…

【C++】——模板(泛型编程+函数模板+类模板)

文章目录 1. 前言2. 泛型编程3. 函数模板3.1 函数模板的原理3.2 函数模板的实例化3.3 模板参数的匹配原则 4. 类模板4.1 类模板的实例化 5. 结尾 1. 前言 之前我们学习了函数重载&#xff0c;让我们在写相似函数的时候非常方便&#xff0c;但函数重载还有很多不足的地方&#…