#1.pg_profile 安装
软件下载:https://github.com/zubkov-andrei/pg_profile
unzip pg_profile-master.zip
cd pg_profile-master
EXPORT PG_CONFIG = /u01/postgresql/pg12/bin/pg_config
make USE_PGXS=y install
cp pg_profile* /u01/postgresql/pg12/share/extension/
cd /u01/postgresql/pg12/share/extension/
chown postgres.postgres pg_*
2.查看参数
考虑设置以下统计收集器参数:
track_activities = on ;
track_counts = on ;
track_io_timing = on ;
track_functions = all ;
pg_stat_statements.max - 此参数的低设置可能会导致在拍摄快照之前清除某些语句统计信息。如果您的pg_stat_statements.max似乎过小,报告会警告您。
pg_stat_statements.track = 'top' -所有值都将影响报表的报表相关部分的%Total字段的准确性。
show pg_stat_statements.max ;
show pg_stat_statements.track ;
更改
alter system set pg_stat_statements.track = top ;
3. 创建扩展
CREATE EXTENSION dblink;
CREATE EXTENSION pg_stat_statements;
CREATE EXTENSION pg_profile;
如果你想在其他架构中安装pg_profile,只需创建它,并在该架构中安装扩展:
CREATE EXTENSION dblink;
CREATE EXTENSION pg_stat_statements;
CREATE SCHEMA profile;
CREATE EXTENSION pg_profile SCHEMA profile;
注意:在专用模式中安装是推荐的方式 - 扩展将创建自己的表、视图、序列和函数。将它们分开是个好主意。如果您不想在使用模块时指定模式限定符,请考虑更改search_path设置。
4.查看组件
postgres=# \dx
5.使用profile
创建快照
postgres=# SELECT profile.snapshot() ;
snapshot
------------------------
(local,OK,00:00:00.69)
(1 row)
#生产环境中可以通过crontab 定时生成快照
*/30 * * * * psql -c 'SELECT profile.snapshot()' > /var/log 2>&1
或
*/30 * * * * psql -c 'SELECT snapshot()' > /var/log 2>&1
查询快照
postgres=# select profile.show_samples();
show_samples
-----------------------------------
(1,"2021-12-07 13:18:54+08",t,,,)
(2,"2021-12-07 13:20:53+08",t,,,)
(3,"2021-12-07 14:30:31+08",t,,,)
(3 rows)
6.创建HTML输出
我们可以使用以下命令来创建 html 输出。您可以指定一个路径来创建 html 输出。如果您不指定路径,它将在您所在的目录中创建。
生成普通报告
psql -qtc "select profile.get_report(1,3)" --output awr_report_postgres_1_3.html
生成对比报告
对比报告可以很方例的看到不同快照时间之间的差异
注意里面的参数是:1与2之间的快照 和 3与4 之间的快照进行对比
psql -h 127.0.0.1 -p 5432 -qtc "select profile.get_diffreport(1,2,3,4)" --output awr_report_postgres_8_9.html
例:
7.报告阅读
7.1.报告基础信息及目录
7.2.数据库基础信息
7.3.TOP SQL信息
7.4.数据TOP表信息
7.5.数据库TOP函数信息
7.6.数据库Vacuum 信息
7.7.数据库参数
8.注意事项
1当前执行快照的函数是take_sample(),当执行该函数的时候,会采集相关信息存入我们创建的schema的相关表中。当指表不免时可以自定义采集,存储到相应的表中。
然后用get_report函数, 生成html报告的时,在这里需要把我们新增的一些指标给显示出来。
2.在有物理备库时,不能在备库上执行(因为备库是只读的,无法写数据)
9.参考文档
http://postgres.cn/docs/12/monitoring-stats.html
http://postgres.cn/docs/12/pgstatstatements.html
https://github.com/zubkov-andrei/pg_profile