摘要:目前TopSQL功能被用戶廣泛使用,是性能定位、劣化分析、審計回溯等重要的基石,為用戶提供覆蓋內存、耗時、IO、網絡、空間等多方面的監(jiān)控能力。
本文分享自華為云社區(qū)《GaussDB(DWS)監(jiān)控工具指南(一)作業(yè)級監(jiān)控TopSQL》,作者:幕后小黑爪 。
監(jiān)控系統(tǒng)是智能化管理和自動化運維的基石,可以為資源規(guī)劃,故障排查,性能優(yōu)化提供至關重要的數據支持。GaussDB(DWS)作為企業(yè)級數倉,為用戶提供了一整套覆蓋實例級、用戶級、作業(yè)級的資源監(jiān)控能力,其中,作業(yè)級監(jiān)控(下文統(tǒng)稱為TopSQL)主要是對運行作業(yè)的監(jiān)控,包括了實時運行作業(yè)的相關信息,歷史運行作業(yè)的相關信息等。它收集的數據來源于數據庫內部,為用戶提供了實時監(jiān)控數據庫的能力。
(資料圖片僅供參考)
目前TopSQL功能被用戶廣泛使用,是性能定位、劣化分析、審計回溯等重要的基石,為用戶提供覆蓋內存、耗時、IO、網絡、空間等多方面的監(jiān)控能力。
本文以數倉813版本作為基線,對TopSQL進行介紹。
對于用戶而言,數據庫是個黑盒,輸入SQL語句,輸出預期結果。在此過程中,用戶關心兩點:
關于第一個問題,用戶需要關注下SQL語句寫的是否合理。而對于第二個問題,普通用戶可以通過explain等手段分析作業(yè)的執(zhí)行計劃,然而企業(yè)用戶的SQL作業(yè)耗時久,影響較大,重跑代價較高,無法額外通過explain performance等手段進行分析,此時TopSQL可以幫助用戶打開數據庫黑盒,查看作業(yè)執(zhí)行的實時情況和歷史情況,便于用戶分析數據庫的情況。
TopSQL功能主要通過視圖進行承載,如下表所示,本文以query級別的視圖為例進行說明。
使用TopSQL功能需要sysadmin權限。此外,用戶需先檢查下TopSQL功能是否開啟,涉及TopSQL的數據庫GUC參數包括:
是否開啟監(jiān)控功能,實時TopSQL的總開關,關閉之后實時TopSQL將不再進行記錄,更不會在歷史TopSQL中出現。
設置對當前會話的語句進行資源監(jiān)控的最小執(zhí)行代價。
設置當前會話的資源監(jiān)控的等級,默認為query級別。
設置實時TopSQL中記錄的語句執(zhí)行結束后進行歷史信息轉存的最小執(zhí)行時間。當執(zhí)行完成的作業(yè),其執(zhí)行時間不小于此參數值時,作業(yè)信息會從實時視圖(以STATISTICS為后綴的視圖)轉存到相應的歷史視圖
設置是否開啟資源監(jiān)控記錄歸檔功能。開啟時,對于執(zhí)行結束的記錄,會分別被歸檔到相應的INFO視圖,CN和DN都需要設置上。
設置歷史TopSQL中GS_WLM_SESSION_INFO和GS_WLM_OPERATOR_INFO表中數據的保存時間,單位為天。
參數正確設置后,TopSQL會記錄用戶的SQL語句執(zhí)行過程中的相關信息,用戶可以使用TopSQL的視圖篩選出執(zhí)行時間較長的作業(yè),專注于慢SQL的分析。
TopSQL功能分為實時TopSQL和歷史TopSQL,以query級別為例,當需要查看正在運行的作業(yè)時,用戶可查看實時TopSQL視圖GS_WLM_SESSION_STATISTICS和PGXC_WLM_SESSION_STATISTICS,若需要對已經執(zhí)行完成的作業(yè)進行分析,可查詢歷史TopSQL視圖GS_WLM_SESSION_ HISTORY和PGXC_WLM_SESSION_HISTORY。其中GS_開頭的可以查詢當前CN節(jié)點上正在執(zhí)行的作業(yè)信息,PGXC_開頭的可查詢所有CN節(jié)點上正在執(zhí)行的作業(yè)信息。
實時TopSQL視圖為用戶記錄了作業(yè)運行時的相關信息,比如作業(yè)下發(fā)來源、阻塞時間、執(zhí)行時長、開始時間、內存消耗、作業(yè)下盤量、作業(yè)IO、網絡、語句類型、語句的執(zhí)行計劃等信息。用戶可先通過resource_pool、nodename、username、query等信息定位到自己需要分析的語句,再通過作業(yè)運行信息定位問題。又或者用戶可通過對查詢進行篩選,篩選出當前占用資源較多的作業(yè)。
歷史TopSQL視圖記錄了作業(yè)運行結束時的資源使用情況(包括內存、下盤、CPU時間等)和運行狀態(tài)信息(包括報錯、終止、異常等)以及性能告警信息。用戶可通過對歷史語句運行數據的分析,篩選出執(zhí)行時長較大的語句,看語句執(zhí)行計劃是否有優(yōu)化的空間,是否需要對表做一些analyze或者vacuum之類的操作。又比如對于內存報錯的情況,可分析內存占用高的語句是否合理,從執(zhí)行計劃上分析是否有優(yōu)化空間。
文末附TopSQL實踐:常見問題現象及對應原因。
TopSQL的數據來源于數據庫內核,當語句執(zhí)行時,TopSQL會實時記錄語句執(zhí)行的相關信息。實時TopSQL數據會保存在內存的臨時表中,當語句執(zhí)行結束后,數據會轉存到對應實體表GS_WLM_SESSION_INFO中,在實際使用中,由于下發(fā)作業(yè)繁多,歷史TopSQL記錄的作業(yè)數也不斷增長,這樣會導致INFO表中的數據量逐漸龐大,為了確保數倉整體性能不受影響,支持通過TOPSQL_RETENTION_TIME來設置INFO表中數據的保存時間(單位為天)。當數據存留時長超過這個時限,會對實體表GS_WLM_SESSION_INFO進行數據老化刪除處理。
圖 3-1 TopSQL數據流通圖
如圖3-1所示,各項GUC參數決定了TopSQL生成的記錄信息,具體的參數說明詳見第2節(jié)使用TopSQL前的檢驗。
對于企業(yè)用戶而言,性能問題是Top級問題,對于TopSQL功能,我們進行了性能壓測,在4TB的場景下,進行TPCC基準性能測試,進行了2000的并發(fā)壓測,TPMC下降了約有2%,屬于可接受的范圍。
語句屬性列說明:
語句的執(zhí)行信息屬性列,斜體代表可更換前綴/后綴式的指標,類似前綴后綴有(min_,max_,total_,average_,_skew_percent)
TopSQL由于自身限制,存在一些記錄異常的情況,此處對8.1.3版本的TopSQL語句記錄情況進行說明:
TopSQL功能是GaussDB(DWS)支持性能問題定位、語句劣化分析、審計回溯等重要功能的基石。在此基礎上,內核也拓展出了異常規(guī)則等一些高階用法,在日常使用中,用戶也對TopSQL提出了更高的要求,比如記錄子語句、記錄語句類型、提升算子級別語句監(jiān)控準確性等諸多建議。為此,GaussDB(DWS)團隊會在此基礎上繼續(xù)演進,更好的服務用戶,提升用戶滿意度。
總結一下:
值得注意的是,發(fā)生資源爭搶時,可能會出現并發(fā)癥,即CPU、IO搶占,作業(yè)排隊現象都會發(fā)生,針對并發(fā)癥問題,可以逐步分析解決,比如:
第一步,調整作業(yè)執(zhí)行順序,減少并發(fā)作業(yè)數量,減少阻塞時間;
第二步,定位出同時段執(zhí)行的典型計算密集型、存儲密集型作業(yè),先移動到其它時間段執(zhí)行,減少對本作業(yè)的影響;
第三步,在無其他作業(yè)明顯干預的情況下,做進一步分析,
點擊關注,第一時間了解華為云新鮮技術~
標簽: