作為一名Oracle DBA,在遇到性能診斷時經常使用的AWR報告,通過這份報告DBA可以較為全面的分析出數據庫的性能問題所在范圍,為下一步的數據庫性能優化和故障診斷提供有力支撐。聽說Mogdb數據庫中也看到了類似的功能,那就是Mogdb的WDR報告,今天不妨一試究竟。閑話少說,直接開干。
一、開啟WDR報告的snapshot收集
./gs_guc reload -N all -I all -c "enable_wdr_snapshot=on"
The gs_guc run with the following arguments: [./gs_guc -N all -I all -c enable_wdr_snapshot=on reload ].
Begin to perform the total nodes: 1.
Popen count is 1, Popen success count is 1, Popen failure count is 0.
Begin to perform gs_guc for datanodes.
Command count is 1, Command success count is 1, Command failure count is 0.
Total instances: 1. Failed instances: 0.
ALL: Success to perform gs_guc!
yk=> select name,setting from pg_settings where name like '%wdr%';
name | setting
-----------------------------+---------
enable_wdr_snapshot | on
wdr_snapshot_interval | 60
wdr_snapshot_query_timeout | 100
wdr_snapshot_retention_days | 8
(4 rows)
解釋:每一個小時自動生成一個wdr,保留天數8天
二、模擬數據,主要模擬讀和寫
yk=> create table t8(id int, info int[]);
CREATE TABLE
yk=> insert into t8 select generate_series(1,10000),'{1,1,2,2,3,3,4,4}'::int[];
INSERT 0 10000
yk=> insert into t8 select generate_series(1,10000),'{1,1,2,2,3,3,4,4}'::int[];
INSERT 0 10000
yk=> insert into t8 select generate_series(1,1000000),'{1,1,2,2,3,3,4,4}'::int[];
INSERT 0 1000000
analyze t8;
yk=> select * from t8
yk=> select count(*) from t8;
count
---------
1020000
(1 row)
三、手工創建快照
創建snapshot
MogDB=# select create_wdr_snapshot();
create_wdr_snapshot
-----------------------------------------
WDR snapshot request has been submitted
(1 row)
MogDB=# select * from snapshot.snapshot;
snapshot_id | start_ts | end_ts
-------------+-------------------------------+-------------------------------
1 | 2022-09-07 17:55:54.01329+08 | 2022-09-07 17:55:54.471282+08
2 | 2022-09-08 08:44:21.609754+08 | 2022-09-08 08:44:22.556857+08
3 | 2022-09-08 10:20:24.677605+08 | 2022-09-08 10:20:27.517682+08
4 | 2022-09-08 11:20:25.033788+08 | 2022-09-08 11:20:26.359985+08
5 | 2022-09-08 11:32:43.150067+08 | 2022-09-08 11:32:44.297108+08
(5 rows)
查詢數據庫節點信息
MogDB=# select * from pg_node_env;
node_name | host | process | port | installpath | datapath | log_directory
-----------+-----------+---------+-------+-----------------+------------------+--------------------------------
dn_6001 | localhost | 1367 | 26000 | /dbms/mogdb/app | /dbms/mogdb/data | /dbms/mogdb/log/pg_log/dn_6001
(1 row)
MogDB=# \a \t \o WDR_20220908.html ---wdr報告的路徑和命名
Output format is unaligned.
Showing only tuples.
MogDB=# select generate_wdr_report(3,5,'all','node','dn_6001');
MogDB=# \o \a \t
Output format is aligned.
Tuples only is off.
四、 WDR報告解讀

解讀:可以看到硬件配置、數據庫版本、快照的采集時間

解讀:這部分是實例的效率,越接近100%,數據庫運行越健康,上圖Soft Parse%指標值偏小則說明存在大量硬解析,因為執行的SQL(select * from t8)是第一次執行,在Buffer中找不到。

解讀:前10 的等待事件,TYPE是類型,重點關注IO_EVENT類型即可

解讀:主要看%ldle,代表CPU空閑占比,越高越好,一般不能低于10%

解讀:在快照期間的IO負載情況
Database requests: 即每秒IO寫請求次數5、請求次數總和 也是5
Database(blocks): 即每秒寫block的數量5.
解讀:這個太熟悉了和oracle 的awr完全一樣:SQL執行時間

解讀:這部分是統計用戶表的IO活動狀態。

解讀:這部分是用戶表狀態的統計信息,SQL優化最要看分析最后時間。

解讀:最后這部分是Mogdb數據庫參數配置信息,我認為是WDR的入口,只要了解了數據庫配置的參數,才能入手一步步分析。
五、總結
關于Mogdb的 WDR報告解讀今天小試牛刀感覺還是不錯的,由于場景簡單、數據量讀寫和并發條件有限,好多知識點無法展開細說,希望以后有機會生產早日用上Mogdb再一一細說。最后祝愿Mogdb商業數據庫在國產數據庫地位越來越穩,市場份額占比越來越大。




