阿裏雲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(); -- 全局快照
全局報告樣本
庫級報告樣本
最後更新:2017-04-01 16:41:01