本文介紹PolarDB-X的長事務日志監控功能。
PolarDB-X中慢日志記錄了執行時間超過某個閾值的SQL語句,而長事務日志則記錄了執行時間超過某個閾值(默認為5秒)的事務。長事務的存在會導致連接、鎖資源被長期占用,影響數據庫的并發處理能力,因此PolarDB-X提供了長事務日志監控的能力。
前提條件
計算節點版本需要不低于5.4.17-16859297。關于如何查看實例版本,請參見查看和升級實例版本。
僅企業版的實例支持本功能。
查看長事務日志
在頁面左上角選擇目標實例所在地域。
在實例列表頁,單擊PolarDB-X 2.0頁簽。
找到目標實例,單擊實例ID。
在左側導航欄中,單擊診斷與優化 > 長事務日志。
名稱
描述
長事務日志趨勢
展示長事務日志數量和CPU使用率一起隨時間的變化趨勢,判斷兩者的關聯關系。
節點列表
展示指定時間范圍內,各個計算節點上產生的長事務日志的數量。單擊某個節點后,可以跳轉到針對該節點的長事務日志頁面。
長事務日志明細
各個長事務日志的明細數據。
長事務日志統計
長事務日志的統計數據。
長事務日志統計
根據事務模板對給定時間范圍內的長事務日志做統計。
事務模板
每個事務由一個SQL序列組成,每條SQL有其SQL模板,可以由SQL序列得到一個SQL模板序列。SQL序列因為查詢參數等變量,兩個序列不一定相同,而業務中往往存在代表某一類業務操作的SQL模板序列,在此我們稱之為事務模板。
示例
以一個轉賬事務的例子進行說明。
事務1:Mike向John轉賬1元。
begin;
update account set balance = balance + 1 where name = 'Mike';
update account set balance = balance - 1 where name = 'John';
commit;
事務2:Mike向John轉賬10元。
begin;
update account set balance = balance + 10 where name = 'Mike';
update account set balance = balance - 10 where name = 'John';
commit;
事務1和事務2的事務模板為:某人向某人轉賬某元。
update account set balance = balance + ? where name = ?;
update account set balance = balance - ? where name = ?;
如果給定時間范圍內,發生類似這樣的轉賬N次,則這個長事務模板的統計次數為N。
字段說明
名稱 | 說明 |
事務模板ID | 事務模板的HASH值。 |
庫名 | 數據庫名稱。 |
執行次數 | 總計執行次數。 |
平均執行時間 | 平均執行時間=執行時間總和/執行次數,單位:秒。 |
最大執行時間 | 最大執行時間=max(每個事務的執行時間),單位:秒。 |
平均空閑時間 | 平均空閑時間=總空閑時間/執行次數,單位:秒。 |
平均寫行數 | 平均寫行數=總寫行數/執行次數。 |
最大寫行數 | 最大寫行數=max(每個事務的寫行數)。 |
平均讀行數 | 平均讀行數=從CN上讀取行數總和/執行次數。 |
最大返回行 | 最大返回行數=max(每個事務的返回行)。 |
SQL數量 | 事務中包含的SQL數量,不包含begin、commit、rollback語句。 |
操作 | 可以查看長事務日志的樣本。 |
長事務日志明細
長事務日志明細查看針對單個節點查詢,需要在下拉框里選擇節點。
字段說明
名稱 | 說明 |
執行完成時間 | 事務的結束時間。 |
事務ID | 事務的編號。 |
狀態 | 事務結束時的狀態。 |
客戶端 | 客戶端的地址,格式為{ip}:{port}。 |
庫名 | 數據庫名稱。 |
用戶 | 數據庫用戶名稱。 |
執行耗時(秒) | 執行耗費的時間,單位:秒。 |
空閑時間 | 事務空閑的時間,單位:秒。 |
寫行數 | 寫入的行數。 |
讀行數 | 從DN讀取的行數。 |
SQL數量 | 發送給DN的SQL數量。 |
操作 | 查看SQL,跳轉到SQL洞察頁面查看該事務下的SQL列表。 說明 需要該實例已經預先打開SQL洞察。 |