国产数据库AntDB插件pg_profile安装说明
1 说明
本文主要介绍基于Antdb数据库的pg_proile插件的安装和使用方法。
使用pg_profile插件可以生成类似于Oracle中的AWR报告,通过分析AWR报告可以深入了解数据库资源的消耗情况。pg_profile基于PostgreSQL的标准统计视图,并结合pg_stat_statements和pg_stat_kcache这两个插件来实现其功能。具体的,pg_profile插件在指定时间间隔内生成快照,可以针对任意两个快照的间隔时间进行性能分析,生成html格式报告汇总展示。主要内容包括捕获库中被任意服务器进程执行的命令、收集关于表和索引访问的统计信息、监控对块的读写次数以及对用户定义函数的使用情况进行跟踪。
2 参数修改
2.1 statistics collector参数说明
Statistics Collector涉及的参数如下:
参数名 | 参数值 | 说明 | 参数级别 |
---|---|---|---|
track_activities | on | 跟踪数据库中的活动 | superuser |
track_counts | on | 跟踪数据库中的计数器 | superuser |
track_io_timing | on | 跟踪 I/O 操作的时间 | superuser |
track_functions | all | 跟踪所有函数的调用 | superuser |
track_wal_io_timing | on | Postgres 14版本新增参数,跟踪 WAL I/O 操作的时间 | superuser |
2.2 pg_stat_statements参数说明
pg_stat_statements扩展涉及的参数如下:
参数名 | 参数值 | 说明 | 参数级别 |
---|---|---|---|
shared_preload_libraries | pg_stat_statements | 预加载pg_stat_statements模块 | postmaster |
pg_stat_statements.max | 5000 | 默认值,最多存储5000条语句统计信息 | postmaster |
pg_stat_statements.track | 'top’ | 默认值,只跟踪最消耗资源的 SQL 语句 | postmaster |
pg_stat_statements.save | on | 默认值,保存语句统计信息,在会话结束后也能访问 | sighup |
2.3 参数修改
2.3.1. 集中式
在任意节点使用antdb数据库操作系统用户依次执行以下命令:
patronictl -c /etc/patroni_antdbcluster.yml edit-config -p "shared_preload_libraries = 'pg_stat_statements'";
patronictl -c /etc/patroni_antdbcluster.yml edit-config -p "track_activities = on";
patronictl -c /etc/patroni_antdbcluster.yml edit-config -p "track_counts = on";
patronictl -c /etc/patroni_antdbcluster.yml edit-config -p "track_io_timing = on";
patronictl -c /etc/patroni_antdbcluster.yml edit-config -p "track_functions = 'all'";
pg_stat_statements参数需要重启集群生效:
patronictl -c /etc/patroni_antdbcluster.yml restart antdbcluster
重启后查看参数是否生效:
select name,setting
from pg_settings
where name in('track_activities','track_counts','track_io_timing','track_wal_io_timing','track_functions','shared_preload_libraries','pg_stat_statements.max','pg_stat_statements.track','pg_stat_statements.save')
order by 1;
2.3.2. 分布式
登录mgr节点操作。登录方式:
adbmgr
或
adb -p 16432 postgres
cn节点参数
-- 修改参数
set coordinator all (track_activities=on,track_counts=on,track_io_timing=on,track_functions='all',shared_preload_libraries='pg_stat_statements');
-- 重启全部cn节点
stop coordinator all;
start coordinator all;
dn节点参数
-- 修改参数
set datanode all (track_activities=on,track_counts=on,track_io_timing=on,track_functions='all',shared_preload_libraries='pg_stat_statements');
-- 重启全部dn节点
stop datanode all;
start datanode all;
3 安装pg_profile
3.1 插件下载
下载地址:Releases · zubkov-andrei/pg_profile
说明:pg_profile4.6支持PostgreSQL16及以下版本,PostgreSQL 17版本需要下载pg_profile4.7。
3.2 集中式
3.2.1. 插件安装
上传安装包至任意节点,使用antdb数据库os账号解压至extension目录:
chown antdb.antdb pg_profile--4.6.tar.gz
tar zxvf pg_profile--4.6.tar.gz --directory $(pg_config --sharedir)/extension
包含3个文件:
3.2.2. 添加extension
pg_profile扩展依赖于plpgsql和dblink扩展,也就是说要使用pg_profile扩展的话,则必须要同时安装plpgsql和dblink扩展。此外,如果要收集sql语句的统计信息,还需要额外安装pg_stat_statements扩展。这三个扩展插件antdb数据库中均自带,无需下载。
登录数据库,执行以下命令添加拓展:
create extension dblink;
create extension pg_stat_statements;
create schema profile;
create extension pg_profile schema profile;
查看拓展:
3.3 分布式
3.3.1. 插件安装
安装方式和集中式一样,需注意的是要在mgr节点安装。
3.3.2. 添加extension
需要添加的拓展同集中式,需注意的是要在cn节点上操作。
说明:创建pg_profile扩展报错,分布式集群暂不支持lateral (select…)语法。后续尝试修改pg_profile–4.6.sql中包含lateral语法的语句以支持安装此拓展。
4 生成awr报告
4.1 打快照
添加profile拓展后,使用以下sql生成一个快照:
SELECT profile.take_sample();
查看快照:
select * from profile.show_samples();
由于系统没有自动生成快照的手段,需要在命令行执行take_sample()函数生成,因此可以配置一个定时任务去跑以下脚本自动生成快照:
adb -p 15432 -c 'SELECT profile.take_sample()' > /dev/null 2>&1
4.2 生成报告
使用get_report函数生成报告,支持多种方式生成。
方式1:基于两个快照点的间隔生成
adb -p 15432 -Aqtc "SELECT profile.get_report(1,4)" -o awr_report_1_4.html
方式2:指定时间点生成
adb -p 15432 -Aqtc "select profile.get_report(tstzrange('2024-12-31 16:16:30+08','2024-12-31 16:42:18+08'))" -o awr_report_241231.html
方式3:基于最近时间生成
adb -p 15432 -Aqtc "select profile.get_report(tstzrange(now() - interval '1 hour',now()))" -o awr_last1h_report.html
5 报告解读
5.1 Report details
报告说明,此部分展示的内容有快照点、开始结束时间和数据库版本信息。
5.2 Server statistics
服务器统计,包含了数据库在此快照期间的统计信息,例如事务数、内存命中率、元组的操作统计等、数据库的调用次数等、数据库聚簇的统计信息,表空间的增长等等。
5.3 SQL query statistics
TopSQL,包括了执行时长、执行次数、执行消耗I/O、执行消耗的逻辑读等,还包含了完整的SQL语句。
5.4 Schema object statistics
Schema的对象信息,包含了Top对象的信息,类似于Oracle AWR报告的segment statistics部分,从这里可以定位到DML最频繁的表、增长最快的表等等。
5.5 User function statistics
用户函数统计,可以看哪些函数执行次数最多。
5.6 Vacuum-related statistics
Vacuum相关统计。
5.7 Cluster settings during the report interval
参数设置详情。
6 拓展插件
以下插件可选安装,有助于获取更详细的报告信息。
6.1 pg_stat_kcache
此插件负责采集系统级别的CPU、IO等负载的信息。
6.2 pg_wait_sampling
收集等待事件信息。