pg_profile,这款工具是个战斗民族写的。我们之所以选择这款工具是因为它足够简单,和OracleAWR报告工作方式很像。而且它最大的优点是用纯粹pl/pgsql编写,勿需使用任何外部库或者软件。
接下来我们看下怎么安装和配置pg_profile,并通过报告分析问题。
首先需要配置数据库相关StatisticsCollector参数,具体配置参数如下:
track_activities = on track_counts = on track_io_timing = on track_functions = all/p1 |
这四个参数建议打开,不然使用会有一些影响。其中track_activities和track_counts默认是打开的。track_activities允许监控当前被任意服务器进程执行的命令。track_counts控制是否收集关于表和索引访问的统计信息。track_io_timing启用对块读写次数的监控。参数track_functions启用对用户定义函数使用的跟踪。
打开上述4个参数之后,还需要配置pg_stat_statements
pg_stat_statements.max是跟踪语句的最大数目(即pg_stat_statements视图中行的最大数量)。如果语句超过这个数量,最少被执行的语句的信息将会被丢弃。作者说此参数的设置太低可能会导致在抽取样本之前会清除某些语句的统计信息。建议设置大一些。当前参数我们设置的50000,足够使用。
pg_stat_statements.track指定top可以跟踪顶层语句(直接由客户端发出的语句),指定all还可以跟踪嵌套的语句(例如在函数中调用的语句),指定none则禁用语句统计信息收集。默认值是top。如果你设置的是all,作者说可能会影响报告中%Totalfields字段的精确值。
上面参数修改稍为简单,因为基本上都是默认打开的。只有少数没开,打开也不需要重启。
1.下载安装文件上传到服务器。
在服务器解压文件,并存放到PG安装目录的extension文件夹下
tar xzf pg_profile- |
2.安装扩展
这里有两种方式安装,一种是公共模式安装,这种安装方式最简单。第二种是独立Schema安装,这种安装将在自己创建的Schema中建自己的表,视图,序列和函数,可以和其他用户有效的进行隔离。我选择了第二种安装方式。
postgres=# CREATE EXTENSION dblink;
postgres=# CREATE EXTENSIONpg_stat_statements;
postgres=# CREATE SCHEMA profile;
postgres=# CREATE EXTENSION pg_profileSCHEMA profile;
默认pg_profile需要使用dblink和pg_stat_statements扩展包,这两个属于系统自带插件,可选插件是pg_stat_kcache
还可以安装pg_stat_kcache数据,提供有关语句CPU使用率和文件系统负载的信息,因为是生产环境,我这里没有多带带编译安装这个插件。
接下来我们可以执行函数创建快照。
postgres=# SELECT profile.snapshot(); snapshot ------------------------ (local,OK,00:00:01.08) |
执行完成之后,可以通过profile.show_samples()函数,查看生成的快照。
postgres=# select profile.show_samples(); show_samples --------------------------------- (1,"2020-10-15 16:46:37+08",,,) (2,"2020-10-15 16:47:12+08",,,) (3,"2020-10-15 16:47:24+08",,,) (4,"2020-10-15 17:11:43+08",,,) (5,"2020-10-15 17:16:26+08",,,) (6,"2020-10-15 17:32:27+08",,,) (7,"2020-10-15 17:57:29+08",,,) (8,"2020-10-16 10:40:17+08",,,) (9,"2020-10-16 11:00:55+08",,,) (9 rows) |
当前总共有9个快照,执行profile.get_report命令,取2个时间段就可以生成AWR报告了。如果要生产对比报告,可以执行profile.get_diffreport命令。
psql -qtc "select profile.get_report(8,9)" --output awr_report_postgres_8_9.html |
如果要每半个小时生成快照,需要把脚本放在contab下执行。
*/30 * * * * psql -c SELECT profile.snapshot() > /tmp/pg_awr.log 2>&1 |
报告输出如下所示,这里我修改了一下存储过程,稍微把标题改动了一下。大家有兴趣也可以自行修改想要的标题还有样式。
报告总共有6个部分:
第一部分是服务器统计。包含了数据库在此快照期间的统计信息,例如事务数、内存命中率、元组的操作统计等、数据库的调用次数等、数据库聚簇的统计信息,表空间的增长等等。
第二部分是我们熟悉的TopSQL。包括了执行时长、执行次数、执行消耗I/O、执行消耗的逻辑读等topN的排序,还包含了完整的SQL语句。
第三部分是Schema的对象信息。包含了Top对象的信息,类似于OracleAWR报告的segmentstatistics部分,从这里我们可以轻松定位DML最频繁的表、增长最快的表等等。
第四部分是用户函数统计。可以看到我们自建的to_char使用次数最多。
第五部分是Vacuum相关统计
第六部分是报告快照期间的参数设置
pg_profile的介绍就到这里,相对于Oracle的awr报告还是有一定的差距的。但是好在开源软件可以自行进行增强。当前执行快照的函数是take_sample(),当执行该函数的时候,会采集相关信息存入我们创建的schema的相关表中,如下图所示:
如果要增加新的指标,只需要创建相关表,增加与之相关的insert语句采集就可以了。
而get_report函数,则是生成html报告的函数,在这里需要把我们新增的一些指标给显示出来。
参考文档:
http://postgres.cn/docs/12/monitoring-stats.html
http://postgres.cn/docs/12/pgstatstatements.html
https://github.com/zubkov-andrei/pg_profile
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/130109.html
摘要:最近研究了的两种集群方案,分别是和,在这里总结一下二者的机制结构优劣测试结果等。其中的前身的,的前身是。为了避免单点故障,可以为所有节点配置对应的节点。测试测试结果测试结果显示,两种集群与单机的性能指标几乎一致,无法分辨高下。 最近研究了PG的两种集群方案,分别是Pgpool-II和Postgres-XL,在这里总结一下二者的机制、结构、优劣、测试结果等。 1、 Pgpool-I...
摘要:接上篇初识写一下简称的部署与测试。如果执行报错则根据提示安装相应的库即可,如等。默认的安装目录是,和原生相同,很顺手。 接上篇《初识Postgres-XL》https://segmentfault.com/a/11...写一下Postgres-XL(简称PGXL)的部署与测试。 第一节 安装安装很简单,源码安装,和PG的安装基本相同,可能比PG多一个依赖库。在所有节点上执行相同操作。 ...
摘要:表示用户操作花费的时间,包括时间和等待事件。当内存中排序空间不足时,使用临时表空间进行排序,这个是内存排序对总排序的百分比。过低说明有大量排序在临时表空间进行。要确保,否则存在严重的性能问题,比如绑定等会影响该参数。 Oracle中的AWR,全称为Automatic Workload Repository,自动负载信息库。它收集关于特定数据库的操作统计信息和其他统计信息,Oracle以...
阅读 1249·2023-01-11 13:20
阅读 1558·2023-01-11 13:20
阅读 1011·2023-01-11 13:20
阅读 1680·2023-01-11 13:20
阅读 3971·2023-01-11 13:20
阅读 2519·2023-01-11 13:20
阅读 1355·2023-01-11 13:20
阅读 3486·2023-01-11 13:20