慢查询诊断

慢查询是指执行时间过长或响应速度过慢的查询。如果实例中存在过多的慢查询,可能会影响业务的整体稳定性。针对这一问题,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提供了慢查询视图,可以对指定时间范围内满足条件的慢查询进行回溯,方便后续复盘和改进。

  1. 开启慢查询回溯功能。

    ALTER SYSTEM SET SLOW_QUERY_RECORD_ENABLE = true;

    ALTER SYSTEM的用法及SLOW_QUERY_RECORD_ENABLE参数的详细说明,请参见ALTER SYSTEM

  2. 配置慢查询记录阈值

    设置慢查询阈值为10秒(10000毫秒),即只有运行时长超过10秒的查询才会被视为慢查询。

    ALTER SYSTEM SET SLOW_QUERY_TIME_MS = 10000;
  3. 回溯慢查询。

    您可以直接使用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小时。

    • 频繁记录慢查询对实例的整体性能存在一定影响,因此在性能敏感的应用场景下,慢查询阈值不适宜设置得过小。