閱讀348 返回首頁    go 阿裏雲 go 技術社區[雲棲]


阿裏雲RDS PgSQL AWR報告手冊

標簽

PostgreSQL , AWR , Oracle , 數據庫診斷 , 性能報告 , snapshot , 快照


背景

熟悉Oracle的童鞋一定對AWR不陌生,通常要分析一個數據庫在某個時間段的性能,可以從數據庫的動態視圖等統計信息記錄中生成一份該時段的統計分析報告。

裏麵包含了常見的等待事件分析,TOP SQL, TOP event等。

PostgreSQL是一個功能和Oracle幾乎可以媲美的開源產品,分析報告的工具也非常多,例如pgstatsinfo, pgsnap, pgtop, pgfouine, ..... 非常的多。

我不想介紹這麼多的工具,而是自己根據對PG的經驗寫了一個非常簡單易用的,不需要安裝一堆的插件,周期性的打快照即可。 用法和AWR非常類似。

本文主要是將之前寫的一個比較完整的巡檢腳本轉換成SQL接口的AWR,易用性更強,不需要登陸數據庫主機,即可獲得報告。

將來PG加入新的統計信息表,我會繼續追加到這個簡單的工具中。

希望大家一起來使用和改進,有問題可以發給我。

一、用法

1. 創建插件

create extension pg_awr;  

2. 打快照(全局)

select __rds_pg_stats__.snap_global();    --  給全局打快照(注意包含的是全局信息,並不是每個庫的快照信息)。  

3. 打快照(庫級)

select __rds_pg_stats__.snap_database();  --  給當前數據庫打快照。  

4. 查看快照清單

select * from __rds_pg_stats__.snap_list;  

5. 指定快照起始ID,生成全局報告(text模式)

select * from __rds_pg_stats__.snap_report_global($begin_snap_id, $end_snap_id);  

6. 指定快照起始ID,生成庫級報告(text模式)

select * from __rds_pg_stats__.snap_report_database($begin_snap_id, $end_snap_id);  

7. 指定快照起始ID,生成全局報告(md模式)

psql --pset=pager=off -q -h xxx.xxx.xxx.xxx -p xxxx -U superuser -d dbname -c "select * from __rds_pg_stats__.snap_report_global(1,1)" > /tmp/global.md  

8. 指定快照起始ID,生成庫級報告(md模式)

psql --pset=pager=off -q -h xxx.xxx.xxx.xxx -p xxxx -U superuser -d dbname -c "select * from __rds_pg_stats__.snap_report_database(2,10)" > /tmp/db.md  

9. 解讀報告(略, 報告內自帶推薦建議)

10. 清除曆史快照

10.1 刪除指定snap_ID以前的快照。

select __rds_pg_stats__.snap_delete(10::int8);               -- 刪除指定SNAP ID以前的快照  

10.2 刪除指定時間以前的快照。

select __rds_pg_stats__.snap_delete('2016-11-23 12:00:00');  -- 刪除指定時間前的快照。  

10.3 保留最近的幾個快照,其他刪除。

select __rds_pg_stats__.snap_delete(10::int4);                -- 保留最近的10個快照,其他刪除。    

二、接口介紹

1. 快照列表

其實就是快照的清單,每打一個快照,就會新增一條記錄。

postgres=# select * from __rds_pg_stats__.snap_list;  
 id |          snap_ts           | snap_level   
----+----------------------------+------------  
  1 | 2016-11-23 19:59:10.321282 | database  
  3 | 2016-11-23 22:29:55.139357 | global  
  4 | 2016-11-23 22:30:42.602292 | database  
  5 | 2016-11-23 22:30:42.602292 | database  
  6 | 2016-11-23 22:30:42.602292 | database  
  7 | 2016-11-23 22:29:55.139357 | global  
  8 | 2016-11-23 22:29:55.139357 | global  
  9 | 2016-11-23 22:29:55.139357 | global  
 10 | 2016-11-23 23:00:31.796333 | global  
 11 | 2016-11-23 22:29:55.139357 | global  
 12 | 2016-11-23 23:02:36.590308 | database  
 13 | 2016-11-23 23:03:51.727333 | global  
 14 | 2016-11-23 23:03:51.727333 | global  
 15 | 2016-11-23 23:03:51.727333 | global  
 16 | 2016-11-23 23:03:51.727333 | global  
 17 | 2016-11-23 23:03:51.727333 | global  
 18 | 2016-11-23 23:03:51.727333 | global  
 19 | 2016-11-23 23:03:51.727333 | global  
 20 | 2016-11-23 23:03:51.727333 | global  
 21 | 2016-11-23 23:02:36.590308 | database  
 22 | 2016-11-23 23:08:50.900675 | global  
 23 | 2016-11-23 23:08:53.153526 | global  
 24 | 2016-11-23 23:08:55.816379 | global  
 25 | 2016-11-23 23:09:11.242692 | database  
 26 | 2016-11-23 23:09:32.270733 | database  
