# 新建SQL限流规则
#### 操作场景
SQL限流是指设置原始SQL语句或者Query ID，当所匹配的SQL语句超过设置的最大并发数时，数据库实例会拒绝执行此SQL。从而解决SQL并发数过高导致的实例不稳定问题。使用华为云自研插件rds_pg_sql_ccl可以实现RDS for PostgreSQL的SQL限流能力。
主要的使用场景有：
- 业务量突增：通过限制某类SQL的执行保障实例的稳定性。
- 保障核心任务：通过限制其他SQL的执行从而降低资源的消耗保障核心任务的顺利完成。
 
#### 版本限制
SQL限流支持的版本如下：
- RDS for PostgreSQL 15及以上的所有版本。
- RDS for PostgreSQL 14版本，对应的小版本为14.8及以上版本。
- RDS for PostgreSQL 13版本，对应的小版本为13.11及以上版本。
- RDS for PostgreSQL 12版本，对应的小版本为12.15及以上版本。
- RDS for PostgreSQL 11版本，对应的小版本为11.20及以上版本。
 
#### 功能限制
- 系统用户（rdsAdmin、rdsMetric、rdsRepl、rdsBackup）的SQL语句不受限流规则影响。
- 使用SQL限流功能需要安装rds_pg_sql_ccl插件，该插件是RDS for PostgreSQL自研的内核限流插件，详见[通过界面安装和卸载插件](https://support.huaweicloud.com/usermanual-rds-pg/rds_09_0070.html)。
 
#### 查看推荐规则
先查看推荐规则，按照用户选择的推荐因子分析当前执行的会话，推荐Top会话对应的SQL限流规则，再参考推荐规则[新建限流规则]。
1. [登录RDS管理控制台](https://console.huaweicloud.com/rds/#/rds/management/list)。
2. 单击管理控制台左上角的![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002606863935.png)，选择区域。
3. 在"实例管理"页面，选择目标实例，单击实例名称，进入实例的"概览"页签。
4. 在左侧导航栏选择"智能DBA助手 \> SQL分析与优化"。
5. 选择"SQL限流"。
6. 单击"推荐规则"，筛选关键字相同的会话，按照"全部"、"平均执行时间"、"最大执行时间"、"执行次数"查询TOP SQL的推荐规则。 
   图1推荐规则   
   ![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002715901521.png "点击放大")
   按查询规则取前1,000个会话，仅选取其中的SELECT类型会话，每个会话提取关键字，关键字相同的会话分为一组，按以下策略推荐：
   - 全部：分别以每组内会话平均执行耗时、最大执行耗时、执行次数降序排序，各取Top N的组推荐。
   
   - 平均执行时间：以每组内会话平均执行时间降序排序，取Top N的组推荐。
   
   - 最大执行时间：以每组内会话最大执行时间降序排序，取Top N的组推荐。
   
   - 执行次数：以每组内会话执行次数降序排序，取Top N的组推荐。
   
   
   
   
 
 #### 新建限流规则
1. [登录RDS管理控制台](https://console.huaweicloud.com/rds/#/rds/management/list)。
2. 单击管理控制台左上角的![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002606863935.png)，选择区域。
3. 在"实例管理"页面，选择目标实例，单击实例名称，进入实例的"概览"页签。
4. 在左侧导航栏选择"智能DBA助手"下的"SQL分析与优化"。
5. 选择"SQL限流"。
6. 打开![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002213663204.png)，开启SQL限流开关。
   
   ![](https://support.huaweicloud.com/usermanual-rds-pg/public_sys-resources/note_3.0-zh-cn.png)
   SQL限流开关打开后，限流规则才能生效。
   
   
7. 单击"新建SQL限流规则"，配置SQL限流规则参数，参数说明请参见[表1]。
   
   ![](https://support.huaweicloud.com/usermanual-rds-pg/public_sys-resources/note_3.0-zh-cn.png)
   请根据业务和资源使用的实际情况合理配置SQL限流规则，否则可能会影响业务。
   图2新建SQL限流规则（SQL语句生成关键字）   
   ![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002716061395.png "点击放大")
   图3新建SQL限流规则（直接输入关键字）   
   ![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002686221884.png "点击放大")
    表1SQL限流规则参数 
   | **参数** **项** | **说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   |:---|:---|
   | 限流方式            | - 原始SQL语句 通过SQL语句创建的限流规则无法限制绑定变量的SQL语句。   - Query ID 同一个数据库中，不能创建重复（QUERY ID相同）的限流规则；不同的数据库中，可以创建重复的限流规则。   - 关键字限流：例如关键字是"select\~a"，含义为：select以及a为该并发控制所包含的两个关键字，\~为关键字间隔符，也就是说如果执行SQL语句中包含select与a两个关键字，那么命中此条并发控制规则。   |
   | 最大并发数           | 输入最大并发数，满足同一规则的语句最大并发数，超过最大并发数会被拒绝执行。 取值范围为0\~50000，为0表示不限制最大并发数。                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   | 最大等待时间          | 被限流SQL的最大等待时间。限流规则达到并发上限后，该类型的新SQL执行超过设置的最大等待时间，将会执行失败。 - 取值范围为0\~1000000000，单位为秒。  - 默认值为0，表示某条限流规则达到并发上限后，后续到来的符合规则的SQL语句将会直接报错。                                                                                                                                                                                                                                                         |
      
   
   
8. 确认无误后，单击"确定"。
9. SQL限流规则创建后不会立刻生效，单击"启用"使规则生效。 
   数据库实例重启后，所有规则失效，需要重新启用才会继续生效。
   
   
 
#### 后续操作
如果不需要此条SQL限流规则，在操作列可以停用或删除规则。
- 单击"停用"，即可停用限流规则。
- 单击"删除"，即可删除限流规则，删除启用状态下的限流规则，该规则不会继续生效。
图4删除SQL限流   
![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002248783033.png "点击放大")
#### 常见问题
- [CPU使用率高问题定位及处理方法](https://support.huaweicloud.com/usermanual-rds-pg/rds_pg_10_0000.html)
- [内存使用率高问题定位及处理方法](https://support.huaweicloud.com/usermanual-rds-pg/rds_pg_08_00006.html)

- [已执行3s或5s SQL数问题定位及处理方法](https://support.huaweicloud.com/usermanual-rds-pg/rds_pg_08_00013.html)
 
