sys.concurrency_control 系统表用于持久化存储 CCL(Concurrency Control List,并发控制列表)规则。通过 dbms_admin.ccl_add_rule、ccl_add_normal_rule、ccl_add_digest_rule、ccl_add_digest_text_rule 添加的规则,以及通过 ccl_del_rule 删除的规则,均会写入或移除此表。实例重启后,CCL 规则从此表自动回载到内存缓存。支持版本
适用于 TDSQL Boundless V21.6.4.0 及以上版本。
字段说明
sys.concurrency_control 表共包含17个字段,字段定义如下:字段名 | 类型 | 说明 |
Id | BIGINT | 规则 ID,自增主键,唯一标识一条并发控制规则。 |
Type | ENUM | 规则类型,取值 SELECT、UPDATE、INSERT、DELETE、REPLACE、DIGEST。 |
Schema_name | VARCHAR(64) | 规则作用的库名。普通规则需与 Table_name 同时为空或同时非空;digest 规则中为空表示全局匹配,非空表示仅在该库内生效。 |
Table_name | VARCHAR(64) | 规则作用的表名。普通规则需与 Schema_name 同时为空或同时非空;digest 规则中此字段必须为空。 |
Concurrency_count | BIGINT | 匹配该规则的 SQL 允许同时执行的最大并发数。并发已满时按 Wait_timeout 与 Max_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 语句(
INSERT、UPDATE、DELETE)直接修改此表中的规则,修改后需手动在所有 SQLEngine 节点执行 CALL dbms_admin.ccl_flush_rule(); 使变更生效到内存缓存。推荐使用 dbms_admin 包下的存储过程管理规则,避免直接操作表导致节点间 CCL 规则不一致。规则添加、删除操作成功后,会自动向集群内其他 SQLEngine 节点广播刷新,使规则在所有节点生效。若某节点未收到广播(例如当时不可达),可手动连接该节点并执行
CALL dbms_admin.ccl_flush_rule(); 同步。调用 CCL 存储过程不需要额外权限;直接通过 DML 修改
sys.concurrency_control 表需要对该表具备相应的写权限。系统变量
ccl_enabled 默认为 OFF。OFF 时业务 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 affectedtdsql [test]> CALL dbms_admin.ccl_flush_rule();Query OK, 0 rows affected# 4. 直接清空全部规则(谨慎操作)tdsql [test]> DELETE FROM sys.concurrency_control;Query OK, 2 rows affectedtdsql [test]> CALL dbms_admin.ccl_flush_rule();Query OK, 0 rows affected