数据库版本12.2,pg_profile4.1
插件分享:https://wwi.lanzoup.com/b019smr0d 密码:co13
安装相关依赖插件
这两个插件是pg源码自带,如果是源码编译安装就在源码目录下的contrib目录,找不到就find。如果是yum方式安装的pg可能就没有,反正我没找到。
pg_stat_statements 插件,负责收集SQL
statement 级别的统计信息
cd pg_stat_statements/
make
make install
dblink 插件,可以实现远程收集其他实例信息的功能。
cd dblink
make
make install
这两个需要额外下载是可选插件非强制安装,然后放在任意目录下编译运行就行了,比如家目录。
pg_stat_kcache 插件,负责采集系统级别的CPU,SYSTEM io等负载的信息
cd pg_stat_kcache-REL2_2_1
make
make install
pg_wait_sampling 插件,负责收集等待事件的信息
cd pg_wait_sampling-1.1.5
make USE_PGXS=1
make USE_PGXS=1 install
最后解压pg_profile,其中$(pg_config
--sharedir)这个变量就是你pg的安装目录。
tar xzf pg_profile--4.1.tar.gz --directory $(pg_config
--sharedir)/extension
设置参数
shared_preload_libraries =
'pg_wait_sampling,pg_stat_statements,pg_stat_kcache' #用于指定在数据库服务器启动过程中应加载到内存中的共享库列表。如果没装那两个可选插件就把名字去了,不然会报错。
track_activities = on #启用对每个会话的当前执行命令的信息收集,还有命令开始执行的时间。
track_counts = on #启用在数据库活动上的统计收集。
#track_io_timing = on #14以下用这个参数,启用对系统 I/O 调用的计时。
#track_wal_io_timing = on # 14及以上版本这个和track_io_timing两个都能开启,14以下不要开启这个参数不然报错。启用WAL I/O调用的计时。
track_functions = all/pl #启用跟踪函数调用计数和用时。指定pl
只跟踪过程语言函数,指定all
还会跟踪 SQL 和 C 语言函数。是all or pl 不是直接"all/pl",我看有的文章直接写两个参数,搞不懂他们的数据库是怎么启动的。
测试设置上面几个就行了,生产环境考虑用下面的。
pg_profile.max_sample_age= 7 # 设置sample 的过期时间,以防止采集量占用空间过大
pg_profile.topn = 20 # report中显示的 top N的对象
pg_profile.track_sample_timings = off #记录采样的详细时间
pg_profile.max_query_length = 20000 # 查询语句的最大长度,超出部分阶段截断。
pg_stat_statements.max = 1000 #是跟踪语句的最大数目(即pg_stat_statements视图中行的最大数量)。如果语句超过这个数量,最少被执行的语句的信息将会被丢弃。设置太低可能会导致在抽取样本之前会清除某些语句的统计信息。
pg_stat_statements.track = 'top' #指定top可以跟踪顶层语句(直接由客户端发出的语句),指定all还可以跟踪嵌套的语句(例如在函数中调用的语句),指定none则禁用语句统计信息收集。默认值是top。如果你设置的是all,作者说可能会影响报告中%Totalfields字段的值。
pg_stat_statements.save = off #指定在服务器关闭之后是否还保存语句统计信息。
pg_profile.topn = 20 #每个排序的报告表中要报告顶部对象的数量
重启数据库
pg_ctl stop -D /data/pg_data
pg_ctl start -D /data/pg_data
进入数据安装插件,最好安顺序装,不然比如先装pg_stat_kcache没装pg_stat_statements就会报错,好像是依赖关系。同理删的时候也是先删pg_stat_kcache。顺便提一句删除扩展就是drop extension。
create extension pg_stat_statements;
create extension dblink;
create extension pg_wait_sampling;
create extension pg_stat_kcache;
create schema profile;
create extension pg_profile schema profile;
做完上面就可以正常用了,比如创建sample 采样;
select profile.take_sample();
查看采样
select profile.show_samples();
生成报告,括号里的数字根据生成的数字填入。必须有两个采样才能生成报告。
psql -qtc "select profile.get_report(1,2)"
--output awr_report_postgres_1_2.html
*/30 * * * * psql -U profile_usr -d postgres -c 'SELECT profile.take_sample()' > /dev/null 2>&1
生成对比采样
psql -qtc "select profile.get_diffreport(1,2,3,4)" --output awr_report_postgres_12_34.html
按时间生成采样
psql -Aqtc "select get_report(tstzrange('2023-12-06 14:20:10+08','2023-12-06 16:30:50+08'))" -o report_range_14:20-16:30.html
网盘链接有生成的报告,pg_profile官方说明文档,谷歌翻译文档。
这个工具感觉用的人不多,能搜到的部署文档也是乱七八槽有的能用有的用不了,按照我写的步骤只要安装插件的过程中不报错。应该就没问题。
我自己也踩了很多坑,比如执行select
profile.take_sample();报错无法连接数据库,执行某个函数没有权限。生成的报告打开是空白。对了也不建议用4.3,我14版本用4.3生成的报告三四百M还打不开。
后续应该会多试试其他的用法看看报告指标,到时候再分享。