一、支持版本
适用于 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 规则和普通规则该字段为空。 |
注意:说明:
三、示例
# 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