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,則說明沒有表鎖,請前往優化寫入和更新性能進一步排查原因。