慢查詢?cè)\斷
慢查詢是指執(zhí)行時(shí)間過長或響應(yīng)速度過慢的查詢。如果實(shí)例中存在過多的慢查詢,可能會(huì)影響業(yè)務(wù)的整體穩(wěn)定性。針對(duì)這一問題,Lindorm寬表引擎提供了慢查詢?cè)\斷功能,幫助您通過SQL定位、中止和回溯慢查詢,從而保障業(yè)務(wù)的正常運(yùn)行。
前提條件
要求Lindorm SQL為2.6.6以上版本。如何查看Lindorm SQL的版本,請(qǐng)參見SQL版本說明。
定位慢查詢
Lindorm默認(rèn)會(huì)通過UUID標(biāo)識(shí)執(zhí)行的語句,您可以通過SHOW PROCESSLIST
語句展示寬表引擎中正在執(zhí)行的全部查詢的相關(guān)信息。
SHOW PROCESSLIST
的SQL用法如下:
SHOW PROCESSLIST;
SHOW PROCESSLIST語句執(zhí)行結(jié)果展示的視圖內(nèi)容,隨著存儲(chǔ)引擎的不同而略有區(qū)別,但其中的
ID
字段都是用來標(biāo)識(shí)查詢以及后續(xù)治理的重要字段。SHOW PROCESSLIST的執(zhí)行結(jié)果中可能會(huì)包含部分ID不符合UUID、通過非SQL方式執(zhí)行的查詢。
SHOW PROCESSLIST
語法的更多說明,請(qǐng)參見SHOW PROCESSLIST。
終止慢查詢
在定位到慢查詢后,您可以通過KILL QUERY
語句終止指定的慢查詢,以保證系統(tǒng)的穩(wěn)定性。
KILL QUERY
的SQL用法如下:
KILL QUERY '581f9ab8-68af-4c93-b73a-eb99679ed192';
KILL QUERY
語法的更多說明,請(qǐng)參見KILL QUERY。
回溯慢查詢
Lindorm提供了慢查詢視圖,可以對(duì)指定時(shí)間范圍內(nèi)滿足條件的慢查詢進(jìn)行回溯,方便后續(xù)復(fù)盤和改進(jìn)。
開啟慢查詢回溯功能。
ALTER SYSTEM SET SLOW_QUERY_RECORD_ENABLE = true;
ALTER SYSTEM的用法及SLOW_QUERY_RECORD_ENABLE參數(shù)的詳細(xì)說明,請(qǐng)參見ALTER SYSTEM。
配置慢查詢記錄閾值。
設(shè)置慢查詢閾值為10秒(10000毫秒),即只有運(yùn)行時(shí)長超過10秒的查詢才會(huì)被視為慢查詢。
ALTER SYSTEM SET SLOW_QUERY_TIME_MS = 10000;
回溯慢查詢。
您可以直接使用
SELECT
語句查看慢查詢視圖,追溯相關(guān)的慢查詢記錄。-- 查詢前10個(gè)慢查詢 SELECT * FROM lindorm._slow_query_ LIMIT 10; -- 查詢時(shí)間戳1680152319000以后的慢查詢個(gè)數(shù) SELECT COUNT(sql_query_s) AS num FROM lindorm._slow_query_ WHERE query_start_time >= 1680152319000;
參數(shù)說明
查詢視圖的名稱固定為
lindorm._slow_query_
,其中lindorm
為Lindorm內(nèi)部Database,不支持修改。_slow_query_
為慢查詢表名,不支持修改。返回結(jié)果集(查詢視圖)說明
字段名
說明
query_start_time
查詢請(qǐng)求的發(fā)起時(shí)間。
query_id
查詢請(qǐng)求ID。
sql_query_id
查詢請(qǐng)求的SQL語句。如果沒有SQL語句,顯示為空。
duration_i
查詢請(qǐng)求的執(zhí)行時(shí)間。
status_s
查詢請(qǐng)求最終是失敗的或者成功的。
ip_s
發(fā)送查詢請(qǐng)求的IP地址。如果不涉及發(fā)送查詢請(qǐng)求的IP地址,顯示為空。
server_s
查詢請(qǐng)求執(zhí)行的節(jié)點(diǎn)。
query_s
執(zhí)行的內(nèi)部查詢請(qǐng)求語句。
重要慢查詢視圖中保存的慢查詢記錄默認(rèn)只保存1小時(shí)。
頻繁記錄慢查詢對(duì)實(shí)例的整體性能存在一定影響,因此在性能敏感的應(yīng)用場(chǎng)景下,慢查詢閾值不適宜設(shè)置得過小。