ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

pg-AWR工具(pg_profile)

2021-11-22 11:05:47  阅读:269  来源: 互联网

标签:profile stat 快照 postgres track AWR pg


pg-AWR工具(pg_profile)

目录

什么是pg_profile

  • 在postgres中,当遇到问题时,可能需要回顾不止一件事情来分析数据库或者整个集群,包括索引,I/O,CPU等
  • pg_profile扩展是基于postgres的标准统计视图。它类似于Oracle AWR架构,和Oracle一样,它在指定时间生成快照,并切提供html格式来解释快照之间的统计数据

配置postgresql.conf

  • pg_profile配置
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启用对用户定义函数使用的跟踪。

  • pg_stat_statements配置
shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.max = 10000
pg_stat_statements.track = 'top'
pg_stat_statements.save = off

pg_stat_statements.max是跟踪语句的最大数目(即pg_stat_statements视图中行的最大数量)。如果语句超过这个数量,最少被执行的语句的信息将会被丢弃。作者说此参数的设置太低可能会导致在抽取样本之前会清除某些语句的统计信息。建议设置大一些。当前参数我们设置的10000,足够使用。

pg_stat_statements.track指定top可以跟踪顶层语句(直接由客户端发出的语句),指定all还可以跟踪嵌套的语句(例如在函数中调用的语句),指定none则禁用语句统计信息收集。默认值是top。如果你设置的是all,作者说可能会影响报告中%Totalfields字段的精确值。

上面参数修改稍为简单,因为基本上都是默认打开的。只有少数没开,打开也不需要重启。

下载并安装pg_profile

下载地址

1、安装比较简单,可以直接将压缩包解压放入postgres的extension扩展目录下面即可

tar xzf pg_profile--0.3.4.tar.gz --directory $(pg_config --sharedir)/extension

2、安装扩展

这里有两种方式安装,一种是公共模式安装,这种安装方式最简单。第二种是独立Schema安装,这种安装将在自己创建的Schema中建自己的表,视图,序列和函数,可以和其他用户有效的进行隔离。

postgres=# CREATE EXTENSION dblink;

postgres=# CREATE EXTENSION pg_stat_statements;

postgres=# CREATE SCHEMA profile;

postgres=# CREATE EXTENSION pg_profile SCHEMA profile;

默认pg_profile需要使用dblink和pg_stat_statements扩展包,这两个属于系统自带插件,可选插件是pg_stat_kcache

还可以安装pg_stat_kcache数据,提供有关语句CPU使用率和文件系统负载的信息

创建快照生成报告

执行函数创建快照

postgres=# select * from take_sample();
 server | result |   elapsed   
--------+--------+-------------
 local  | OK     | 00:00:02.98
(1 row)
--也可以调用snapshot()来生成快照,pg_profile 0.1.2开始snapshot()函数重命名为take_sample()

执行完之后可以调用show_samples()函数,查看生成的快照


postgres=# select show_samples();
          show_samples           
---------------------------------
 (1,"2021-11-09 11:47:01+08",,,)
 (2,"2021-11-09 14:18:40+08",,,)
 (3,"2021-11-10 13:56:55+08",,,)
 (4,"2021-11-10 13:58:55+08",,,)
 (5,"2021-11-10 14:15:58+08",,,)
 (6,"2021-11-10 14:38:38+08",,,)
 (7,"2021-11-10 15:50:53+08",,,)
 (8,"2021-11-10 15:52:34+08",,,)
 (9,"2021-11-10 16:37:18+08",,,)
(9 rows)

总共9个快照,执行get_report命令,任意两个时间段就可以生成AWR报告,如果要生产对比报告,可以使用get_diffreport命令

psql -qtc "select profile.get_report(1,2)"  --output awr_report_postgres_1_2.html

每半个小时生成快照的方法:

*/30 * * * *  psql -c 'SELECT profile.snapshot()' > tmp/pg_awr.log  2>&1

浏览报告

  • 报告总共有六个部分

1636537400(1).jpg

  • 第一部分是服务器统计,包含了整个数据库再此快照期间的统计信息,例如事务数,内存名中率,元组的操作统计数据,以及数据库调用次数数据库聚簇的统计信息,表空间增长等等

1636537568(1).jpg

  • 第二部分是TopSQL,包括执行时长,次数,执行消耗的io,以及逻辑读等topN的排序,还包括完整的sql,根据Query ID可以查看具体的SQL。这里根据rows和executions都是10208可能是同一个事务生成

1636537593(1).jpg

1636537606(1).jpg

  • 第三部分是Schema的对象统计,包含了Top对象的信息,类似OracleAWR报告的segmentstatistics部分,从这里我们可以定位到DML最频繁的表,增长最快的表等等

1636537646(1).jpg

  • 第四部分是函数的统计,可以看到调用的次数以及消耗的时间

1636538616(1).jpg

  • 第五部分是vacuum相关的统计

1636538774(1).jpg

  • 第六部分是报告快照期间的参数设置

1636537712(1).jpg

1636537624(1).jpg

总结

  • 这个工具结合了pg_stat_statement可以分析具体的sql,最大的作用是用来抓取数据库异常的这段时间的详细数据,用于辅助分析数据库问题

标签:profile,stat,快照,postgres,track,AWR,pg
来源: https://www.cnblogs.com/zhangfx01/p/15587596.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有