如何生成和阅读EnterpriseDB (PPAS)诊断报告

PPAS是基于PostgreSQL的高度兼容Oracle的商业产品。

不仅语法和Oracle兼容,功能也和Oracle很类似。

例如它也支持生成类似statspack或者AWR报告。

写在前面

rds用户请使用rds_snap, rds_get_snaps, rds_report, rds_truncsnap代替本文的函数。

PPAS AWR不是全局的

注意,PPAS的AWR不是全局的报告,所以需要分析哪个库,就到哪个库去打快照。

应该分析哪个库

首先我们需要创建pg_stat_statements扩展包,从中了解total_time最多的库,去对应的数据库分析。

edb=# select datname,sum(total_time) from pg_stat_statements t1, pg_database t2 where t1.dbid=t2.oid group by 1 order by 2 desc;
    datname    |       sum
---------------+------------------
 a | 70971703.7060002
 b |       951986.866
 c |         1437.653
 d |             49.9
 e |             1.06
(5 rows)

显然a库的耗时最多,所以我们应该去分析a库。

连接到a库,继续往下看。

如何创建快照

配置参数timed_statistics=true或者在客户端会话中设置timed_statistics=true.
然后创建一个快照

edb=# SELECT * FROM edbsnap();
       edbsnap
----------------------
 Statement processed.
(1 row)

你可以周期性的创建快照。

例如在ECS上创建一个crontab, 每一个小时打一次快照,并删除7天前的快照。

从而在出现问题时,可以指定时间段生成AWR报告进行分析。

查看已创建的快照

edb=# SELECT * FROM get_snaps();
          get_snaps
------------------------------
 1  11-FEB-10 10:41:05.668852
 2  11-FEB-10 10:42:27.26154
 3  11-FEB-10 10:45:48.999992
 4  11-FEB-10 11:01:58.345163
 5  11-FEB-10 11:05:14.092683
 6  11-FEB-10 11:06:33.151002
 7  11-FEB-10 11:11:16.405664
 8  11-FEB-10 11:13:29.458405
 9  11-FEB-10 11:23:57.595916
 10 11-FEB-10 11:29:02.214014
 11 11-FEB-10 11:31:44.244038
(11 rows)

如何生成诊断报告

然后选择两个快照,产生这两个快照时间点之间的数据库运行诊断报告。

SELECT * FROM edbreport(beginning_id, ending_id);

返回指定快照范围内,TOP N的系统等待信息

sys_rpt(beginning_id, ending_id, top_n)

edb=# SELECT * FROM sys_rpt(9, 10, 10);
                                   sys_rpt
-----------------------------------------------------------------------------
 WAIT NAME                                COUNT      WAIT TIME       % WAIT
 ---------------------------------------------------------------------------
 wal write                                21250      104.723772      36.31
 db file read                             121407     72.143274       25.01
 wal flush                                84185      51.652495       17.91
 wal file sync                            712        29.482206       10.22
 infinitecache write                      84178      15.814444       5.48
 db file write                            84177      14.447718       5.01
 infinitecache read                       672        0.098691        0.03
 db file extend                           190        0.040386        0.01
 query plan                               52         0.024400        0.01
 wal insert lock acquire                  4          0.000837        0.00
(12 rows)

返回指定快照范围内,TOP N的会话等待信息

sess_rpt(beginning_id, ending_id, top_n)

SELECT * FROM sess_rpt(18, 19, 10);

                              sess_rpt
-----------------------------------------------------------------------------
ID    USER       WAIT NAME              COUNT TIME(ms)   %WAIT SES  %WAIT ALL
 ----------------------------------------------------------------------------

 17373 enterprise db file read           30   0.175713   85.24      85.24
 17373 enterprise query plan             18   0.014930   7.24       7.24
 17373 enterprise wal flush              6    0.004067   1.97       1.97
 17373 enterprise wal write              1    0.004063   1.97       1.97
 17373 enterprise wal file sync          1    0.003664   1.78       1.78
 17373 enterprise infinitecache read     38   0.003076   1.49       1.49
 17373 enterprise infinitecache write    5    0.000548   0.27       0.27
 17373 enterprise db file extend         190  0.04.386   0.03       0.03
 17373 enterprise db file write          5    0.000082   0.04       0.04
 (11 rows)

