更新时间:2024-10-14 GMT+08:00

新建SQL限流规则

操作场景

SQL限流是指通过设置语句类型、关键字等匹配SQL语句,当所匹配的SQL语句超过设置的最大并发数时,数据库实例会拒绝执行此SQL。从而解决SQL并发数过高导致的实例不稳定问题。

可能引起SQL并发过高的场景有:

  • 业务流量突增:出现缓存穿透、异常调用等情况,导致某类SQL并发数急剧上升。
  • 慢查询堆积:未创建索引的SQL被大量调用,出现大量慢SQL,影响正常业务。

版本约束限制

SQL限流功能对于不同实例类型的版本约束请参见表1

表1 SQL限流版本约束

大版本

主实例小版本

只读实例小版本

只读实例单独设置规则

5.6

≥ 5.6.50.3

≥ 5.6.51.6

暂不支持

5.7

≥ 5.7.31.4

≥ 5.7.37.1

≥ 5.7.38.221000

8.0

≥ 8.0.25.1

≥ 8.0.25.1

暂不支持

表2中的RDS for MySQL实例,使用SQL限流功能对root用户的请求不生效。

大于等于5.7.43.231000和8.0.28.231000版本的实例,root用户会被限流,如果需要对root用户不限流,请联系客服申请。

表2 root用户请求不受SQL限流限制的版本

大版本

主实例小版本

5.6

≥ 5.6.51.4

5.7

5.7.33.1 ≤ 版本 < 5.7.43.231000

8.0

8.0.25.1 ≤ 版本 < 8.0.28.231000

建议RDS for MySQL小版本升级内核到最新版本,SQL限流体验更佳,请参见升级RDS for MySQL内核小版本

功能限制

  • 最多可配置100条限流规则。
  • SQL限流功能当前仅支持SELECT、UPDATE、DELETE、INSERT关键字。
  • MySQL5.7(>= 5.7.44.240100)或MySQL8.0(>= 8.0.32.240100)支持“INSERT”类型限流规则,如需使用该功能,请联系客服申请。
  • 当SQL语句匹配多条限流规则时,优先生效最新添加的规则,之前的规则不再生效。
  • 在添加SQL限流规则之前,已经开始执行的SQL语句,不会被记入并发数。
  • 若复制时延过大,针对只读实例,新增或删除限流规则不会立刻生效。
  • 系统表不受SQL限流的限制。
  • 不涉及数据查询的SQL不受限流的限制,例如:select sleep(***);
  • 暂不支持对存储过程、触发器、函数内的SQL做限流设置。
  • 您可以在DAS执行如下SQL查看SQL限流规则的执行情况:select * from information_schema.rds_sql_filter_info;
  • 当设置过多限流规则时,对性能有一定影响,使用后请删除多余的规则。
  • SQL限流规则不支持约束系统库。

操作步骤

  1. 登录管理控制台
  2. 单击管理控制台左上角的,选择区域。
  3. 单击页面左上角的,选择“数据库 > 云数据库 RDS”,进入RDS信息页面。
  4. 在“实例管理”页面,选择目标实例,单击实例名称,进入实例的“概览”页签。
  5. 在左侧导航栏选择“智能DBA助手 > 历史诊断”。
  6. 选择“全量SQL > SQL限流”。
  7. 打开,开启SQL限流开关。

    SQL限流开关打开后,限流规则才能生效。

  8. 单击“新建SQL限流规则”,配置SQL限流规则参数,参数说明请参见表3

    图1 新建SQL限流规则(直接输入关键字)
    图2 新建SQL限流规则(SQL语句生成关键字)
    表3 SQL限流规则参数

    参数

    说明

    SQL类型

    支持选择四种类型:SELECT、UPDATE、DELETE、INSERT。

    关键字

    最多支持128个关键字,不区分大小写。支持以下两种方式输入关键字。

    • 直接输入关键字:例如关键字是“select~a”,含义为:select以及a为该并发控制所包含的两个关键字,~为关键字间隔符,也就是说如果执行SQL语句中包含select与a两个关键字,那么命中此条并发控制规则。
    • 原始SQL生成关键字:输入原始SQL再单击“生成关键字”,生成的关键字仅供参考,请谨慎使用。

    关键字根据顺序匹配SQL语句。例如:a~and~b只会匹配*** a>1 and b>2,而不会匹配*** b>2 and a>1。

    单个关键字首尾的空白字符会被忽略,包括' '、'\n'、'\r'、'\t'等。

    最大并发数

    输入最大并发数,与关键字匹配的SQL语句如果超过最大并发数会被拒绝执行。取值范围为0~1000000000。

    kill满足规则的已有会话

    勾选此选项后,会结束所有受SQL限流控制的账户所产生的会话。

    root用户不受SQL限流限制的版本详见表2

  9. 确认无误后,单击“确定”

后续操作

如果不需要此条SQL限流规则,在SQL限流列表的操作列单击“删除”“确定”

图3 删除SQL限流