tencent cloud

TDSQL Boundless

V18.1.x

PDF
聚焦模式
字号
最后更新时间: 2026-04-17 11:56:52

V18.1.0

版本更新说明

下表列出了从 TDSQL V18 升级到 V18.1.0 的一些内核关键特性:
分类
功能
描述
扩展性与性能
启用 CompactOnDelete 提升批量删除性能
TDSQL V18.1.0引入 RocksDB 的 CompactOnDelete 特性,解决旧版本中 DELETE 操作因 Delete Mark 堆积导致的性能下降问题。启用该特性后,批量删除耗时大幅减少至原来的1/10,有效提升系统性能。
支持 Raft Log 日志和数据分离部署
TDSQL V18.1.0支持 Raft Log 和用户数据分盘存储,将 Raft Log 放在 SSD 上提升写入性能,用户数据保留在机械硬盘上降低成本。此方案实现性能与成本的平衡,目前该特性仅支持新部署实例。
优化实例初始化流程
TDSQL V18.1.0优化实例初始化流程,所有 HyperNode 节点同时启动,由 MC 选择节点初始化数据字典,省去单独节点初始化及重启扩容的时间,显著缩短启动耗时,提升效率。
增加 compaction_history 和 active_compaction_state 两个视图
TDSQL V18.1.0引入 compaction 相关的视图,通过这些视图追踪 compaction 执行的历史记录等,便于定位问题。
数据库管理
简化节点弹性伸缩的并发度控制策略
TDSQL V18.1.0简化数据迁移并发控制,引入新系统变量 migrate-node-rep-group-replicas-parallel-limit、tdstore_max_install_snapshot_task 和 tdstore_max_install_snapshot_rate,动态调整迁移任务并发度与速度,避免高 I/O 影响业务,同时废弃旧参数 td_basic_opt.max_num_install_snapshot_task,提升灵活性与效率。

扩展性与性能

启用 CompactOnDelete 提升批量删除性能
TDSQL V18.1.0之前的版本中,通过循环执行 DELETE FROM tbl WHERE ... LIMIT k 语句来批量清理大量的历史数据的过程中,由于删除数据是在 RocksDB 写入删除标记,因此随着删除数据的增多,写入 RocksDB 的删除标记也越多,而通过循环每次查询符合条件的删除数据时,都需要从前向后遍历删除标记的数据,最终导致删除操作越来越慢。为了解决该问题,从 TDSQL V18.1.0版本开始,通过启用 RocksDB 的 CompactOnDelete 特性,允许引擎在创建新的 SST 文件时收集当前表的 Delete Mark 占比,当占比超过预设阈值时标识当前 SST 文件的 Compaction 优先级更高,加速该 SST 文件的 Compaction 速度以减少存储中无效的 MVCC 历史版本数量。通过启用该特性,在 sysbench 反复删除场景下,批量删除的耗时节约到原来的1/10。
支持 Raft Log 日志和数据分离部署
在数据量庞大且读写性能要求不高的场景中,用户通常会选择成本较低的机械硬盘来存储数据。然而,机械硬盘的 I/O 性能较差,可能会导致整体系统性能下降。为了解决这个问题,TDSQL V18.1.0版本开始支持将 Raft Log 日志和用户数据部署在不同的磁盘上,将 Raft Log 放置在 SSD 上,以利用 SSD 的高 I/O 性能应对小数据量的频繁追加写入操作,而用户数据则保存在机械硬盘上,以满足大容量存储需求和成本效益。通过这种方式,实现了性能与成本的最佳平衡。该特性仅支持新部署实例。
优化实例初始化流程
在 TDSQL V18.1.0之前版本中,初始化实例时需要启动 MC 节点、启动单个 HyperNode 节点以初始化数据字典,再重启 HyperNode 节点扩容和重设实例副本数三个过程,耗时较长。为了加速实例初始化流程,从 TDSQL V18.1.0版本开始,改为所有 HyperNode 节点同时启动后由 MC 选择初始化数据字典的节点,减少启动耗时中节点扩容的耗时。

稳定性