返回指定PID的诊断信息

sessid_rpt(beginning_id, ending_id, backend_id)

SELECT * FROM sessid_rpt(18, 19, 17373);

                                sessid_rpt
-----------------------------------------------------------------------------
 ID    USER       WAIT NAME             COUNT TIME(ms)  %WAIT SES   %WAIT ALL
 ----------------------------------------------------------------------------
 17373 enterprise db file read           30   0.175713  85.24       85.24
 17373 enterprise query plan             18   0.014930  7.24        7.24
 17373 enterprise wal flush              6    0.004067  1.97        1.97
 17373 enterprise wal write              1    0.004063  1.97        1.97
 17373 enterprise wal file sync          1    0.003664  1.78        1.78
 17373 enterprise infinitecache read     38   0.003076  1.49        1.49
 17373 enterprise infinitecache write    5    0.000548  0.27        0.27
 17373 enterprise db file extend         190  0.040386  0.03        0.03
 17373 enterprise db file write          5    0.000082  0.04        0.04
(11 rows)

返回指定PID的等待信息

sesshist_rpt(snapshot_id, session_id)

edb=# SELECT * FROM sesshist_rpt (9, 5531);
                              sesshist_rpt
----------------------------------------------------------------------------
 ID    USER       SEQ  WAIT NAME
   ELAPSED(ms)   File  Name                 # of Blk   Sum of Blks
 ----------------------------------------------------------------------------
 5531 enterprise 1     db file read
   18546        14309  session_waits_pk     1          1
 5531 enterprise 2     infinitecache read
   125          14309  session_waits_pk     1          1
 5531 enterprise 3     db file read
   376          14304  edb$session_waits    0          1
 5531 enterprise 4     infinitecache read
   166          14304  edb$session_waits    0          1
 5531 enterprise 5     db file read
   7978         1260   pg_authid            0          1
 5531 enterprise 6     infinitecache read
   154          1260   pg_authid            0          1
 5531 enterprise 7     db file read
   628          14302  system_waits_pk      1          1
 5531 enterprise 8     infinitecache read
   463          14302  system_waits_pk      1          1
 5531 enterprise 9     db file read
   3446         14297  edb$system_waits     0          1
 5531 enterprise 10    infinitecache read
   187          14297  edb$system_waits     0          1
 5531 enterprise 11    db file read
   14750        14295  snap_pk              1          1
 5531 enterprise 12    infinitecache read
   416          14295  snap_pk              1          1
 5531 enterprise 13    db file read
   7139         14290  edb$snap             0          1
 5531 enterprise 14    infinitecache read
   158          14290  edb$snap             0          1
 5531 enterprise 15    db file read
   27287        14288  snapshot_num_seq     0          1
 5531 enterprise 16    infinitecache read
(17 rows)

清除指定范围内的快照

purgesnap(beginning_id, ending_id)

SELECT * FROM purgesnap(6, 9);

             purgesnap
------------------------------------
 Snapshots in range 6 to 9 deleted.
(1 row)

edb=# SELECT * FROM get_snaps();
          get_snaps
------------------------------
 1  11-FEB-10 10:41:05.668852
 2  11-FEB-10 10:42:27.26154
 3  11-FEB-10 10:45:48.999992
 4  11-FEB-10 11:01:58.345163
 5  11-FEB-10 11:05:14.092683
 10 11-FEB-10 11:29:02.214014
 11 11-FEB-10 11:31:44.244038
(7 rows)

清除所有快照

truncsnap()

SELECT * FROM truncsnap();

      truncsnap
----------------------
 Snapshots truncated.
(1 row)

SELECT * FROM get_snaps();
 get_snaps
-----------
(0 rows)

生成AWR报告

全面的系统报告

edbreport(beginning_id, ending_id)

数据库报告

stat_db_rpt(beginning_id, ending_id)

指定范围的表级报告

stat_tables_rpt(beginning_id, ending_id, top_n, scope)
scope=ALL, USER, SYS

指定范围的表级IO报告

statio_tables_rpt(beginning_id, ending_id, top_n, scope)

