注意
該功能僅用于排查性能問題,不得將該功能和/*!hint({"source":{"traceid":"traceid_value"}})*/應用在生產SQL中。
前提條件
DRDS版本為2.8.8_P5后的版本(含新版本號5.1.20.0.0及以后的版本),才提供Session級別的Query Profiling功能。您可以通過udal show version();命令查看DRDS版本號。
快速入門
執行如下命令,開啟診斷模式
udal set trace=1;執行如下命令,標記關鍵業務查詢。
/*!hint({"source":{"traceid":"payment_analysis"}})*/ SELECT * FROM orders WHERE create_time > '2023-06-01';執行如下命令,獲取診斷報告。
udal show trace where traceid="payment_analysis";
主要參數說明
開啟或關閉Profile功能。
udal set trace = {0|1};參數說明如下:
1:開啟
0:關閉
設置保留歷史Proflie記錄最大條數。
udal set trace maxsize = N參數說明如下:
N:歷史記錄最大值。默認保留100條歷史語句的記錄,取值范圍為1-10000,超過最大值后,將覆蓋最早的歷史記錄。
注意
相關診斷報告保存在內存中,重啟節點等操作將會導致清空歷史數據。
查看Profile功能狀態。
udal show trace status;輸出字段說明如下:
Enabled:功能是否開啟。
MaxSize:保存歷史記錄最大值。
查看支持的歷史語句記錄。
udal show traces;查看執行語句Profile記錄。
udal show trace [where {id|traceid} = ?];參數說明如下:
不帶where,查看上一條語句的Profile記錄。
帶where:
id = ?:歷史記錄序號,可通過udal show traces獲取。traceid = ?:歷史記錄traceid標識,可通過udal show traces獲取。
設置執行語句的traceid。
/*!hint({"source":{"traceid":"traceid_value"}})*/select * from t1;參數說明如下:
source:系統標記關鍵字,不可修改。
traceid:系統標記關鍵字,不可修改。
traceid_value:traceid_value為traceid實際值,由用戶自行定義設置。
注意
traceid_value沒有格式和長度要求,如果用戶多條語句使用了同樣的traceid_value,使用該traceid_value查看Profile信息時,將顯示為最近執行的語句記錄。
診斷報告解析
字段說明
| 字段 | 說明 |
|---|---|
| Traceid | 語句標識,由用戶執行語句時,通過HINT指定。 |
| Operation | 執行階段名稱。具體階段說明,請參見本文檔的Operation字段說明。 |
| Start(ms) | SQL當前操作階段在本Query Profiling中的相對啟動時間,第一階段從0開始,單位為毫秒。 |
| End(ms) | 當前操作階段結束時間。 |
| Duration(ms) | 當前操作階段執行耗時。 |
| Shardname | SQL具體執行分片名。 |
| Rwnode(write) | SQL執行節點名和節點的讀寫屬性:
|
| Rows | 顯示SELECT查詢返回的行數和INSERT、UPDATE、DELETE影響的行數。 如果所在行是在某個分片執行的記錄,則顯示為對應分片返回的行數和影響行數。 |
| SQL | 具體執行SQL。 如果所在行是某個分片執行的記錄,則顯示具體在對應分片執行的語句,因為分布式數據庫存在SQL解析并轉發情況,實際SQL與用戶輸入不一致是正常情況。 |
Operation字段說明
| 階段 | 核心作用 | 可診斷的典型問題 |
|---|---|---|
| SQL Parse | SQL語法解析 | 如果語法解析階段耗時過長,檢查執行節點CPU資源情況,是否為服務器資源緊張 |
| PreCheck | 執行前檢查,包括事務條件校驗、HINT解析語句重分布處理、用戶管理語句攔截 | 如果該階段后無后續階段,則展示的語句可能為用戶管理語句 |
| Index Proess | 全局索引語句攔截 | 展示的語句為全局索引處理語句 |
| Execute Sequence | 序列語句攔截 | 展示的語句為序列處理語句 |
| Encrypt Column | 加密改寫所序列并重分布 | 如果消耗時間過長,檢查加密數據和服務器加密計算資源 |
| Route | 路由計算 | 路由計算消耗理論較少,且存在緩存 |
| PreExecute | 執行前處理,包括權限檢查,其他校驗 | 執行前檢查理論值較小 |
| OLAP Execute | AP語句執行攔截 | 語句被AP執行路徑攔截 |
| Wait Lock | 內部鎖等待 | 等待鎖時間,集群可能正在進行補償事務 |
| Get Connection | 從分片節點獲取連接 | 從數據節點獲取物理連接時間,如果時間異常,可檢查連接池狀態和后端數據節點最大連接數狀態 |
| Execute SQL | 分片節點執行語句 | 可對比不同分片執行語句時間,判斷后端節點執行或者網絡是否有異常 |
| Fetch Data | 從分片節點接收數據 | 可對比不同節點返回或影響的數據行數,判斷數據是否傾斜,可對比返回數據耗時,判斷網絡是否波動 |
| Merge | 跨分片結果集聚合 | Merge階段會占用較多內存,需進行限制或監控內存使用情況 |
| Write To Client | 最終結果集返回客戶端 | 寫入網絡緩存 |
| OverAll | 語句總體執行時間 | 對比總耗時和各階段耗時,判斷是否存在未監控的階段消耗了大量時間 |