帶你瞭解WDR-GaussDB(DWS) 的性能監測報告

摘要:通過本文,讀者可知曉什麼是WDR,如何創建性能數據快照以及生成WDR報告。

本文分享自華爲雲社區《WDR-GaussDB(DWS) 的性能監測報告》,作者:Zhang Jingyao。

GaussDB(DWS) 8.1.1版本引入了負荷診斷報告(Workload Diagnosis Report,以下簡稱WDR)功能,可以提供指定時間段內的性能數據,以html網頁報告的形式呈現給用戶。通過分析該報告,能夠幫助用戶發現異常、診斷問題、優化性能等,其內容豐富直觀,是數據庫調優的利器。

本文對WDR的原理和使用方法進行簡要介紹。通過本文,讀者可知曉什麼是WDR,如何創建性能數據快照以及生成WDR報告。

1. WDR簡介

WDR是GaussDB(DWS)數據庫監控特性的衍生品。數據庫內核在運行過程中積累了大量的一手數據,像執行各類SQL的數量,表和索引的訪問次數和時間,CPU、內存等底層軟硬件的運行情況等。用戶可以通過數據庫提供的系統視圖實時查詢這些數據。例如,查詢PGXC_WORKLOAD_SQL_COUNT視圖可以獲得自數據庫啓動以來各類SQL的執行次數:

postgres=# select * from PGXC_WORKLOAD_SQL_COUNT;
 node_name |   workload   | select_count | update_count | insert_count | delete_count | ddl_count | dml_count | dcl_count
-----------+--------------+--------------+--------------+--------------+--------------+-----------+-----------+-----------
 cn_5001   | default_pool |      1125616 |         1236 |      322303 |            0 |        13 |   1573048 |       102
 cn_5002   | default_pool |      1128231 |         1322 |       321048 |            0 |         2 |   1575517 |    173973
 cn_5003   | default_pool |      1128191 |         1130 |       309138 |            0 |         0 |   1575430 |    173980
(3 rows)

將這些一手的性能監測數據保存下來,並進行自動化的統計分析,就得獲知某段時間內數據庫的運行情況,例如是否繁忙,是否有不合理的SQL,有哪些異常事件等,從而爲診斷問題,性能調優提供參考依據。這便是WDR的由來。

圖1 WDR原理

2. 創建性能快照

如上一章所述,對監測數據進行分析之前先要保存下來。出於性能考慮,數據庫內核將各種監測數據都放在了內存裏,以便快速更新和讀取。一旦進程重啓,這些數據將會丟失。因此,WDR做的第一件事就是將內存裏的檢測數據保存到外設上。這些被保存的性能監測數據被稱爲“快照”,而保存的過程稱爲“創建快照”。

注意不要將這裏的“快照”與數據庫的Snapshot混淆。後者指的是Database中的數據在某一時刻的狀態,而WDR創建的“快照”是指將某一時刻查詢到的系統視圖的內容保存在專門的表格中。

WDR創建的快照保存在dbms_om schema下的表格中。每個系統視圖對應一個表格,表格的名字=“dbms_om.snap_”+視圖名稱。例如PGXC_WORKLOAD_SQL_COUNT視圖的快照保存在dbms_om.snap_pgxc_workload_sql_count表格中。

WDR支持以兩種方式創建快照。一種是由後臺線程定期創建,時間間隔由wdr_snapshot_interval參數指定,默認爲1小時創建一次。另一種是執行create_wdr_snapshot系統函數實時創建,注意該函數需要管理員權限。

postgres=# select create_wdr_snapshot();
           create_wdr_snapshot           
------------------------------------------
 WDR snapshot request has been submitted.
(1 row)

無論以何種方式創建,都需要將enable_wdr_snapshot參數設爲on。

每次打完快照,dbms_om下snapshot相關的表格中都會增加若干行。可以通過表格dbms_om.snapshot查看目前已有快照的ID和創建起止時間。例如:

postgres=# select * from dbms_om.snapshot order by snapshot_id desc limit 5;
 snapshot_id |           start_ts            |            end_ts            
-------------+-------------------------------+-------------------------------
         312 | 2021-05-29 12:36:32.509763+08 | 2021-05-29 12:36:39.938167+08
         311 | 2021-05-29 11:36:32.489812+08 | 2021-05-29 11:36:40.23865+08
         310 | 2021-05-29 10:36:32.214843+08 | 2021-05-29 10:36:37.436173+08
         309 | 2021-05-29 09:48:11.587959+08 | 2021-05-29 09:48:18.247602+08
         308 | 2021-05-29 09:36:31.687527+08 | 2021-05-29 09:36:36.897983+08
(5 rows)

以第一行爲例,可知ID=312的快照從2021-05-29 12:36:32開始創建,到2021-05-29 12:36:39創建完成。snapshot_id是每次快照的唯一標識。

WDR每次會對多個系統視圖打快照,單個視圖快照的起止時間可以通過dbms_om.tables_snap_timestamp表格查詢。以ID=312的快照爲例:

postgres=# select * from dbms_om.tables_snap_timestamp where snapshot_id=312;
 snapshot_id | db_name  |            tablename             |           start_ts            |            end_ts            
