查询治理

数据库自治服务DAS(Database Autonomy Service)通过离线数据分析技术,在每天凌晨1点将全部实例在昨天产生的慢SQL进行统计分析和自动打标,帮助您对慢SQL进行自动分类和划分治理优先级,同时提供治理建议和数据导出功能。

前提条件

  • 目标数据库实例为:

    • RDS MySQL

    • MyBase MySQL

  • 当前支持中国内地、中国香港和新加坡地域的数据库实例。

    说明

    从2023年04月01日起,查询治理功能支持中国香港和新加坡地域的数据库实例。

限制约束

  • 由于是T+1离线分析,如您当天对SQL打标了无需优化,第二天才能看到推荐优化SQL数值的变化。

  • DAS预定义的SQL标签暂不支持关闭。

  • 每个数据库实例只统计分析执行次数前200的慢SQL,即每个数据库实例的慢SQL模板数最大为200。

名词解释

名词

解释

推荐优化SQL

从总体的慢SQL中,排除无需优化SQL,剩下的就是推荐优化SQL

无需优化SQL

包含DAS自动标记为DAS忽略的SQL,以及用户人工标记为无需优化的SQL。

DAS忽略

DAS自动打标无需优化,例如以showcreatexacommitrollbackselect sleepexplain开头的SQL。

操作步骤

  1. 登录DAS控制台

  2. 在左侧导航栏中,单击实例监控

  3. 找到目标实例,单击实例ID,进入目标实例详情页。

  4. 在左侧导航栏单击请求分析 > 慢日志 > 查询治理

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

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

      说明

      只统计开启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语句。

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

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

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

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

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

最佳实践

  • 使用标签区分是否需要优化SQL:

    治理核心逻辑是将总体慢SQL分为无需优化的慢SQL和推荐优化SQL两类,您可根据如下SQL标签,快速筛选并按优先级治理。

    ID

    标签名称

    级别

    推荐重点关注

    描述

    NEW_SQL

    新增慢SQL

    警告

    ✔️

    相比最近一周新增的慢SQL。

    DAS_IGNORE

    DAS忽略

    提示

    DAS自动打标无需优化,例如以showcreatexacommitrollbackselect sleepexplain开头的SQL。

    FUZZY_LIKE

    LIKE模糊查询

    提示

    like模糊匹配,无法利用索引。

    HAS_EXPR

    包含表达式

    提示

    包含表达式计算,参与计算的列无法使用索引。

    LARGE_IN_LIST

    大列表查询

    提示

    in包含超过200个元素,很可能是程序生成,字段无法使用索引。

    SELECT_STAR

    SELECT全列查询

    提示

    select指定业务需要的字段,避免返回多余字段造成性能下降和资源浪费。

    INDEX_ADVISOR

    索引建议

    提示

    ✔️

    新建索引建议,加速SQL执行 。

    COMPLEX_JOIN

    复杂JOIN

    提示

    超过三个表禁止join。需要join的字段,数据类型必须绝对一致;多表关联查询时,保证被关联的字段需要有索引。

    CROSS_DB

    跨库查询

    提示

    跨实例迁移库表的时候,会产生跨库查询不可用的风险。

    SUBQUERY

    包含子查询

    提示

    包含子查询,可以考虑采用join改写效率更高。

    DEEP_PAGING

    深度翻页

    警告

    使用limit的深度翻页,建议采用join改写。

    WITHOUT_PREDICATE

    无谓词

    警告

    ✔️

    包含无谓词的语句,请检查是否涉及全表扫描。

    NULL_COMPARE

    NULL匹配错误

    警告

    使用ISNULL()来判断是否为NULL值,因为NULL与任何值的直接比较都为NULL

    COUNT_NOT_STAR

    COUNT不规范

    警告

    请使用COUNT(*)替代count(列名)或count(常量),count(*)是SQL92定义的标准统计行数的语法,跟数据库无关,跟NULL和非NULL无关。count(列名)不会统计此列为NULL值的行。

    LARGE_ROWS_EXAMINED

    扫描行多

    提示

    平均扫描行超过50000,扫描行数越大,越消耗数据库资源,不仅本身的SQL慢,还可能影响其他SQL执行。

    说明

    请考虑增加更好的SQL过滤条件。

    LARGE_ROWS_SENT

    返回行多

    提示

    平均返回行超过5000,一次返回太多数据,请考虑减少返回行数。

    NO_ADVICE

    无建议

    提示

    暂无分析建议。

    PERIOD_SQL

    周期性

    提示

    每天固定时间执行。

    DAS推荐您重点关注推荐优化SQL,您可配合下表,打标无需优化的SQL,持续降低推荐优化SQL数量,如下SQL标签支持用户手动打标。

    ID

    标签名称

    级别

    描述

    USER_IGNORE

    无需优化

    提示

    打标无需优化,第二天就不会被统计到推荐优化SQL中。

    DAS_IMPORTANT

    重要SQL

    提示

    打标重要SQL。

    DAS_NOT_IMPORTANT

    不重要SQL

    提示

    打标不重要SQL。

    DAS_IN_PLAN

    排期优化

    提示

    打标排期优化。

  • 数据导出:

    • 您可通过新建导出任务,将当前看到的SQL明细的全部数据导出下载。

      说明

      导出任务的数据可保存3天,您可用于随时下载。

    • 您可以通过设置不同的筛选条件(不同的实例、不同的规则等),新建不同的下载任务,安排不同的负责人分别优化。

    • 您也可以选中多个SQL记录,导出任务将只导出被选中的SQL。

  • 数据分享:

    为方便您快速把经过条件筛选后的慢SQL分享给对应的负责人,DAS提供两种分享功能:

    • 您可以选中多个SQL记录,点击批量分享按钮,系统生成短链接,有DAS控制台权限的用户点击访问后,将只会看到您选中的SQL记录。

    • 您也可以单击导出旁边的分享按钮,系统生成短链接,有DAS控制台权限的用户单击访问后,将会看到您当前看到的全部明细数据(无需您再次设置筛选条件)。