存储稳定性增强
优化 TDStore RG job executor
将任务队列替换成每个任务单独分配一个协程的方案,解决空闲协程数量过多和队列数量不足可能带来的死锁问题。
RG demote-promote 任务幂等性保证
RG demote-promote job 实现幂等,避免相同 promote-demote job 在 MC aborted 之后仍可执行,从而导致 TDStore 的 RG 状态跟 MC 记录的元数据不一致,以及后续 MC 继续下发新的 job 时被 TDStore 的状态检查拦截。
MC 稳定性增强
优化对失败 Split Region 任务的限制
优化为某一个 Region 分裂失败时,只限制该 Region 不能马上下发分裂任务,对于其他 Region 不受影响。
卸载节点时隔离 Server 节点,等待 DDL 完成
优化卸载节点逻辑,先 deactivate 该节点,并等待该节点所有的 object lock 释放。
特定场景下 MC 下发切主任务前增加目标副本状态判断逻辑
切主前增加对 target new leader 的判断,避免重复对已故障 target leader 下发 transfer-leader job,同时对 transfer-leader-job 新增指数退避逻辑,避免激进式下发任务。
MC 授时服务检查租约
优化 MC 授时服务,避免出现双主同时提供时间戳服务。
MC 数据调度策略感知 DDL
MC 在进行热点、自动 merge 等调度时,检查选择的 RG 中是否有正在执行 DDL 的 object,如果有则不对该 RG 下发切主、分裂和合并任务。
MC 支持下发自动 Merge RG 的接口
单 RG 模式三期主要提供 API 接口,可以手动下发多个自动 Merge RG 的任务。

数据库管理

DDL 功能增强
离线创建索引加速
在日常运维中,经常需要对表结构进行调整,例如新增列或添加索引,然而当数据量很大时,添加索引可能会花费很长时间,影响业务发展速度。TDSQL 从 V18.1.0 版本开始引入了 FastOnlineDDL 机制,可以让离线添加索引(包括唯一索引)的速度提高一个数量级。
使用方法:设置 tdsql_ddl_fillback_mode = 'BulkLoadLock' 会锁表,tdsql_ddl_fillback_mode 默认为 'ThomasWrite'
create table sbtest1 (a INT AUTO_INCREMENT PRIMARY KEY, b INT, c INT);
INSERT INTO sbtest1 VALUES(1,1,1),(2,2,2),(3,3,3);
set session tdsql_ddl_fillback_mode = 'BulkLoadLock';
alter table sbtest1 add index idx_b(b);
使用建议:基于 BulkLoad 的 DDL 需要 MC 停止调度,如果当前 MC 正在执行调度任务,则会直接报错。如果实例发起了一个超大时间的迁移副本任务,会导致 DDL 发起持续报错,可以提前关闭 MC 的所有调度:
-- 禁止调度的命令:
sql > call dbms_admin.meta_cluster_pause_schedule("new-ddl-enabled"); -- 注意:new-ddl-enabled 为必填参数,表示允许开启 ddl
-- 恢复调度的命令:
sql > call dbms_admin.meta_cluster_resume_schedule();
效率提升:以 TPC-H 测试为例,100G离线数据(6亿行)添加索引的耗时,ThomasWrite 模式为4小时,BulkLoadLock 模式为302秒。
DDL 操作支持即时响应 KILL 语句
TDSQL V18.1.0开始,在 DDL 并行回填数据期间,优化任务处理逻辑,支持快速响应 KILL 语句,确保快速终止并回滚 DDL 操作,提高稳定性。
FastOnlineDDL 和 BulkLoad 数据写入功能互斥
为了确保数据写入的正确性,TDSQL V18.1.0引入 FastOnlineDDL 机制和 BulkLoad 数据写入功能互斥,即开启 FastOnlineDDL 时,系统不支持执行多行插入语句;执行多行插入语句时,不支持开启 FastOnlineDDL 功能。
简化节点弹性伸缩的并发度控制策略
TDSQL V18.1.0版本简化了实例节点之间的数据迁移任务的并发控制策略,通过以下系统变量进行控制:
migrate-node-rep-group-replicas-parallel-limit:MC 的并行变量,控制集群内总数据迁移任务并发度。
tdstore_max_install_snapshot_task:TDStore 的系统变量,控制消费数据迁移任务时,单节点允许同时并行执行 Install Snapshot 的任务数。
tdstore_max_install_snapshot_rate:TDStore 的系统变量,控制消费数据迁移任务时,单节点执行快照任务从 Leader 下载快照的速度,单位是字节/秒。
通过这些参数控制,可以避免数据迁移过程中过高的 I/O 请求影响业务读写。TDStore 原并发控制参数 td_basic_opt.max_num_install_snapshot_task 从 V18.1.0 版本开始废弃。
当前引入的系统变量可以通过 SQL 动态修改,无需重启节点。例如,如下 SQL 语句设置集群中单节点允许并行执行 Install Snapshot 的并行度为4、允许的最高下载速度为150MB/s:
set persist tdstore_max_install_snapshot_task = 4;
-- 150MB/s
set persist tdstore_max_install_snapshot_rate = 157286400;
TDBR 备份恢复工具增强
增量备份遇到 purge 区间时优化 fetch 逻辑
增量备份遇到 purge 区间时,直接从 DB 中获取 first_log_index,避免逐个 index 从 DB 中获取。
增量恢复性能优化
增量恢复性能优化,将 RPC 聚合,降低 RPC 发送次数。性能提升200%以上。

