慢查询是指执行时间过长或响应速度过慢的查询。如果实例中存在过多的慢查询,可能会影响业务的整体稳定性。针对这一问题,Lindorm宽表引擎提供了慢查询诊断功能,帮助您通过SQL定位、中止和回溯慢查询,从而保障业务的正常运行。
前提条件
要求Lindorm SQL为2.6.6以上版本。如何查看Lindorm SQL的版本,请参见SQL版本说明。
定位慢查询
Lindorm默认会通过UUID标识执行的语句,您可以通过SHOW PROCESSLIST
语句展示宽表引擎中正在执行的全部查询的相关信息。
SHOW PROCESSLIST
的SQL用法如下:
SHOW PROCESSLIST;
SHOW PROCESSLIST语句执行结果展示的视图内容,随着存储引擎的不同而略有区别,但其中的
ID
字段都是用来标识查询以及后续治理的重要字段。SHOW PROCESSLIST的执行结果中可能会包含部分ID不符合UUID、通过非SQL方式执行的查询。
SHOW PROCESSLIST
语法的更多说明,请参见SHOW PROCESSLIST。
终止慢查询
在定位到慢查询后,您可以通过KILL QUERY
语句终止指定的慢查询,以保证系统的稳定性。
KILL QUERY
的SQL用法如下:
KILL QUERY '581f9ab8-68af-4c93-b73a-eb99679ed192';
KILL QUERY
语法的更多说明,请参见KILL QUERY。
回溯慢查询
Lindorm提供了慢查询视图,可以对指定时间范围内满足条件的慢查询进行回溯,方便后续复盘和改进。
开启慢查询回溯功能。
ALTER SYSTEM SET SLOW_QUERY_RECORD_ENABLE = true;
ALTER SYSTEM的用法及SLOW_QUERY_RECORD_ENABLE参数的详细说明,请参见ALTER SYSTEM。
配置慢查询记录阈值。
设置慢查询阈值为10秒(10000毫秒),即只有运行时长超过10秒的查询才会被视为慢查询。
ALTER SYSTEM SET SLOW_QUERY_TIME_MS = 10000;
回溯慢查询。
您可以直接使用
SELECT
语句查看慢查询视图,追溯相关的慢查询记录。-- 查询前10个慢查询 SELECT * FROM lindorm._slow_query_ LIMIT 10; -- 查询时间戳1680152319000以后的慢查询个数 SELECT COUNT(sql_query_s) AS num FROM lindorm._slow_query_ WHERE query_start_time >= 1680152319000;
参数说明
查询视图的名称固定为
lindorm._slow_query_
,其中lindorm
为Lindorm内部Database,不支持修改。_slow_query_
为慢查询表名,不支持修改。返回结果集(查询视图)说明
字段名
说明
query_start_time
查询请求的发起时间。
query_id
查询请求ID。
sql_query_id
查询请求的SQL语句。如果没有SQL语句,显示为空。
duration_i
查询请求的执行时间。
status_s
查询请求最终是失败的或者成功的。
ip_s
发送查询请求的IP地址。如果不涉及发送查询请求的IP地址,显示为空。
server_s
查询请求执行的节点。
query_s
执行的内部查询请求语句。
重要慢查询视图中保存的慢查询记录默认只保存1小时。
频繁记录慢查询对实例的整体性能存在一定影响,因此在性能敏感的应用场景下,慢查询阈值不适宜设置得过小。