慢SQL

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

前置检查(可选)

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

注意事项

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

查看慢SQL

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

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

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

    慢日志分析

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

    说明

    选择时间范围时,查询结束时间需晚于查询开始时间,且查询开始时间和查询结束时间的间隔不能超过7天,您可以查询最近一个月内的慢日志信息。

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

      说明

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

    • 事件分布区域:

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

      image

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

    • 单击image,可以将慢日志信息保存到本地查看。

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

    • 慢日志统计区域:

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

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

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

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

        说明

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

      • 单击目标SQL模板操作列的限流,在SQL限流页面配置限流参数,对目标SQ进行限流。详细操作请参见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,关于如何连接数据库集群,请参见连接数据库

最佳实践

PolarDB MySQLCPU使用率高

PolarDB代理配置与流量异常

PolarDB死锁

相关API

API

说明

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

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

DescribeSlowLogRecords - 查看慢日志明细

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

DescribeDBClusterAuditLogCollector - 查询集群SQL采集功能

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

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

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