Query洞察旨在結合慢Query日誌和表統計資訊日誌系統資料表hg_table_info,快速擷取當前Query的執行資訊,例如Query進程的資源消耗、Query所涉及的表的中繼資料,以及Query對應的執行計畫(plan)。同時可以通過Query洞察快速判斷當前Query是否產生了DDL衝突,以及表鎖情況,輔助業務進一步排查問題和處理問題。
前提條件
存在已登入執行個體,請參見登入執行個體。
進入Query洞察
您可從HoloWeb的診斷與最佳化頁面直接進入Query洞察,也可通過HoloWeb的SQL編輯器或歷史慢 Query跳轉至Query洞察頁面。
在頂部功能表列左側,選擇相應的地區。
單擊前往HoloWeb,進入HoloWeb開發頁面。
進入Query洞察頁面。
直接進入Query洞察
在頂部選擇診斷與最佳化,單擊左側的元倉分析 > Query洞察,進入Query洞察頁面。
跳轉Query洞察
在HoloWeb中,SQL編輯器和歷史慢 Query也可以跳轉至Query洞察。跳轉方式如下:
SQL編輯器:如果SQL在HoloWeb的SQL編輯器中運行,則執行時間大於1 s、且含有Query ID的SQL可以直接跳轉至Query洞察。
歷史慢 Query:在Query列表中,單擊目標SQL操作列的表徵圖可以跳轉至Query洞察。
在Query洞察頁面,您可以查看Query中繼資料、Table中繼資料,及進行Plan可視化和表鎖分析。
Query中繼資料
Query中繼資料來源於Hologres慢Query日誌,預設只採集執行時間大於100 ms的DML和所有的DDL(查詢時僅能展示執行時間大於1 s的DDL),且慢Query日誌需要一定的許可權才能查詢,詳情請參見慢Query日誌查看與分析。您需要在Query中繼資料頁簽選擇對應的執行個體名和Query ID,單擊查詢即可展示Query中繼資料。
基本資料
展示Query所屬的執行個體ID、DB以及執行個體版本。
Query資訊
展示Query的基本資料,採集自慢Query日誌,包括執行的使用者、執行狀態、所用的執行引擎等。
資源消耗
展示Query運行過程中的資源消耗情況,採集自慢Query日誌,包括掃描函數、CPU消耗等。
其他資訊
Query的額外擴充資訊,採集自慢Query日誌,包括Client IP等。
SQL
當前的Query具體內容,可以對Query進行格式化(更加直觀友好的展示Query)以及複製Query。
Query Detail
Query如果是傳參數形式執行,Query Detail將會採集出具體的參數值。可以選擇將參數合并到SQL裡。
執行計畫
當前Query的Plan,採集自慢Query日誌的Plan欄位,需要注意的是,僅執行時間大於10 s的Query才會採集Plan。可以使用可視化功能跳轉至Plan可視化,通過圖形化的能力分析Plan,以便進一步對Query調優。Plan詳情請參見EXPLAIN和EXPLAIN ANALYZE。
Statistics
當前Query的運行資訊,採集自慢Query日誌的Statistics欄位。會展示每個運算元的詳細消耗資訊,包括掃描的行數、運算元耗時等。可以根據Statistics進一步分析運算元的消耗,以便進一步對Query調優。
讀寫表資訊
展示當前Query涉及的表(讀或寫),可以單擊:
表中繼資料:跳轉至表中繼資料頁面,查看當前表的相關中繼資料。但需要注意表的中繼資料採集自hg_table_info表,預設T+1日更新資料,如果表是當天建立的,會查詢不到。
表鎖分析:跳轉至表鎖分析頁面,可以查看當前Query是否有鎖,僅會檢測DML相關的鎖。例如走Fixed Plan的SQL查詢變慢,可以使用表鎖分析查看錶是否同時存在HQE(Hologres自研執行引擎)的DML,導致Query耗時增加。
DDL衝突分析
展示當前Query執行的前後1min時間內,涉及到的表是否產生了DDL操作,用於輔助判斷是否存在DDL衝突,導致Query失敗報錯:
Query is canceled
。錯誤資訊
如果是失敗的Query,將顯示失敗原因的詳細資料。同時HoloWeb中Query洞察上線SQL智能診斷功能,會將新增的失敗原因和解決方案自動返回錯誤資訊中,以方便您更好地處理錯誤SQL。更多常見的失敗SQL和解決方案可以參考Hologres SQL語句的常見問題。
Table中繼資料
Table中繼資料來源於Hologres的表統計資訊日誌系統資料表hg_table_info,每天淩晨採集彙報一次,T-1更新,因此當天的Table中繼資料只能在第二天查詢。
使用Table中繼資料可以直接從Query中繼資料的表資訊跳轉,即可查看錶對應的中繼資料。同時也可以手動輸入表的相關資訊(所在執行個體名、資料庫、Schema)以及表的中繼資料收集時間,即可查看錶對應的中繼資料資訊。
基本資料
包含表名、是否分區,以及分區對應的資訊。
表中繼資料資訊
包含表的建立時間,收集時間,儲存量等資訊。
表屬性資訊
展示當前表設定的索引,包括PK、Distribution Key等。
表結構資訊
展示當前表的結構,包含欄位及欄位類型、是否可空、有無Default值。
Plan可視化
Plan可視化用於將慢Query日誌中的plan
欄位進行可視化展示,但需要注意,僅運行耗時超過10 s的Query才會採集plan資訊。plan詳情請參見EXPLAIN和EXPLAIN ANALYZE。
表鎖分析
表鎖分析可以查詢當前SQL是否產生HQE的DML(INSERT、UPDATE、DELETE)操作,用於輔助診斷SDK的SQL因為鎖而導致執行慢的問題。如果同一時間內,一個表同時存在SDK或HQE的Query和HQE的DML Query,則說明有鎖。建議盡量避免同一時間執行兩種操作。
使用Query洞察排查常見問題
報錯:relation with OID xxx does not exist
排查方法:通常是由於Query涉及到的表發生了TRUNCATE或DROP等操作,導致表的oid發生了變化。可以使用Query洞察查看報錯的Query ID,確認同一時間是否存在DDL鎖。
報錯:query is canceled
排查方法:當前Query執行的同一時間,涉及到的表執行了TRUNCATE或DROP等DDL操作,導致報錯。可以將報錯的Query ID輸入到Query洞察中進行查詢,在Query中繼資料頁簽的DDL衝突分析地區可以看到表的DDL操作。
SDK的SQL延遲高
排查方法:如果SDK的SQL延遲較高,可以通過Query洞察查看是否同一時間表有HQE的SQL搶鎖,如下樣本,一個SDK的SQL耗時18s,在讀寫表資訊地區單擊表鎖分析。可查看到同一時間存在HQE的DML。HQE的DML是表鎖,會導致SDK的Query等鎖,從而出現耗時增加。若是不存在HQE的DML,則說明沒有表鎖,請前往最佳化寫入和更新效能進一步排查原因。