-------------+----------+----------------------------------+-------------------------------+-------------------------------
         312 | postgres | snap_pgxc_os_run_info            | 2021-05-29 12:36:32.511503+08 | 2021-05-29 12:36:32.691519+08
         312 | postgres | snap_pgxc_wait_events            | 2021-05-29 12:36:32.692543+08 | 2021-05-29 12:36:33.982895+08
         312 | postgres | snap_pgxc_instr_unique_sql       | 2021-05-29 12:36:33.983801+08 | 2021-05-29 12:36:34.131792+08
.......
(19 rows)

相比dbms_om.snapshot,dbms_om.tables_snap_timestamp表格記錄了更精確的快照時間。

爲了避免佔用太多空間,太舊的快照會被定期清除,清除時間通過wdr_snapshot_retention_days設置,範圍1~15天,默認是8天,也就是說默認8天前創建的快照會被刪除。如果想保留更久的快照數據,需要用戶自己做轉儲。

3. 生成WDR報告

有了快照後便可以對性能監測數據進行計算分析,生成報告供用戶查看。不同的分析角度和分析方式可以得到不同的報告。目前WDR支持對比前後兩次快照數據,生成該時間段的性能監測報告,簡稱“WDR報告”。

由於GaussDB(DWS)是分佈式數據庫,由多個節點組成,節點又分爲CN(Coordinator)和DN(Datanode),相應地WDR報告也分爲集羣(cluster)和單節點(node)兩種範圍(scope)。兩種scope的報告內容有所不同,前者由集羣總體的性能數據組成,後者針對單個節點的性能表現進行分析計算。對於單節點scope的報告,CN和DN上的報告內容也有所不同。報告scope在生成報告時由用戶指定。

GaussDB(DWS)提供了系統函數generate_wdr_report()用於創建WDR報告。生成報告前,首先需確定起止snapshot_id。通過查詢dbms_om.snapshot表格,針對感興趣的時間段,取得兩個時間點對應的snapshot_id。例如,想查看2021-02-21 03:00:00和2021-02-21 04:00:00之間的性能狀況:

postgres=# select * from dbms_om.snapshot where start_ts > '2021-02-21 03:00:00'::timestamptz and start_ts < '2021-02-21 04:00:00'::timestamptz order by snapshot_id;
 snapshot_id |           start_ts            |            end_ts            
-------------+-------------------------------+-------------------------------
      2147 | 2021-02-21 03:02:40.000716+08 | 2021-02-21 03:03:17.840595+08
        2148 | 2021-02-21 03:12:39.873876+08 | 2021-02-21 03:13:15.963517+08
        2149 | 2021-02-21 03:22:39.875301+08 | 2021-02-21 03:23:16.659778+08
        2150 | 2021-02-21 03:32:40.857761+08 | 2021-02-21 03:33:18.477795+08
        2151 | 2021-02-21 03:42:41.454982+08 | 2021-02-21 03:43:17.977323+08
        2152 | 2021-02-21 03:52:41.794683+08 | 2021-02-21 03:53:18.676577+08
(6 rows)

通過以上查詢得到該時間段對應的起止snapshot_id分別是2147和2152。

下一步,確定生成報告的類型。當前版本支持生成3種類型的WDR:摘要型(summary),詳細型(detail)和全部型(all)。摘要型只包括簡要分析計算結果,詳細型只包含詳細的指標數據,全部型包括摘要型和詳細型的全部內容。

最後,執行generate_wdr_report()函數生成WDR報告。例如生成2021-02-21 03:00:00和2021-02-21 04:00:00之間的摘要型集羣範圍WDR報告,可執行:

postgres=# select generate_wdr_report(2147, 2152, 'summary', 'cluster', '');
                           generate_wdr_report                            
--------------------------------------------------------------------------
 Report summary-cluster-2147-2152-20210301125740.html has been generated.
(1 row)

要生成節點cn_5001在2021-02-21 03:00:00和2021-02-21 04:00:00之間的全部型WDR報告,可執行:

postgres=# select generate_wdr_report(2147, 2152, 'all', 'node', 'cn_5001');
                         generate_wdr_report                         
----------------------------------------------------------------------
 Report all-cn_5001-2147-2152-20210301125906.html has been generated.
(1 row)

成功後,會提示“$報告文件名 has been generated”。報告文件默認位放在當前CN節點的pg_log目錄下,可以用web瀏覽器打開:

圖 2 WDR報告

報告中的各部分默認爲展開狀態,如果雙擊標題,相關部分內容會收起,標題前“-”變爲“+”,如圖3所示:

圖3收起後的WDR報告樣式

報告中各指標的含義可參考產品文檔。如何運用WDR報告分析和定位問題將在後續的文章中討論。

4. 注意事項

如前文所述,WDR特性依賴於各種數據庫內核監測功能提供數據。出於性能考慮,有些內核監測功能默認處於關閉狀態,需要通過GUC參數開啓。如果不開啓,相應性能視圖查詢的結果是空的,也無法生成正確的快照和WDR報告。如果要得到完整的WDR報告,需要將下表中的GUC參數設爲最後一列中的值:

想了解GuassDB(DWS)更多信息,歡迎微信搜索“GaussDB DWS”關注微信公衆號,和您分享最新最全的PB級數倉黑科技,後臺還可獲取衆多學習資料哦~

 

點擊關注,第一時間瞭解華爲雲新鮮技術~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章