帮你快速理解、总结文档立即下载

CONCURRENCY_CONTROL

最近更新时间:2026-08-21 16:29:31
我的收藏
sys.concurrency_control 系统表用于持久化存储 CCL(Concurrency Control List,并发控制列表)规则。通过 dbms_admin.ccl_add_ruleccl_add_normal_ruleccl_add_digest_ruleccl_add_digest_text_rule 添加的规则,以及通过 ccl_del_rule 删除的规则,均会写入或移除此表。实例重启后,CCL 规则从此表自动回载到内存缓存。

支持版本

适用于 TDSQL Boundless V21.6.4.0 及以上版本。

字段说明

sys.concurrency_control 表共包含17个字段,字段定义如下:
字段名
类型
说明
Id
BIGINT
规则 ID,自增主键,唯一标识一条并发控制规则。
Type
ENUM
规则类型,取值 SELECTUPDATEINSERTDELETEREPLACEDIGEST
Schema_name
VARCHAR(64)
规则作用的库名。普通规则需与 Table_name 同时为空或同时非空;digest 规则中为空表示全局匹配,非空表示仅在该库内生效。
Table_name
VARCHAR(64)
规则作用的表名。普通规则需与 Schema_name 同时为空或同时非空;digest 规则中此字段必须为空。
Concurrency_count
BIGINT
匹配该规则的 SQL 允许同时执行的最大并发数。并发已满时按 Wait_timeoutMax_waiting_count 决定等待或拒绝。
Wait_timeout
BIGINT UNSIGNED
并发已满时新请求的等待超时时间(秒)。0 表示不等待、直接拒绝。取值范围 0 - 31536000
Max_waiting_count
BIGINT UNSIGNED
等待队列最大长度。达到该值后新请求被直接拒绝。0 表示不允许等待。取值范围 0 - 9223372036854775807
Descriptor
TEXT
规则描述符。普通规则为关键词,多个关键词以 ; 分隔;digest 规则为 64 位十六进制 digest 哈希值。
State
ENUM
规则状态。Y 表示启用,N 表示停用。停用的规则不参与匹配。
Ordered
ENUM
关键词是否有序匹配。Y 表示按顺序匹配,N 表示无序匹配。
Case_sensitive
ENUM
关键词是否区分大小写。Y 表示区分,N 表示不区分。
Host
VARCHAR(255)
匹配的客户端 IP,为空表示不限制 IP。仅 ccl_add_rule 添加的规则包含此维度。
User_name
TEXT
匹配的数据库用户名,为空表示不限制用户。仅 ccl_add_rule 添加的规则包含此维度。
Comment
TEXT
规则备注,便于标识和管理。
Applied_node
TEXT
规则应用的节点信息。当前版本为预留字段,通过存储过程添加的规则该字段为空。
Extra
TEXT
扩展信息字段,预留供后续功能使用。
Template
TEXT
ccl_add_digest_text_rule 添加的 digest 规则对应的标准化 SQL 模板,便于人工识别规则对应的 SQL 形态。通过 ccl_add_digest_rule 添加的 digest 规则和普通规则该字段为空。
说明:
该表位于 sys 系统库下,可通过 SELECT * FROM sys.concurrency_control; 直接查询规则配置(不含运行时统计)。如需查看运行时统计(如匹配次数、运行中数量),请使用 CALL dbms_admin.ccl_show_rule();
可通过 DML 语句(INSERTUPDATEDELETE)直接修改此表中的规则,修改后需手动在所有 SQLEngine 节点执行 CALL dbms_admin.ccl_flush_rule(); 使变更生效到内存缓存。推荐使用 dbms_admin 包下的存储过程管理规则,避免直接操作表导致节点间 CCL 规则不一致。
规则添加、删除操作成功后,会自动向集群内其他 SQLEngine 节点广播刷新,使规则在所有节点生效。若某节点未收到广播(例如当时不可达),可手动连接该节点并执行 CALL dbms_admin.ccl_flush_rule(); 同步。
调用 CCL 存储过程不需要额外权限;直接通过 DML 修改 sys.concurrency_control 表需要对该表具备相应的写权限。
系统变量 ccl_enabled 默认为 OFFOFF 时业务 SQL 绕过 CCL 规则匹配,但规则的管理操作(添加、删除、刷新、查看)不受影响;执行 SET PERSIST ccl_enabled = ON 后才会真正对业务 SQL 限流。

示例

# 1. 查询当前所有 CCL 规则
tdsql [test]> SELECT Id, Type, Schema_name, Table_name, Concurrency_count, Descriptor, Comment
-> FROM sys.concurrency_control;
+----+----------+-------------+------------+---------------------+-------------+-----------------------+
| Id | Type | Schema_name | Table_name | Concurrency_count | Descriptor | Comment |
+----+----------+-------------+------------+---------------------+-------------+-----------------------+
| 1 | SELECT | ccl_test | t_ccl | 0 | LIMIT | refuse select LIMIT |
| 2 | DIGEST | | | 0 | 5f2b6e8c.. | global digest |
+----+----------+-------------+------------+---------------------+-------------+-----------------------+
2 rows in set

# 2. 按备注查询规则 ID(用于删除)
tdsql [test]> SELECT Id FROM sys.concurrency_control WHERE Comment = 'refuse select LIMIT';
+----+
| Id |
+----+
| 1 |
+----+
1 row in set

# 3. 直接修改表中的规则后,需调用 ccl_flush_rule 使变更生效到内存
tdsql [test]> UPDATE sys.concurrency_control SET Concurrency_count = 5 WHERE Id = 1;
Query OK, 1 row affected

tdsql [test]> CALL dbms_admin.ccl_flush_rule();
Query OK, 0 rows affected

# 4. 直接清空全部规则(谨慎操作)
tdsql [test]> DELETE FROM sys.concurrency_control;
Query OK, 2 rows affected

tdsql [test]> CALL dbms_admin.ccl_flush_rule();
Query OK, 0 rows affected