国产数据库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数据库操作系统用户++依次++执行以下命令:

sql 复制代码
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参数需要重启集群生效:

sql 复制代码
patronictl -c /etc/patroni_antdbcluster.yml restart antdbcluster

重启后查看参数是否生效:

sql 复制代码
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节点操作。登录方式:

sql 复制代码
adbmgr
或
adb -p 16432 postgres

cn节点参数

sql 复制代码
-- 修改参数
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节点参数

sql 复制代码
-- 修改参数
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目录:

sql 复制代码
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数据库中均自带,无需下载。

登录数据库,执行以下命令添加拓展:

sql 复制代码
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生成一个快照:

sql 复制代码
SELECT profile.take_sample();

查看快照:

sql 复制代码
select * from profile.show_samples();

由于系统没有自动生成快照的手段,需要在命令行执行take_sample()函数生成,因此可以配置一个定时任务去跑以下脚本自动生成快照:

sql 复制代码
adb -p 15432 -c 'SELECT profile.take_sample()' > /dev/null 2>&1

4.2 生成报告

使用get_report函数生成报告,支持多种方式生成。

方式1:基于两个快照点的间隔生成

shell 复制代码
adb -p 15432 -Aqtc "SELECT profile.get_report(1,4)" -o awr_report_1_4.html

方式2:指定时间点生成

shell 复制代码
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:基于最近时间生成

shell 复制代码
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

用户函数统计,可以看哪些函数执行次数最多。

Vacuum相关统计。

5.7 Cluster settings during the report interval

参数设置详情。

6 拓展插件

以下插件可选安装,有助于获取更详细的报告信息。

6.1 pg_stat_kcache

此插件负责采集系统级别的CPU、IO等负载的信息。

6.2 pg_wait_sampling

收集等待事件信息。

相关推荐
小陈工31 分钟前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
科技小花5 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸5 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain5 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希6 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神6 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员6 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java6 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿6 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴6 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存