
# 技术原理
#### 核心机制
GaussDB启动时，会将SQL限流规则从系统表加载到内存中。SQL限流的流程如下：
1. 用户执行任意SQL语句时，GaussDB会根据该SQL语句去内存中匹配满足条件的限流规则。
2. 如果匹配到限流规则，将内存中该规则的dop字段值加1。dop字段用于记录限流规则的实时并发度。
3. 如果匹配到的限流规则的dop字段值大于或等于该规则允许的最大并发度，则进行限流：立即终止该SQL语句的执行，并报错提示用户。
4. 当限流生效，或限流未生效SQL语句正常执行完毕时，将匹配到的限流规则的dop字段值减1。
 
#### 接口介绍
SQL限流主要使用以下系统函数，具体描述请参见《参考》中"SQL参考 \> 函数和操作符 \> SQL限流函数"章节。
| 函数名                            | 函数说明                                                     |
|:---|:---|
| gs_add_workload_rule           | 创建一条SQL限流规则。需要具有sysadmin权限的用户才可执行。                       |
| gs_update_workload_rule        | 更新一条SQL限流规则，需要重新设置全部参数，不支持只指定部分参数。需要具有sysadmin权限的用户才可执行。 |
| gs_delete_workload_rule        | 删除一条SQL限流规则。需要具有sysadmin权限的用户才可执行。                       |
| gs_get_workload_rule_stat      | 查询SQL限流规则拦截SQL语句的次数。需要具有sysadmin权限的用户才可执行。               |
| gs_refresh_workload_rule_cache | 刷新限流规则缓存，使其与限流规则系统表保持一致。不支持在事务中执行。需要具有sysadmin权限的用户才可执行。 |
   
