跳到主要内容
版本:V1.0.0

CREATE CONCURRENT_LIMITING_RULE

描述

该语句用于创建限流规则,指定限流范围来限制特定 SQL 的并发度。

权限要求

执行 CREATE CONCURRENT_LIMITING_RULE 语句,需要当前用户拥有 CREATE 权限。有关 seekdb 权限的详细介绍,参见 seekdb 的权限分类

语法

CREATE CONCURRENT_LIMITING_RULE [ IF NOT EXISTS ] `ccl_rule_name`
ON `database`.`table`
TO '<usename>'@'ip'
FOR { ALL | UPDATE | SELECT | INSERT | DELETE }
filter_options:
[ FILTER BY KEYWORD('KEYWORD1', 'KEYWORD2',) ]
with_options:
WITH MAX_CONCURRENCY = value1 [per sql]

参数解释

参数描述
ccl_rule_name必选,表示限流规则的名称。
说明 为避免名称与 SQL 关键字冲突,建议在规则名称前后各加一个反引号(`)
database.table必选,表示数据库和数据表的名称,支持使用星号(*)表示任意匹配。
说明 为避免名称与 SQL 关键字冲突,建议在规则名称前后各加一个反引号(`)
<usename>@<host>必选,表示账号名称。其中,username 支持 * 表示所有用户,Host 部分支持用百分号(%)来表示任意匹配。
ALL|UPDATE | SELECT | INSERT| DELETE必选,表示 SQL 语句类型。当前支持ALLUPDATESELECTINSERTDELETE 类型。
说明 每条限流规则仅支持传入一种类型的 SQL 语句。
[ filter_options ]可选,表示限流关键字。
说明
  • 关键字之间将用通配符%连接,例如给定 3 个关键词'asdasd', 'c2 = 123', 'xxyyzz',其会被拼成 '%asdasd%c2 = 123%xxyyzz%',后续将按照这个字符串进行 SQL 文本的通配匹配。
  • 当关键字中有'_'时会被转义,如'table_t1'会被记录成'%table_t1%'
  • 限流关键字无个数限制,但限制拼凑后的字符串长度不能超过 OB_MAX_VARCHAR_LENGTH=1048576
with_options必选,用于控制限流的并发度, 并且指定限流统计粒度是规则级别的还是 Format SQLID 语句级别的。目前仅支持 MAX_CONCURRENCY 参数,表示匹配到该限流规则的 SQL 语句的最大并发度。

示例

执行如下命令进行关键词限流:

CREATE CONCURRENT_LIMITING_RULE IF NOT EXISTS  `sql1_keywords_ccl_rule`
ON *.* TO '%'@'%' FOR SELECT
FILTER BY KEYWORD('table1', 'table2', 'c1') WITH MAX_CONCURRENCY 100;