指定范围的索引级报告

stat_indexes_rpt(beginning_id, ending_id, top_n, scope)

指定范围的索引级IO报告

statio_indexes_rpt(beginning_id, ending_id, top_n, scope)

范围

scope determines which tables the function returns statistics about. Specify SYS, USER or ALL:

SYS indicates that the function should return information about system defined tables.
A table is considered a system table if it is stored in one of the following schemas:
  pg_catalog, information_schema, sys, or dbo.

USER indicates that the function should return information about user-defined tables.

ALL specifies that the function should return information about all tables.

rds ppas用户注意

rds ppas用户是普通用,如果要使用以上的函数,需要在前面加rds_前缀,如下方法可以查看有哪些rds函数。

找到对应的rds函数就可以执行了。

postgres=# \df rds*

                                List of functions
 Schema |           Name           |     Result data type     |
                                                          Argument data types
                                                                        |  Type
--------+--------------------------+--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------+--------
 sys    | rds_add_policy           | void                     | object_schema text DEFAULT NULL::text, object_name text, policy_name text, function_schema text DEFAULT NULL::text, policy_function text, statement_types text DEFAULT 'inser
t,update,delete,select'::text, update_check boolean DEFAULT false, enable boolean DEFAULT true, static_policy boolean DEFAULT false, policy_type integer DEFAULT NULL::integer, long_predicate boolean DEFAULT false, sec_relevant_cols text
DEFAULT NULL::text, sec_relevant_cols_opt integer DEFAULT NULL::integer | normal
 sys    | rds_drop_policy          | void                     | object_schema text DEFAULT NULL::text, object_name text, policy_name text                                                                                                    

                                                                        | normal
 sys    | rds_enable_policy        | void                     | object_schema text DEFAULT NULL::text, object_name text, policy_name text, enable boolean                                                                                    

                                                                        | normal
 sys    | rds_get_snaps            | SETOF text               |                                                                                                                                                                              

                                                                        | normal
 sys    | rds_manage_extension     | boolean                  | operation text, pname text, schema text DEFAULT NULL::text, logging boolean DEFAULT false                                                                                    

                                                                        | normal
 sys    | rds_pg_cancel_backend    | boolean                  | upid integer                                                                                                                                                                 

                                                                        | normal
 sys    | rds_pg_stat_activity     | SETOF pg_stat_activity   |                                                                                                                                                                              

                                                                        | normal
 sys    | rds_pg_stat_statements   | SETOF pg_stat_statements |                                                                                                                                                                              

                                                                        | normal
 sys    | rds_pg_terminate_backend | boolean                  | upid integer                                                                                                                                                                 

                                                                        | normal
 sys    | rds_report               | SETOF text               | beginsnap bigint, endsnap bigint                                                                                                                                             

                                                                        | normal
 sys    | rds_snap                 | text                     |                                                                                                                                                                              

                                                                        | normal
 sys    | rds_truncsnap            | text                     |                                                                                                                                                                              

                                                                        | normal
(12 rows)

参考

https://www.enterprisedb.com/docs/en/9.5/eeguide/toc.html
https://www.enterprisedb.com/docs/en/9.5/eegui
de/Postgres_Plus_Enterprise_Edition_Guide.1.141.html

时间: 2024-08-02 08:22:35

如何生成和阅读EnterpriseDB (PPAS)诊断报告的相关文章

EnterpriseDB (PPAS) Oracle兼容性Virtual Private Database(VPD) 数据隔离以及当前缺陷

不带barrier的视图是不安全的,我在前面写过文章来讲这个,以及如何攻击这种视图. https://yq.aliyun.com/articles/14731 PostgreSQL 为了增强视图的安全,增加了barrier的属性,来解决被攻击的问题. PostgreSQL 9.5 则提供了RLS来达到表数据隔离的目的,解决了需要使用视图来隔离数据的目的. RLS的隔离可以参考我以前写的文章 http://blog.163.com/digoal@126/blog/static/1638770402

PostgreSQL、Greenplum 日常监控 和 维护任务

