
# SQL限流
针对新上业务不能及时发包优化的SQL和突发流量导致CPU等资源100%瓶颈的场景，SQL限流功能通过控制既定SQL规则的并发度协助业务侧及时流控，保证核心业务的稳定运行。
#### 使用须知
- SQL限流旨在解决用户某类突发的并发过高的SQL导致TaurusDB实例不稳定场景。
- SQL限流对TaurusDB的内核版本支持如下：
  - \>= 2.0.28.15且\< 2.0.28.40
  
  - \>= 2.0.29.1
  
  - \>= 2.0.54.240600支持"INSERT"类型限流规则
   

- 单个限流规则最大支持128个关键字，不能是单个反斜杠（\\） 或单个空字符（' '）。
- 关键字首尾的空格和特殊空白字符（如'\\t'、'\\r'、'\\n'）都会被忽略掉。
- 限流规则不能以"\~"结尾。
- 限流规则对关键字有顺序要求，只会按顺序匹配。a\~and\~b只会匹配xxx a\>1 and b\>2，而不会匹配xxx b\>2 and a\>1。
- 当SQL语句匹配多条限流规则时，优先生效最新添加的规则，之前的规则将不再生效。
- 添加SQL限流规则后，已经执行中的SQL不会被新添加的规则限制，只有新执行的SQL才会进行规则匹配。
- 若主节点和只读节点设置了不一样的限流规则，实例主节点和只读节点倒换之后，新的主节点规则和原来的只读节点一样，新的只读节点规则和原来的主节点一样。
- 单个SQL类型（SELECT、UPDATE、DELETE、INSERT）的所有规则和对应的并发数加起来长度不能超过4000bytes，单条规则长度不能超过1000bytes。
- 当限流规则数量较多时，SELECT/UPDATE/DELETE/INSERT语句会有小幅度的性能劣化。
- 限流SQL的匹配规则为前缀匹配。例如：限流规则为"SELECT\~COUNT\~t1", SQL语句"SELECT COUNT(\*) FROM t1"和"SELECT COUNT(\*) FROM t1 LIMIT 1"都会被拦截。
- 限流触发后业务侧会收到执行报错，报错信息为"ERROR 1317 (70100): Query execution was interrupted"。
- 以下场景不受SQL限流的限制：
  - 系统表不限制。
  
  - 不涉及数据查询的语句不限制，如select sleep(xxx)。
  
  - root账号在内核版本 \< 2.0.45.230900不受SQL限流限制。
  
  - 查询缓存（Query Cache）打开场景下，如果SQL已经缓存，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. 选择目标实例，单击"详情"，进入DBA智能运维总览页面。
6. 在"SQL"页签下选择"SQL限流"。
7. 在"SQL限流"页面，开启SQL限流开关。 
   图1开启SQL限流   
   ![](https://support.huaweicloud.com/usermanual-das/zh-cn_image_0000001706677805.png)
   
   
8. 单击"新建SQL限流规则"，选择需要限流的SQL类型，设置关键字以及最大并发数。 
   图2设置页面   
   ![](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转换成的关键字仅供参考，请谨慎使用。
     关键字规则举例：
     例如关键字是"SELECT\~a\>1", 含义为： SELECT以及a\>1为该并发控制所包含的两个关键字，\~为关键字间隔符，即若执行SQL命令包含SELECT与a\>1两个关键字视为命中此条并发控制规则。
     
   
   - 最大并发数：即满足同一规则的语句最大并发数，超过最大并发数会被拒绝执行。
   
   
   
   
9. 确认无误后，单击"确定"。 
   若不再需要此条SQL限流规则，可以在SQL限流列表页单击"删除"，删除SQL限流规则。
   
   
 
