WDR-GaussDB(DWS) 的性能監(jiān)測報告
GaussDB(DWS) 8.1.1版本引入了負荷診斷報告(Workload Diagnosis Report,以下簡稱WDR)功能,可以提供指定時間段內(nèi)的性能數(shù)據(jù),以html網(wǎng)頁報告的形式呈現(xiàn)給用戶。通過分析該報告,能夠幫助用戶發(fā)現(xiàn)異常、診斷問題、優(yōu)化性能等,其內(nèi)容豐富直觀,是數(shù)據(jù)庫調(diào)優(yōu)的利器。

本文對WDR的原理和使用方法進行簡要介紹。通過本文,讀者可知曉什么是WDR,如何創(chuàng)建性能數(shù)據(jù)快照以及生成WDR報告。解讀WDR報告,以及運用報告發(fā)現(xiàn)和定位問題等將在后續(xù)的文章中展開討論。
1.?? WDR簡介
WDR是GaussDB(DWS)數(shù)據(jù)庫監(jiān)控特性的衍生品。數(shù)據(jù)庫內(nèi)核在運行過程中積累了大量的一手數(shù)據(jù),像執(zhí)行各類SQL的數(shù)量,表和索引的訪問次數(shù)和時間,CPU、內(nèi)存等底層軟硬件的運行情況等。用戶可以通過數(shù)據(jù)庫提供的系統(tǒng)視圖實時查詢這些數(shù)據(jù)。例如,查詢PGXC_WORKLOAD_SQL_COUNT視圖可以獲得自數(shù)據(jù)庫啟動以來各類SQL的執(zhí)行次數(shù):
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)
將這些一手的性能監(jiān)測數(shù)據(jù)保存下來,并進行自動化的統(tǒng)計分析,就得獲知某段時間內(nèi)數(shù)據(jù)庫的運行情況,例如是否繁忙,是否有不合理的SQL,有哪些異常事件等,從而為診斷問題,性能調(diào)優(yōu)提供參考依據(jù)。這便是WDR的由來。
圖1 WDR原理
2.?? 創(chuàng)建性能快照
如上一章所述,對監(jiān)測數(shù)據(jù)進行分析之前先要保存下來。出于性能考慮,數(shù)據(jù)庫內(nèi)核將各種監(jiān)測數(shù)據(jù)都放在了內(nèi)存里,以便快速更新和讀取。一旦進程重啟,這些數(shù)據(jù)將會丟失。因此,WDR做的第一件事就是將內(nèi)存里的檢測數(shù)據(jù)保存到外設(shè)上。這些被保存的性能監(jiān)測數(shù)據(jù)被稱為“快照”,而保存的過程稱為“創(chuàng)建快照”。
注意不要將這里的“快照”與數(shù)據(jù)庫的Snapshot混淆。后者指的是Database中的數(shù)據(jù)在某一時刻的狀態(tài),而WDR創(chuàng)建的“快照”是指將某一時刻查詢到的系統(tǒng)視圖的內(nèi)容保存在專門的表格中。
WDR創(chuàng)建的快照保存在dbms_om schema下的表格中。每個系統(tǒng)視圖對應(yīng)一個表格,表格的名字=“dbms_om.snap_”+視圖名稱。例如PGXC_WORKLOAD_SQL_COUNT視圖的快照保存在dbms_om.snap_pgxc_workload_sql_count表格中。
WDR支持以兩種方式創(chuàng)建快照。一種是由后臺線程定期創(chuàng)建,時間間隔由wdr_snapshot_interval參數(shù)指定,默認為1小時創(chuàng)建一次。另一種是執(zhí)行create_wdr_snapshot系統(tǒng)函數(shù)實時創(chuàng)建,注意該函數(shù)需要管理員權(quán)限。
postgres=# select create_wdr_snapshot();
create_wdr_snapshot
------------------------------------------
WDR snapshot request has been submitted.
(1 row)
無論以何種方式創(chuàng)建,都需要將enable_wdr_snapshot參數(shù)設(shè)為on。
每次打完快照,dbms_om下snapshot相關(guān)的表格中都會增加若干行。可以通過表格dbms_om.snapshot查看目前已有快照的ID和創(chuàng)建起止時間。例如:
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開始創(chuàng)建,到2021-05-29 12:36:39創(chuàng)建完成。snapshot_id是每次快照的唯一標識。
WDR每次會對多個系統(tǒng)視圖打快照,單個視圖快照的起止時間可以通過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設(shè)置,范圍1~15天,默認是8天,也就是說默認8天前創(chuàng)建的快照會被刪除。如果想保留更久的快照數(shù)據(jù),需要用戶自己做轉(zhuǎn)儲。
3.?? 生成WDR報告
有了快照后便可以對性能監(jiān)測數(shù)據(jù)進行計算分析,生成報告供用戶查看。不同的分析角度和分析方式可以得到不同的報告。目前WDR支持對比前后兩次快照數(shù)據(jù),生成該時間段的性能監(jiān)測報告,簡稱“WDR報告”。
由于GaussDB(DWS)是分布式數(shù)據(jù)庫,由多個節(jié)點組成,節(jié)點又分為CN(Coordinator)和DN(Datanode),相應(yīng)地WDR報告也分為集群(cluster)和單節(jié)點(node)兩種范圍(scope)。兩種scope的報告內(nèi)容有所不同,前者由集群總體的性能數(shù)據(jù)組成,后者針對單個節(jié)點的性能表現(xiàn)進行分析計算。對于單節(jié)點scope的報告,CN和DN上的報告內(nèi)容也有所不同。報告scope在生成報告時由用戶指定。
GaussDB(DWS)提供了系統(tǒng)函數(shù)generate_wdr_report()用于創(chuàng)建WDR報告。生成報告前,首先需確定起止snapshot_id。通過查詢dbms_om.snapshot表格,針對感興趣的時間段,取得兩個時間點對應(yīng)的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)
通過以上查詢得到該時間段對應(yīng)的起止snapshot_id分別是2147和2152。
下一步,確定生成報告的類型。當前版本支持生成3種類型的WDR:摘要型(summary),詳細型(detail)和全部型(all)。摘要型只包括簡要分析計算結(jié)果,詳細型只包含詳細的指標數(shù)據(jù),全部型包括摘要型和詳細型的全部內(nèi)容。
最后,執(zhí)行g(shù)enerate_wdr_report()函數(shù)生成WDR報告。例如生成2021-02-21 03:00:00和2021-02-21 04:00:00之間的摘要型集群范圍WDR報告,可執(zhí)行:
postgres=# select generate_wdr_report(2147, 2152, 'summary', 'cluster', '');
generate_wdr_report
--------------------------------------------------------------------------
Report summary-cluster-2147-2152-20210301125740.html has been generated.
(1 row)
要生成節(jié)點cn_5001在2021-02-21 03:00:00和2021-02-21 04:00:00之間的全部型WDR報告,可執(zhí)行:
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節(jié)點的pg_log目錄下,可以用web瀏覽器打開:
圖 2 WDR報告
報告中的各部分默認為展開狀態(tài),如果雙擊標題,相關(guān)部分內(nèi)容會收起,標題前“-”變?yōu)椤?”,如圖3所示:
圖3收起后的WDR報告樣式
報告中各指標的含義可參考產(chǎn)品文檔。如何運用WDR報告分析和定位問題將在后續(xù)的文章中討論。
4.?? 注意事項
如前文所述,WDR特性依賴于各種數(shù)據(jù)庫內(nèi)核監(jiān)測功能提供數(shù)據(jù)。出于性能考慮,有些內(nèi)核監(jiān)測功能默認處于關(guān)閉狀態(tài),需要通過GUC參數(shù)開啟。如果不開啟,相應(yīng)性能視圖查詢的結(jié)果是空的,也無法生成正確的快照和WDR報告。如果要得到完整的WDR報告,需要將下表中的GUC參數(shù)設(shè)為最后一列中的值:
參數(shù)
監(jiān)測對象
默認值
應(yīng)取值
enable_resource_track
監(jiān)控特性總開關(guān),只有在該參數(shù)打開的情況下下面的參數(shù)才起作用。
on
on
enable_track_wait_event
等待事件時間統(tǒng)計
off
on
track_sql_count
SQL數(shù)量統(tǒng)計
off
on
instr_unique_sql_count
Unique SQL性能統(tǒng)計。參見https://bbs.huaweicloud.com/blogs/197299
0
>0,例如10000
track_io_timing
讀寫內(nèi)存緩沖區(qū)時間統(tǒng)計
off
on
enable_wdr_snapshot
WDR特性
off
on
想了解GuassDB(DWS)更多信息,歡迎微信搜索“GaussDB DWS”關(guān)注微信公眾號,和您分享最新最全的PB級數(shù)倉黑科技,后臺還可獲取眾多學習資料哦~
EI企業(yè)智能 Gauss AP 應(yīng)用性能調(diào)優(yōu) 數(shù)據(jù)倉庫服務(wù) GaussDB(DWS)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。