慢SQL

更新时间:
复制 MD 格式

PolarDB MySQL默认将执行时间超过1秒的SQL语句定义为慢SQL,并在控制台提供SQL分析功能。您可以查看慢日志的趋势和统计信息。此外,系统还提供相关SQL的优化建议和诊断分析,便于您进行深入分析与优化。

前置检查(可选)

为确保您能正常查看慢SQL日志,请核实您的账户是否已授权AliyunHDMFullAccess权限。若需进行更精细的权限管理,您可以使用自定义策略来授权RAM用户,以便对PolarDB进行灵活的管控设置。

注意事项

慢日志的最大长度为16 KB,超过该长度的部分将被截断。

查看慢SQL

  1. 登录PolarDB控制台,在左侧导航栏单击集群列表,选择集群所在地域,并单击目标集群ID进入集群详情页。

  2. 在左侧导航栏中,选择诊断与优化 > 慢 SQL

  3. 慢 SQL页面中分为以下三种功能:

    慢日志分析

    慢日志分析页签,选择需要查看的时间段,查看该时间段内慢日志趋势事件分布慢日志统计慢日志明细

    • 您可以在慢日志趋势图中选择某个时间点,查看该时间点的慢日志统计慢日志明细

      说明

      如果慢日志语句内容过长,没有完整展示,您可以将鼠标指针放置在对应的慢日志语句上,系统将以弹框的形式展示完整的慢日志语句。

    • 事件分布区域:可以查询到指定时间范围内的慢日志事件,单击后可查询事件详情。

    • 您可以在节点ID下拉框区域,查看每个节点的慢请求数量。

    • 慢日志统计慢日志明细页签中单击image,可以将慢日志信息保存到本地查看。

    • 单击image,可携带当前已选择和输入的参数,跳转至OpenApi控制台,进行API调试。

    • 慢日志统计区域:

      • 在列表上侧,可选择过滤条件,对数据进行筛选,不同的数据库引擎可筛选条件不同。

      • 单击目标SQL模板Query ID列的数据ID,可查看包含用户分布、客户端分布和指标趋势的相关性及明细列表。

      • 单击目标SQL模板操作列的优化,在弹出的SQL诊断优化对话框中,查看SQL诊断结果。

        若您采纳诊断建议,单击页面右上角的复制,并将优化后的SQL粘贴到数据库客户端或DMS上执行,若不采纳诊断建议,可直接单击取消结束诊断。

        说明

        DAS会根据SQL的复杂程度、对应表的数据量、数据库负载等进行SQL诊断,诊断建议的返回时间可能会超过20秒。完成诊断后,SQL诊断引擎会给出诊断结果、优化建议和预期优化收益,您可以根据诊断结果确认是否采纳建议。

      • 单击目标SQL模板操作列的限流,在SQL限流页面配置限流参数,对目标SQL进行限流。详细操作请参见SQL限流

      • 对于PolarDB MySQL数据库实例,单击目标SQL模板操作列的IMCI,查看列存索引(IMCI)的相关文档。

        说明
        • PolarDB MySQL数据库实例未购买列存索引节点,且慢日志的最大执行时间超过20秒,最大扫描行超过20万行时,显示IMCI按钮。

        • 对于大数据量复杂查询,推荐使用列存索引(IMCI)提升查询性能。

    • 慢日志明细区域,单击目标SQL操作列的优化限流,也可对目标SQL进行SQL诊断优化SQL限流

    自动SQL优化建议

    自动SQL优化建议页面,选择需要查看的时间段。

    开启自动SQL优化:自动识别问题SQL,生成索引优化建议,并在不引发锁表的情况下自动创建索引。

    说明

    您可以根据业务查看详情请参见自动SQL优化

    查询治理

    查询治理页,查看查询治理结果。

    • 查询治理结果概览:查看系统打标分类后的结果数据。

      说明

      只统计开启DAS企业版实例的执行失败SQL次数

    • 查询治理趋势:查看所选时间范围内查询治理结果的变化趋势。

    • TOP数据:查看实例红榜实例黑榜

      • 实例黑榜:查看数据库实例慢SQL执行次数。

      • 实例红榜:查看数据库实例慢SQL执行次数变化量,负数表示慢SQL执行次数减少量(优化效果好),正数表示慢SQL执行次数增加量。

      DAS推荐您重点关注推荐优化SQL的红黑榜。

    • 待优化SQL:您可以设置筛选条件,过滤出需要治理的SQL语句。

      说明

      支持通过DB名称、SQL关键字、规则标签和数据库用户名进行筛选,四者之间是逻辑与的关系。

      • 多个DB名称之间使用英文逗号(,)分隔,逻辑关系为或。

      • 多个SQL关键字之间使用空格分隔,逻辑关系为与。

      • 多个数据库用户名之间使用英文逗号(,)分隔,逻辑关系为或。

      • 规则标签支持多选,多个规则之间逻辑关系为或。

      • 单击目标SQL样本操作列的建议,查看详细的治理建议。

      • 单击目标SQL样本操作列的打标,对此SQL进行手动打标。标签的具体含义请参见支持手动打标的SQL标签。

        您也可以勾选需要手动打标的SQL,进行批量打标。

      • 单击目标SQL样本操作列的样本,查看此SQL的慢日志样本详情。

      • 单击目标SQL样本操作列的趋势,查看此SQL的慢日志分析详情。详细的慢日志分析介绍及操作请参见慢日志

      您可以根据需要导出和分享待优化的SQL数据,具体操作请参见慢日志

    • 失败SQL:您可以设置筛选条件,过滤出需要查看的SQL语句。

      说明
      • 只统计开启DAS企业版实例的失败SQL

      • 支持通过DB名称和SQL关键字进行筛选,两者是逻辑与的关系。

        • 多个DB名称之间使用英文逗号(,)分隔,逻辑关系为或。

        • 多个SQL关键字之间使用空格分隔,逻辑关系为与。

      单击目标SQL样本操作列的样本,查看此SQL的样本详情。