标签 PostgreSQL , Greenplum , Recommended Monitoring and Maintenance Tasks , 监控 , 维护 背景 Greenplum的日常监控点.评判标准,日常维护任务. 展示图层 由于一台主机可能跑多个实例,建议分层展示. 另外,即使是ON ECS虚拟机(一个虚拟机一个实例一对一的形态)的产品形态,实际上也建议分层展示,以示通用性. 主机级图层 1.全局 2.以集群分组 展示图形 1.饼图(正常.警告.严重错误.不可用,占比,数量) 2

关于Cutt.com关于Topic Engine

关于Cutt.com关于Topic Engine 郑昀 20100726 上个月参加谷文栋效力的简网的内部产品调研会,提前了解了Cutt.com的功能.Cutt的Slogan是"关注你的关注",原本以为它会是一个以个性化推荐为主打的应用,但从Slogan上看,更接近于信息过滤器.当你搜索时,它像一个Topic Engine,当你点击某一篇文章阅读时,它的界面又像Google Reader或鲜果阅读器. Cutt.com在组织资讯时,我把它划分到Topic Engine一类,暂且不谈它的

20个非常有用的Java程序片段

下面是20个非常有用的Java程序片段,希望能对你有用. 1. 字符串有整型的相互转换 String a = String.valueOf(2); //integer to numeric string int i = Integer.parseInt(a); //numeric string to an int 2. 向文件末尾添加内容 BufferedWriter out = null; try { out = new BufferedWriter(new FileWriter("filen

AI在教育领域的六大应用 | “AI+传统行业”全盘点

前有互联网+,现有AI+.当AI+教育出现的时候,不少人怀疑:冷冰冰的机器真的能担任人类灵魂工程师吗? 怀疑来自不了解.雷锋网总结了AI+教育繁衍出的六大主要应用:个性化学习.自动化辅导.智能测评.模拟和游戏化教学平台.教育决策.幼儿早教机器人,附上国内外具体应用案例,探究AI到底是怎么改变教育行业的.看现在,致未来. AI+教育的六大应用 一.个性化学习,因材施教 因材施教教育方法在我国已有2000多年历史,但在我国应试教育大环境下,根据学生不同的认知水平.学习能力以及自身素质来制定个性化学习

使用mysqlbinlog提取二进制日志

    MySQL binlog日志记录了MySQL数据库从启用日志以来所有对当前数据库的变更.binlog日志属于二进制文件,我们可以从binlog提取出来生成可阅读的SQL语句来重建当前数据库以及根据需要实现时点恢复或不完全恢复.本文主要描述了如果提取binlog日志,并给出相关示例.     有关binlog的介绍与描述请参考:MySQL 二进制日志(Binary Log)   1.提取mysqlbinlog的几种方式a.使用show binlog events方式可以获取当前以及指定bi

脚本-linux获取CPU内存占用信息

问题描述 linux获取CPU内存占用信息 想弄个脚本定时记录,linux 占用最高CPU 内存的进程. 生成友好阅读的日志,或者将查到的信息追加到日志文件中也行. 然后放到crontab里去执行. 但是有个前提,不使用ps命令. 网上找了一堆,可以使用这个方式,但是我不能使用PS命令,请问有什么办法吗: linux下获取占用 CPU 资源最多的10个进程,可以使用如下命令组合: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linu

10 个最终编译成 JavaScript 的脚本语言

与简单的网站相比,现代应用程序有更多 不同的需求 .但是,浏览器是一个拥有(大部分)固定技术的平台,而且JavaScript仍然是web应用程序的核心语言:需要在浏览器中运行的任何应用程序都必须用该语言实现. 我们都知道JavaScript并不是实现所有任务的最佳语言,当遇到复杂的应用时,它可能就不太适合.为了避免这个问题,已经创建了几种新的语言和现有语言的变体,它们都生成可以在浏览器中运行的代码,而无需编写任何JavaScript代码,也不用考虑语言的局限性. 文中介绍了10个有趣的语言,这些

谁能帮忙解释下这几行是什么意思,谢谢。

问题描述 public class Matrix { int rows; int cols; double data[][]; public Matrix() { this(0, 0); } public Matrix(int rows, int cols) { this(rows, cols, new double[rows][cols]); //后面为什么要创建new double[rows][cols] } public Matrix(int rows, int cols, double[