(25 rows)  

2. 快照曆史數據表

打快照時,會將係統的統計信息記錄到這些曆史表,後麵根據時間段生成診斷報告就用到這裏的數據。

postgres=# \dt __rds_pg_stats__.snap_*  
                      List of relations  
    Schema    |            Name            | Type  |  Owner     
--------------+----------------------------+-------+----------  
 __rds_pg_stats__ | snap_list                  | table | postgres  
 __rds_pg_stats__ | snap_pg_conn_stats         | table | postgres  
 __rds_pg_stats__ | snap_pg_cputime_topsql     | table | postgres  
 __rds_pg_stats__ | snap_pg_database_age       | table | postgres  
 __rds_pg_stats__ | snap_pg_db_conn_limit      | table | postgres  
 __rds_pg_stats__ | snap_pg_db_rel_size        | table | postgres  
 __rds_pg_stats__ | snap_pg_db_role_setting    | table | postgres  
 __rds_pg_stats__ | snap_pg_db_size            | table | postgres  
 __rds_pg_stats__ | snap_pg_dead_tup           | table | postgres  
 __rds_pg_stats__ | snap_pg_hash_idx           | table | postgres  
 __rds_pg_stats__ | snap_pg_index_bloat        | table | postgres  
 __rds_pg_stats__ | snap_pg_long_2pc           | table | postgres  
 __rds_pg_stats__ | snap_pg_long_xact          | table | postgres  
 __rds_pg_stats__ | snap_pg_many_indexes_rel   | table | postgres  
 __rds_pg_stats__ | snap_pg_notused_indexes    | table | postgres  
 __rds_pg_stats__ | snap_pg_rel_age            | table | postgres  
 __rds_pg_stats__ | snap_pg_rel_space_bucket   | table | postgres  
 __rds_pg_stats__ | snap_pg_role_conn_limit    | table | postgres  
 __rds_pg_stats__ | snap_pg_seq_deadline       | table | postgres  
 __rds_pg_stats__ | snap_pg_stat_activity      | table | postgres  
 __rds_pg_stats__ | snap_pg_stat_archiver      | table | postgres  
 __rds_pg_stats__ | snap_pg_stat_bgwriter      | table | postgres  
 __rds_pg_stats__ | snap_pg_stat_database      | table | postgres  
 __rds_pg_stats__ | snap_pg_stat_statements    | table | postgres  
 __rds_pg_stats__ | snap_pg_statio_all_indexes | table | postgres  
 __rds_pg_stats__ | snap_pg_statio_all_tables  | table | postgres  
 __rds_pg_stats__ | snap_pg_table_bloat        | table | postgres  
 __rds_pg_stats__ | snap_pg_tbs_size           | table | postgres  
 __rds_pg_stats__ | snap_pg_unlogged_table     | table | postgres  
 __rds_pg_stats__ | snap_pg_user_deadline      | table | postgres  
 __rds_pg_stats__ | snap_pg_vacuumlo           | table | postgres  
 __rds_pg_stats__ | snap_pg_waiting            | table | postgres  
(32 rows)  

3. 創建快照

顧名思義,就是創建快照,我這裏分為兩種快照,一種是全局的,一種是庫級的。

全局的在哪裏創建(首先創建extension pg_awr;)都可以,但是隻需要創建一次就夠了,而庫級的需要連接到需要分析庫去創建快照。

select __rds_pg_stats__.snap_database();  -- 庫級快照  
  
select __rds_pg_stats__.snap_global();    -- 全局快照

全局報告樣本

PostgreSQL AWR 全局報告樣本

庫級報告樣本

PostgreSQL AWR 庫級報告樣本

最後更新:2017-04-01 16:41:01

  上一篇:go linux centos7.2 創建 git 版本庫
  下一篇:go 阿裏雲生態發力,聯手數千軟件商推新實體經濟崛起