暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

学会使用PostgreSQL AWR收集工具-pg_profile

热衷于分享各种干货知识,大家有想看或者想学的可以评论区留言,秉承着“开源知识来源于互联网,回归于互联网”的理念,分享一些日常工作中能用到或者频率比较高的内容,希望大家能够喜欢,如有错误也请大家多提宝贵地意见。

一、pg_profile概述

pg_profile是一个功能强大的PostgreSQL性能分析工具,通过收集和分析数据库资源消耗,帮助识别和优化性能瓶颈。它依赖于PostgreSQL的标准统计视图,并结合pg_stat_statements和pg_stat_kcache插件,通过捕获任意服务器进程执行的命令、收集表和索引访问统计信息、监控块读写次数以及追踪用户定义函数的使用情况来进行分析。

pg_profile的工作方式类似于Oracle的AWR(Automatic Workload Repository),在指定时间间隔内生成快照,并通过HTML报告展示这些快照之间的统计数据差异,从而实现深入的性能分析和优化。

二、安装pg_profile及其组件

(一)配置其他相关插件

pg_profile扩展依赖于扩展plpgsql和dblink,如果需要报告中的语句统计信息,则服务器连接字符串中提到的数据库必须配置pg_stat_statements扩展。因此要使用pg_profile扩展,必须同时安装dblink,pg_stat_statements扩展。

1、配置数据库相关Statistics Collector参数

vi /pgdb/data/postgresql.conf
#修改track相关参数
track_activities = on
track_counts = on
track_io_timing = on
track_wal_io_timing = on      # Since Postgres 14
track_functions = all

2、配置pg_stat_statements相关参数

vi /pgdb/data/postgresql.conf
shared_preload_libraries = 'pg_stat_statements'  
pg_stat_statements.max = 10000 
pg_stat_statements.track = 'top' 
pg_stat_statements.save = off

[postgres@postgresql ~]$ pg_ctl stop #重启数据库,使参数生效
[postgres@postgresql ~]$ pg_ctl start

(二)下载pg_profile和pg_stat_kcache

pg_profile下载地址:https://github.com/zubkov-andrei/pg_profile/releases

这里我们下载4.6版本,下载后上传至家目录下

pg_profile下载地址:https://github.com/powa-team/pg_stat_kcache

这里我们下载ZIP,下载后上传至家目录下

(三)安装pg_profile和pg_stat_kcache

[root@postgresql postgres]# chown -R postgres.postgres pg_profile--4.6.tar.gz
[postgres@postgresql ~]$ tar -xvf pg_profile--4.6.tar.gz --directory /pgdb/pgsql/share/extension/

[root@postgresql postgres]# chown -R postgres.postgres pg_stat_kcache-master.zip
[root@postgresql postgres]# yum install unzip -y
[postgres@postgresql ~]$ unzip pg_stat_kcache-master.zip -d /pgdb/pgsql/share/extension/
[postgres@postgresql ~]$ cd /pgdb/pgsql/share/extension/pg_stat_kcache-master
[postgres@postgresql pg_stat_kcache-master]$ make && make install

配置pg_stat_kcache

[postgres@postgresql pg_stat_kcache-master]$ vi /pgdb/data/postgresql.conf
修改为shared_preload_libraries = 'pg_stat_statements,pg_stat_kcache'
[postgres@postgresql pg_stat_kcache-master]$ pg_ctl stop #postgresql.conf参数生效需要重启
[postgres@postgresql pg_stat_kcache-master]$ pg_ctl start

(四)安装组件的扩展

1、创建dblink、pg_stat_statements、pg_profile和pg_stat_kcache扩展

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

2、查看扩展

postgres=# \dx
postgres=# \dx+ pg_profile #查看相关功能

三、收集信息

1、创建快照

postgres=# SELECT profile.snapshot() ;

2、查询快照

postgres=# select profile.show_samples();

3、添加测试数据

postgres=# \c test test
You are now connected to database "test" as user "test".
test=# create table t1(id int);
test=# insert into t1 values (generate_series(1,1000));

4、再次创建快照并查询

postgres=# SELECT profile.snapshot();
postgres=# select profile.show_samples();

5、查询快照信息

postgres=# select * from profile.show_samples();

6、导出收集的信息

[postgres@postgresql pg_stat_kcache-master]$ psql  -Aqtc "SELECT profile.get_report(1,2)" -o /pgdb/awr_report_2.html
 psql  -Aqtc "select profile.get_report(tstzrange('2024-09-23 11:51:35+03','2024-09-23 16:52:18+03'))" -o  /pgdb/awr_report_3.html #导出两个时间段之间的
 psql  -Aqtc "select profile.get_report(tstzrange(now() - interval '1 day',now()))" -o /pgdb/last24h_report.html #定期生成构建过去 24 小时的报告

四、总结 

生成的报告包含了丰富的性能指标,如执行时间最长的前几条SQL语句、最活跃的用户、最繁忙的索引等,这些信息有助于我们快速定位性能问题并进行优化。


文中的概念来源于互联网,如有侵权,请联系我删除。

欢迎关注公众号:小周的数据库进阶之路,一起交流数据库、中间件和云计算等技术。如果觉得读完本文有收获,可以转发给其他朋友,大家一起学习进步!感兴趣的朋友可以加我微信,拉您进群与业界的大佬们一起交流学习。



文章转载自小周的数据库进阶之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论