
# 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. [登录DAS管理控制台](https://console.huaweicloud.com/das/#/das/overview)。
2. 单击管理控制台左上角的![](https://support.huaweicloud.com/usermanual-das/zh-cn_image_0000001694653209.png)，选择区域和项目。
3. 在左侧的导航栏中单击"DBA智能运维 \> 实例列表"页签，进入DBA智能运维实例列表页面。 
   您也可以在产品概览页面，单击"进入DBA智能运维"，进入DBA智能运维实例列表页面。
   
   
4. 在实例列表页面右上角，按照引擎、实例名称或者实例IP筛选实例。
5. 选择目标实例，单击"详情"，进入"实例概览"页面。
6. 在"SQL"页签下选择"SQL限流"。
7. 在"SQL限流"页面，开启SQL限流开关。 
   图1开启SQL限流   
   ![](https://support.huaweicloud.com/usermanual-das/zh-cn_image_0000001706677805.png)
   
   
8. 单击提示框里的"查看版本范围"查看SQL限流对RDS for MySQL实例的版本限制。 
   图2查看版本范围   
   ![](https://support.huaweicloud.com/usermanual-das/zh-cn_image_0000001658438074.png)
   
   
9. 单击"新建SQL限流规则"，选择需要限流的SQL类型，设置关键字以及最大并发数。 
   图3设置页面   
   ![](https://support.huaweicloud.com/usermanual-das/zh-cn_image_0000001658279842.png)
   - 关键字：设置关键字时，您可以选择直接输入关键字，也可以选择将原始SQL拷贝到输入框中然后单击"生成关键字"，将原始SQL转换成关键字。
     ![](https://support.huaweicloud.com/usermanual-das/public_sys-resources/note_3.0-zh-cn.png)
     - 原始SQL转换成的关键字仅供参考，请谨慎使用。
     
     - SQL限流最大支持128个关键字。
      
     关键字规则举例：
     例如关键字是"select\~id\~name\~from\~t3\~where\~age\~\>\~27"，表示顺序匹配上述select、id、name、from等9个关键字，\~为关键字分隔符，若执行SQL命令中顺序包含这些关键字，就会受到并发规则限制。
     
   
   - 最大并发数：即满足同一规则的语句最大并发数，超过最大并发数会被拒绝执行。
     ![](https://support.huaweicloud.com/usermanual-das/public_sys-resources/note_3.0-zh-cn.png)
     在添加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"
     ```
     
   
   
   
   
10. 确认无误后，单击"确定"。 
    若不再需要此条SQL限流规则，可以在SQL限流列表页单击"删除"，删除SQL限流规则。
    
    
 