安全增强

无。

数据迁移

BulkLoad 稳定性增强
TDSQL V18.1.0版本继续增强 BulkLoad 的稳定性和兼容性,主要改进内容如下:
BulkLoad 支持传输 BulkLoadTransInfo 给 Follower
在 TDSQL V18.1.0之前,当进行 Install Snapshot 时,Follower 有时会因为回放 BulkLoadCommitLog 而崩溃。具体来说,Follower 作为迁移副本,可能没有相应的 BulkLoad External SST 文件,这会导致 Follower 在回放这些日志时出现问题触发自杀。为了解决这个问题,TDSQL V18.1.0开始,Leader 支持将 BulkLoadTransInfo 传给 Follower,Follower 接收到这些信息后不再需要回放 BulkLoadCommitLog,从而避免了 Follower 由于缺少 External SST 文件导致的节点崩溃问题。
BulkLoad 改用相对路径存储传输的 SST 文件
为了进一步适配多样化的部署环境,支持单机多实例部署、Pod 部署,从 TDSQL V18.1.0版本开始,BulkLoad 从绝对路径改为使用相对路径存储传输的 SST 文件。
BulkLoad 与普通事务在重复 Key 的错误处理保持一致
在 MySQL 中,不管使用多行插入还是单行插入写入数据时,如果遇到重复的 Key,例如主键或唯一索引冲突,MySQL 会返回错误 ERROR 1062 (23000): Duplicate entry 'duplicate_key_value' for key 'key_name'。从 TDSQL V18.1.0开始,TDSQL 在 BulkLoad 事务遇到重复 Key 时返回的错误和 MySQL 客户端保持一致,提升兼容性。
BulkLoad 优化分区表的内存分配避免 OOM
TDSQL V18.1.0版本之前,在进行 BulkLoad 导入超大事务或分区表时,系统可能会因为对乱序数据进行外部排序而导致内存消耗过大,从而出现内存抖动和 OOM 问题。为了解决这一问题,TDSQL V18.1.0对 BulkLoad 的内存使用进行了优化。现在,每个 BulkLoad 事务不再为每个分区表单独分配内存进行外部排序,而是使用共享内存池,从而显著降低了内存消耗。同时 TDSQL V18.1.0新增系统变量 tdstore_bulk_load_use_unsorted_data_pool,用于控制是否启用这一优化,参数的默认值为 true,即默认启用。这一优化有效管理和减少了内存消耗,提高了系统稳定性,减少导入数据期间 OOM 问题的发生。

运维

批量 KILL 会话增强
优化批量 KILL 会话执行效率,同时忽略由于会话过期导致的会话 ID 不存在的报错。当您需要批量终止某些会话时,系统将更快速地执行操作,不会因为部分会话 ID 无效而中断或产生过多错误信息。
存算分离架构下,区分节点采集指标
存算分离架构下,在监控告警页面,支持按 Hyper、Engine、Storage 和 CDC 四种节点类型的采集指标。
MC Schedule Config 参数支持 SQL 查询与修改
运维人员可通过 SQL 直接在 MySQL Client 完成修改 MC 参数等操作。
调度 SQL:TRANSFER LEADER、MIGRATE、SPLIT、MERGE
为 TDSQL 添加了四种调度 SQL,分别为 TRANSFER LEADER、MIGRATE、SPLIT、MERGE,作为 HTTP 与 RPC 接口的 SQL 补充。
总调度开关,可以控制 MC 的所有任务行为
MC 封装一个总的调度开关,数据库升级变更时只需调用一个接口即可将 MC 变为"静止"状态,等待升级完成后重新开启。
上报记录事务的相关指标
新增了四个指标:分布式事务数、分布式事务未完成数量、分布式事务回退数量、事务回退数量。
hyper-agent 中采集的 SHOW PROCESSLIST 数据按文件单独存储
将每次从 hyper-agent 中采集的 processlist 数据按文件单独存储,方便线上运维。
hyper 节点占用内存超过一定比例时保存 heap profile
支持 SQLEngine 进程内存达到一定阈值后自动 dump 一份 heap 文件,方便问题分析。
information_schema 新增 compaction 信息视图
支持通过 SQL 查看 compaction 活跃与历史任务信息。
默认使用广播查询的方式展示悲观锁和参与者信息
通过参数 auto_broadcast_tables 控制自动广播的表,针对这些表的单表查询都会聚合所有节点的信息。
MC 提供接口查询 SQLEngine SET GLOBAL/PERSIST 的修改记录
MC 提供查询接口,以查询 SQLEngine SET GLOBAL/SET PERSIST 的历史修改记录。
HTTP 接口使用方法:
curl -XGET http://127.0.0.1:62379/meta-cluster/api/get-global-variables-modify-history/{cluster_id}?limit=5

