自动SQL限流

当数据库存在突发流量导致SQL并发量急剧上升、部分SQL占用大量数据库资源、或者大量未创建索引的SQL被调用等问题影响正常业务时,需要限制问题SQL的并发度,保障大部分的业务正常运转。数据库自治服务DAS支持自动SQL限流,会自动提取SQL特征,通过关键词对问题SQL进行限流。

前提条件

实例为如下版本:

  • RDS MySQL 8.0 高可用系列

  • RDS MySQL 5.7 高可用系列

  • RDS MySQL 5.6 高可用系列

适用场景

自动限流主要应用在以下3种场景:

  • 流量问题:出现缓存穿透或异常调用情况,导致某类SQL并发量急剧上升。

  • 数据问题:存在大订单数据的账号,该账号的相关SQL占用大量数据库资源。

  • SQL问题:未创建索引的SQL被大量调用,影响正常业务。

功能限制

自动SQL限流的限流模式是通过关键词限流

  • 支持的SQL类型有SELECTUPDATEDELETEINSERT

  • 不支持限流INSERT...SELECT...类型的SQL语句。

  • RDS MySQL 8.0和PolarDB MySQL版 5.7、8.0支持限流INSERT类型的SQL语句。

功能说明

当自动限流规则创建后,应用端使用了同时包含所有关键词的SQL语句时:

  • RDS MySQL 5.6、RDS MySQL 5.7实例会返回1317错误(query execution was interrupted)。

  • RDS MySQL 8.0实例会让相关SQL会处于Concurrency control waiting状态,直至等待数量超过ccl_max_waiting_count参数的值(如果实例版本支持该参数)时,会返回错误码和错误描述(Concurrency control waiting count exceed max waiting count),错误码为ERROR 7534 (HY000)

    其中,若ccl_max_waiting_count参数值为默认值0时,所有被限流的SQL均会处于Concurrency control waiting状态,不返回错误。通过DAS限流时,若该参数值为0,DAS会将其值设置为DAS的默认值(当前默认值为10);若用户将其设置为大于0的其他值,DAS不再设置该参数,直接使用用户的设置。

操作步骤

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。

  2. 进入自治功能管理页面,可以通过以下两种方式进入:

    • 在左侧导航栏中,选择自治服务 > 一键诊断 > 自治中心。在自治中心页,单击自治功能开关

    • 在左侧导航栏中,选择自治服务 > 性能趋势。在性能趋势页,单击自治功能开关

  3. 自治功能管理 > 自治功能设置页签中,开启自治功能开关,并在优化和限流页签勾选自动限流,然后设置如下参数作为自动限流的触发条件。

  4. 2

    参数

    描述

    CPU利用率大于

    CPU利用率阈值,大于等于70%。

    活跃会话数量大于

    活跃会话数阈值。

    • 与CPU利用率关系为时,大于等于16。

    • 与CPU利用率关系为时,大于等于2。

    可限流时间段

    可以进行自动SQL限流的时间段。

    最大限流时间

    进行SQL限流的最大时长。

    如果最大限流时间设置为0,当数据库实例状态满足自动SQL限流触发阈值时,会触发限流,但是会立即失效。若选中同时KILL执行中的异常SQL,则异常SQL会被终止执行。

    持续时间大于

    持续时间阈值,CPU利用率与活跃会话数满足限流阈值的持续时间超过此参数值时,触发自动SQL限流。

    说明

    例如在可限流时间段内,自定义触发条件为当CPU使用率大于80%,同时活跃会话数大于64,且该现象持续时间超过2分钟时触发自动限流,同时自动开始跟踪:

    • 如果发现故障未消除,则自动回滚该限流操作。

    • 自动限流触发后,限流操作持续的时间不会超过最大限流时间。

    • 若选中同时KILL执行中的异常SQL,则即将被限流的异常SQL也会被终止执行,以便快速恢复实例性能。

  5. 单击确定

  6. (可选)配置告警模板进行告警订阅,以便及时了解数据库实例的自动SQL限流情况。

    系统会推荐告警模板并添加对应自治事件的告警规则,您可以依照系统提示进行配置。

    说明
    • 如果您已经为实例配置了告警模板,请依照系统提示,在告警模板添加对应自治事件的告警规则。

    • 如果您需要自行设置告警模板和告警规则,请参见配置告警模板配置告警规则

    1. 选择需要告警通知的告警联系组

      • 单击添加联系人,添加新的告警联系人。

      • 单击新增联系组,添加新的告警联系组。

      • 单击目标联系人后的修改移除,修改或删除已有联系人的信息。

      详细操作请参见管理告警联系人

    2. 确认关联资源

    3. 单击提交配置,并在弹出的对话框中确认告警配置。

查看自动SQL限流历史

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。

  2. 在左侧导航栏中,选择自治服务 > 一键诊断

  3. 单击会话管理页签。

  4. 实例会话页面:

    SQL限流

    • 单击SQL限流

      • 运行中页签,查看正在执行的限流规则。

      • 运行结束页签,选择需要查看的时间段,查看限流历史记录。

      SQL限流

    • 如果在配置自动SQL限流参数时,选中同时KILL执行中的异常SQL,则可以单击结束会话历史记录,查看结束会话的历史记录。

相关文档

  • 您可以优化SQL问题,以提高数据库性能、优化查询效率并减少资源消耗。

  • 当实例CPU利用率或者活跃会话数未达到阈值,无法触发自动限流时,您可以手动设置规则进行限流,详情请参见SQL限流

相关API

API

描述

UpdateAutoThrottleRulesAsync

采用异步方式,批量设置指定数据库实例的自动SQL限流配置参数。

GetAutoThrottleRules

获取指定数据库实例的自动SQL限流规则。

DisableAutoThrottleRules

批量关闭指定数据库实例的自动SQL限流功能。