更新时间:2024-08-28 GMT+08:00

SQL限流

针对新上业务不能及时发包优化的SQL和突发流量导致CPU等资源100%瓶颈的场景,SQL限流功能通过控制既定SQL规则的并发度协助业务侧及时流控,保证核心业务的稳定运行。

使用须知

  • 主实例SQL限流支持的RDS for MySQL内核版本:5.6.50.3、5.7.31.4、8.0.25.1及以上。
  • 只读实例SQL限流支持的RDS for MySQL内核版本:5.6.51.6、5.7.37.1、8.0.25.1及以上。
  • 只读实例可以单独设置SQL限流规则,支持的RDS for MySQL内核版本:5.7.38-221000及以上,5.6和8.0暂不支持。
  • 当SQL语句匹配多条限流规则时,优先生效最新添加的规则,之前的规则将不再生效。
  • 限流规则对关键字有顺序要求,会按照关键字设置顺序进行匹配。如关键字设置为a~and~b,“xxx a>1 and b>2”语句符合关键字顺序会被限流,“xxx b>2 and a>1”语句因不符合关键字顺序而不会被限流。
  • 若复制时延过大,只读实例新增或删除限流规则时,不会立刻生效。
  • 实例如果作为基于binlog的第三方复制关系的源端,在复制过程中对实例添加或者删除SQL限流规则会导致第三方复制关系中断。
  • SQL限流最大支持128个关键字。
  • SQL限流功能当前只支持SELECT、UPDATE、DELETE、INSERT关键字。
  • 单个关键字首尾的空白字符会被忽略,包括' '、'\n'、'\r'、'\t'等。
  • 规则关键字过多、规则数量过多,都会对性能产生影响,建议仅保留必要的限流规则。
  • 限流规则存在条数上限,为100条。
  • 查询缓存打开的场景下,若SQL已经被缓存,则限流不生效。
  • 以下场景不受SQL限流的限制:
    • 系统表不限制。
    • 不涉及数据查询的语句不限制,如“select sleep(xxx)”语句。
    • root用户不被限制的版本:5.6所有版本,5.7版本中的5.7.41.230700及以下,8.0版本中的8.0.28.230701及以下。
    • 暂不支持对存储过程、触发器、函数内的SQL做限流设置。

操作步骤

  1. 登录管理控制台
  2. 单击管理控制台左上角的,选择区域和项目。
  3. 单击页面左上角的,选择“数据库 > 数据管理服务 DAS”,进入数据管理服务页面。
  4. 在左侧的导航栏中单击DBA智能运维 > 实例列表页签,进入DBA智能运维实例列表页面。

    您也可以在产品概览页面,单击“进入DBA智能运维”,进入DBA智能运维实例列表页面。

  5. 在实例列表页面右上角,按照引擎、实例名称或者实例IP筛选实例。

    图1 筛选实例

  6. 选择目标实例,单击“详情”,进入“实例概览”页面。
  7. “SQL”页签下选择“SQL限流”
  8. “SQL限流”页面,开启SQL限流开关。

    图2 开启SQL限流

  9. 单击提示框里的“查看版本范围”查看SQL限流对RDS for MySQL实例的版本限制。

    图3 查看版本范围

  10. 单击“新建SQL限流规则”,选择需要限流的SQL类型,设置关键字以及最大并发数。

    图4 设置页面

    • 关键字:设置关键字时,您可以选择直接输入关键字,也可以选择将原始SQL拷贝到输入框中然后单击“生成关键字”,将原始SQL转换成关键字。
      • 原始SQL转换成的关键字仅供参考,请谨慎使用。
      • SQL限流最大支持128个关键字。

      关键字规则举例:

      例如关键字是“select~id~name~from~t3~where~age~>~27”,表示顺序匹配上述select、id、name、from等9个关键字,~为关键字分隔符,若执行SQL命令中顺序包含这些关键字,就会受到并发规则限制。

    • 最大并发数:即满足同一规则的语句最大并发数,超过最大并发数会被拒绝执行。

      在添加SQL限流规则之前,已经开始执行的SQL语句,不会被记入并发数。

      当添加上述规则,并且设定最大并发度为0,执行以下SQL命令会被限流:

      "select id, name from t3 where age > 27"
      "select id, name, age from t3 where age > 27"
      "select id, name from t3 where age > 5 and id < 27"

      而执行以下SQL命令,不会被限流:

      "select name, age from t3 where age > 27"

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

    若不再需要此条SQL限流规则,可以在SQL限流列表页单击“删除”,删除SQL限流规则。