调整慢SQL阈值

您可以前往PolarDB控制台配置与管理 > 参数配置页面中,通过设置long_query_time参数来调整慢SQL定义的阈值。

参数

说明

long_query_time

将所有执行时间超过参数值的查询记录到慢查询日志中。

取值范围:0.03-31536000,默认值:1,单位秒。

常见问题

为什么会出现慢日志记录的SQL执行完成时间与SQL语句的实际执行时间不同?

通常情况下是执行SQL语句修改了时区。慢日志记录的SQL执行时间的时区,存在会话级别、数据库级别和系统级别。慢日志时间设置逻辑为:当数据库存在时区时,以数据库的时区为准,否则以系统时区为准。当通过SQL语句修改了会话级别的时区时,可能导致慢日志记录的时区无法正常转换。

如何发现慢SQL?

您可以通过如下两种方式发现慢SQL:

  • 直接在控制台上查询慢SQL,详情请参见SQL

  • 连接数据库集群后执行show processlist,找出执行时间过长的SQL,关于如何连接数据库集群,请参见如何连接数据库

扫描行数(rows_examined)是什么?扫描行数远大于返回行数怎么办?

扫描行数(rows_examined)表示 SQL 语句执行过程中实际读取的行数,由数据库内核在执行查询时自动统计,无需额外配置。

如果某条慢 SQL 的扫描行数远大于返回行数,说明查询读取了大量无用数据,通常由以下原因导致:

  • 查询条件缺少合适的索引,导致全表扫描或索引区分度不足。

  • 表的统计信息过期,导致优化器选择了非最优的执行计划。

可以按以下步骤优化:

  1. 使用 EXPLAIN 查看该 SQL 的执行计划,确认是否走了预期的索引。

  2. 执行 ANALYZE TABLE 重新收集表的统计信息,帮助优化器选择更优的执行计划。

  3. 若执行计划仍不理想,根据查询条件补充或调整索引。

本文中自动SQL优化建议功能可自动识别问题 SQL 并生成索引优化建议,可用于辅助判断索引是否合理。

使用 SDK 调用慢日志相关 API 时报 InvalidVersion 错误,如何处理?

通过 SDK(例如 Python 脚本)调用 DescribeSlowLogRecords 等慢日志相关 API 时,如果返回 InvalidVersion 错误,请先检查请求参数中的 Version 取值是否正确。

建议先在阿里云 OpenAPI 门户的调试工具中验证参数是否正确、链路是否连通,确认无误后再调整代码中的配置。

为什么相同的 SQL 或按主键更新的 SQL,执行耗时偶尔会大幅波动(例如从毫秒级变为秒级)?

可以按以下顺序排查:

  1. 检查统计信息:执行 ANALYZE TABLE 重新收集相关表的统计信息,避免统计信息过期导致优化器选择错误的索引。

  2. 对比执行计划:分别获取耗时正常与耗时异常时的执行计划,确认波动是否由索引选择不同导致。

  3. 排查客户端与运行环境:如果数据库侧无异常且慢日志中没有对应记录(即执行时间未超过本文调整慢SQL阈值中的 long_query_time),说明耗时可能并非消耗在数据库执行阶段,需检查客户端服务器是否存在网络延迟、资源争用或连接池耗尽(例如 HikariCP 获取连接超时)等问题。

  4. 临时缓解:对于连接池耗尽的场景,可临时增大连接池的 maximumPoolSize 参数以缓解等待;但根本解决仍需优先优化耗时占比较高的慢 SQL,降低连接占用时间。

最佳实践

PolarDB MySQLCPU使用率高

PolarDB代理配置与流量异常

PolarDB死锁

相关API

API

说明

查询PolarDB集群的慢日志统计信息

查看PolarDB MySQL集群的慢日志统计信息。

查看慢日志明细

查看PolarDB MySQL集群的慢日志明细。

查询集群SQL采集功能

查看PolarDB MySQL集群的SQL采集功能(例如审计日志、SQL洞察等)是否开启。

开启或关闭集群的SQL采集功能

开启或关闭PolarDB MySQL集群的SQL采集功能(例如审计日志、SQL洞察等)。