参数说明:
- limit:指定获取最近 limit 次修改记录;若不指定,默认返回最多 256 条的最新修改记录。
curl-tool.sh 工具使用方法:
# 暂不支持指定 limit 参数
./sbin/curl-tool.sh ggvmh
mc-ctl 使用方法:
./bin/mc-ctl
>>cluster gv history --limit 5

问题修复

修复实例正常运行时,MC 对于心跳上报 SQL_INACTIVATE 状态的 hyper/engine 节点,未下发 ActivateNode 任务重新将节点拉起的问题。
修复实例发起变配时对 MC 开关有非预期的操作,引发非预期的数据调度行为的问题。
修复协程泄漏导致 MC 在切主后旧主持续向 TDStore 发送已完成任务的问题。
修复 MC 扩容后在切主期间给 TDStore 返回了 MC member version,导致切主完成后 TDStore 无法感知新的 MC 节点列表的问题。
修复 MC 在集群刚创建导入数据时,频繁在多个节点之间下发迁移任务的问题。
修复在 Merge RG 任务完成后,MC 内部的数据对象路由信息有概率更新错误,导致后续删除 vanished RG 中的数据对象时无法找到正确的路由,使 delete Region 任务卡住的问题。
修复 BulkLoad task 期间 MC 未正确停止调度任务,导致 TDStore 因 SST 文件找不到而 KillSelf 的问题。MC 已加固了 task 的结束条件和发起条件。
修复热点调度无法将数据对象从 RG 内分裂出来的问题。
修复 Online Add Partition 的 WaitAllEngineSyncTableSchema 调用位置不正确,未发挥实际作用,导致并发 DML 失败的问题。
修复统计信息后台通过 RPC 更新时,前置错误导致 thd->killed 被设置未 reset,重新发起 RPC 时因 thd 已被 kill 导致 RPC 无法发出,从而永远无法更新统计信息的问题。
修复 LogService 解析带有自增列的分区表时可能开表失败,导致回放任务 hang 住的问题。
修复实例运行一段时间后,如果用户执行过 ALTER TABLE t1 CHANGE COLUMN CHARACTER SET = utf8mb4; 这种会引起 DDL copy 表的操作后创建了 LogService,则 LogService 不会同步 t1 表的问题。
修复 Add Partition 后 DML 持续报错 EC_TDS_SCHEMA_CHECK_VERSION_MISMATCH 的问题。
新增变量 max_dd_cache_size 用于控制数据字典允许缓存容量大小。
修复 Online DDL 某个子任务失败后未及时通知整个任务退出的问题。
修复增量备份时,如果 Raft Log 已经被 purge,未从 first_log_index 开始备份的问题。
修复 BulkLoad 传输文件未支持使用相对路径的问题。
修复 BulkLoad 遇到重复主键时与普通事务报错不一致的问题。
修复 BulkLoad 导入数据和 FastOnlineDDL 未正确互斥的问题。
修复备份恢复时不同 commit 计算出来的 sst_file_info.json 不一致的问题。
RG demote-promote 任务幂等性保证。
修复 TDStore 在因磁盘满进入 readonly 模式,从 readonly 模式恢复后未能发起应有的 compaction 的问题。
修复当 Region 较小时,给 MC 上报的 Region 的 approximate_size 和 approximate_keys 不准确,导致 MC 下发的 Split Region job 分裂任务失败,报错 region find split_key not between with start_key and end_key 的问题。
修复 keep_db_log_file_num 参数被修改后未立即生效的问题。
修复 CDC LogService 启动时扫描日志过多导致 OOM 的问题。
修复环境磁盘满后 SegmentWriteBufWrapper::write_buf_to_disk 陷入死循环,造成 LogManager 的锁无法释放的问题。
修复当 RG 数量超过4096个时可能出现 RG job 一直不结束的问题。

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