mysql 下执行 DDLGEOMETRY/GIS) 、数据类型和索引tdsql_auto_increment_batch_size 控制,默认值为100。tdsql_auto_increment_batch_size 为1,可保证自增值全局唯一且递增。t1,其中自增列 id 与 f1 组合成复合主键:CREATE TABLE `t1` (`id` int NOT NULL AUTO_INCREMENT,`f1` int NOT NULL,`f2` int DEFAULT NULL,PRIMARY KEY (`id`,`f1`)) DEFAULT CHARSET=utf8mb4;
id = 1 的数据:-- 使用系统生成的自增insert into t1(f1, f2) values(1,1);
id = 1,并执行写入提交:-- 用户主动指定了自增insert into t1(id, f1, f2) values(1, 1,1);
id 的值出现重复,因此在定义自增列的时候,尽量将自增列定义为独立的主键/唯一索引。对比项 | TDSQL Boundless | MySQL 8.0.29以下版本 | MySQL 8.0.29及以上版本 |
默认字符集 | utf8mb3 | utf8mb3 | utf8mb4 |
默认排序规则 | utf8_general_ci | utf8_general_ci | utf8mb4_0900_ai_ci |
/*# broadcast */ SQL Hints 将查询广播到实例的所有节点。例如,SET GLOBAL 只会设置某个节点上的变量;用/*# broadcast */ SET GLOBAL 可广播到所有节点能使其在全局生效。SHOW PROCESSLIST 展示当前连接节点的 processlist,如果需要展示所有节点的,需要用 /*# broadcast */SHOW PROCESSLIST;或 SELECT * FROM information_schema.processlistgeneral_log 和慢查询日志 slow_log 仅支持输出到文件,暂不支持通过 SET GLOBAL log_output=TABLE 设置为输出到表。ADD COLUMN DEFAULT (a+a))、涉及触发器的表等操作,TDSQL Boundless 不支持在线执行。若执行这类 DDL 时遇到报错,请先通过 set tdsql_use_online_copy_ddl = 0 关闭 Online DDL 模式,再重新执行。ADD COLUMN DEFAULT (a+a))、涉及触发器的表等操作报错,可通过 set tdsql_use_online_copy_ddl = 0 关闭 Online DDL 模式,再重新执行。注意,关闭 Online DDL 模式会导致 DDL 锁表且执行期间阻塞该表的写入。INSERT ... ON DUPLICATE KEY UPDATE 语句更新数据时,采用统一的写法,统一不指定主键,确保所有事务的加锁顺序一致。INSERT ... ON DUPLICATE KEY UPDATE 语句时,检测到主键冲突后立即转入执行 UPDATE 操作,不再对表上的唯一索引加锁来验证唯一索引的约束。tdsql_stmt_optim_batch_upsert = ON)。该机制在检测到主键冲突后,仍会继续对表的唯一索引加锁验证唯一性。当并发的 SQL 写法不统一、加锁顺序相反时,可能导致死锁。INSERT ... ON DUPLICATE KEY UPDATE 语句并发操作同一条记录t1,其中 uk_col 字段上有唯一索引:CREATE TABLE t1 (id BIGINT PRIMARY KEY AUTO_INCREMENT,uk_col INT NOT NULL,col VARCHAR(255),UNIQUE KEY idx_uk (uk_col)) DEFAULT CHARSET=utf8mb4;INSERT INTO t1 VALUES (100, 100, 'init');
id 字段更新时,发现主键冲突,先锁主键,再锁唯一键;而事务 B 不带主键字段更新,先锁唯一键,再锁主键,导致可能出现死锁:-- 事务 A:带主键 id → 先锁主键,再锁唯一键INSERT INTO t1 (id, uk_col, col) VALUES (100, 100, 'session a') ON DUPLICATE KEY UPDATE;-- 事务 B:不带主键 id → 先锁唯一键,再定位主键INSERT INTO t1 (uk_col, col) VALUES (100, 'session b') ON DUPLICATE KEY UPDATE;-- 事务 A 与事务 B 高并发执行 → 可能死锁
INSERT ... ON DUPLICATE KEY UPDATE 语句统一不传主键字段,使所有事务走相同的加锁顺序;避免混用带主键和不带主键的写法。tdsql_stmt_optim_batch_upsert 为 OFF ,回退到逐一检查模式,主键冲突时提前终止,不再继续对二级索引加锁,行为和 MySQL InnoDB 保持一致。tdsql_stmt_optim_batch_upsert 可能影响多索引场景下的批量写入性能,建议评估业务负载后再操作。SHOW VARIABLES; 和 SHOW GLOBAL STATUS; 展示的是当前连接的计算节点中的状态信息,连到不同的计算节点展示的信息可能不同。LOCK TABLE 相关的语句不会锁表阻塞业务读写,因此,部分依赖于 LOCK TABLE 的操作可能受限,例如,mysqldumper 导出工具。SET PERSIST tdsql_enable_trigger=ON;。特性名 | 开关 | 默认值 | 说明 |
触发器 | tdsql_enable_trigger | OFF | 不建议使用 |
视图 | tdsql_enable_view | ON | 不建议在视图上执行更新操作 不建议 ALTER 变更视图定义 |
存储过程 | tdsql_enable_procedure | ON | 不建议 ALTER 变更存储过程定义 |
函数 | tdsql_enable_function | ON | 不建议 ALTER 变更 FUNCTION |
文档反馈