V19.2.8
版本更新说明
修复 MC 节点在切主后处理心跳请求时可能发生的 Panic 问题
修复了 MC 节点在完成 Leader 切换后,若仍收到 TDStore 心跳请求可能触发空指针访问,从而导致进程 Panic 的问题。此修复确保了 MC 在状态转换期间的稳定性。
问题修复
修复了 MC 模块中任务归档逻辑的缺陷,该缺陷可能导致 MC 切主后错误地重新推进已完成的任务。
修复了 MC 在处理 Region 分裂任务推进过程中可能触发空指针访问,进而导致进程异常的问题。
V19.2.7
版本更新说明
tdsql_ddl_fillback_mode 需 SUPER 权限才能修改
修改 tdsql_ddl_fillback_mode 需要 SUPER 权限。
ALTER TABLE RENAME 时表不会处在中间状态
ALTER TABLE RENAME 失败时,回滚流程将表状态设置为 Public。
问题修复
修复当 Install Snapshot 和切主并发时,极端场景可能导致前一个 Install Snapshot Request Ingest 的数据,被后一个 Install Snapshot Request 清除掉,而 data_corrupted 依然保持为 false,造成丢数据的问题。
修复部分参与者由于 Write Fence 校验失败进入 Failed 状态,剩余参与者由于日志同步失败未成功同步 Prepare Log,叠加协调者切主,导致协调者没有被恢复,无法清理 Failed 状态参与者的问题。
修复在恢复流程中 LoadWriteBatch 过快导致 L0 层文件数量过多触发缓写,进一步阻塞 LoadWriteBatch 导致超时失败的问题。增加相关 RPC 超时时间,同时在恢复期间调高缓写触发阈值。
修复实例从 V18.x 升级到 V19.x 时,即使 RG 数量足够多,仍然会创建新的 RG 作为主 RG 的问题。
修复 MC 定期巡检判断是否需要 Merge Region 会造成 CPU 升高的问题。
修复参与者退出时和主动切主并发,导致 Old Leader 上参与者释放了,但 New Leader 迁移过去的参与者并没有被释放的问题。
修复并行查询 NULL 强制在本地执行,而如果本地没有数据则不开 Worker,导致 NULL Job 不会被执行的问题。
V19.2.6
版本更新说明
SST 边界对齐相关配置参数支持动态更新
tdstore_system_region_sst_partitioner 和 tdstore_user_region_sst_partitioner 两个配置参数,支持动态更新,并修改了子参数。
问题修复
修复 CREATE TABLE 的新表可见后,即使 DDL 任务返回报错,新表也不会被删除的问题。
修复大量 Region 下,获取全量路由耗时长的问题。
修复 SQL 转发 Forward 功能获取大段路由可能引起网络阻塞的问题。
修复大量 Region 场景下,SQLEngine 节点并行获取 Region 阻塞直到超时的问题。
修复分裂时新 RG 概率性选举耗时超过10s的问题。
V19.2.5
问题修复
修复 DDL 回滚流程中,删除 Table 时未依据 TIndex ID 判断是否可以删除的问题。
修复执行 RENAME、ALTER RENAME 的 DDL 时,未进行 New Name 的冲突检测的问题。
修复队列对最大值的限制过小,导致无法通过调整参数值解决问题。
修复 bvar 的 Percentile 类型在没有采集线程去重置时存在 uint32 溢出问题,可能导致踩内存,引发 Coredump 等严重问题。同时修复了采集线程因为启停导致的部分 bvar 采集路径丢失的问题,并对 uint32 溢出进行了防御加固。
V19.2.4
问题修复
修复 CREATE TABLE 时节点 Crash,导致误删同名表的问题。
修复当 THD 被标注为 KILL 时,不重新开表的问题。
V19.2.3
问题修复
修复了多表的并行查询在使用 Ref Scan 进行并行扫描时,如果使用了 Remote Worker 可能出现结果错误的问题。
V19.2.2
问题修复
修复 Binlog Dump 事务结束未使用 XID Event 的 Commit 的问题。
修复 INSERT … ON DUPLICATE KEY UPDATE 在出现表版本变更时,生成乱码 Binlog 的问题。
修复 REPLACE INTO 执行时,有冲突时把行变更的 Binlog 写成了行新增的 Binlog 的问题。
V19.2.1
问题修复
修复 Binlog Dump 不支持生成多表 UPDATE 的 Binlog 的问题。
修复 DDL 期间其他连接如果开表失败,未尝试重新开表的问题。
修复 Raft 在选举、投票等流程中未及时更新本地 IP 地址缓存的问题。
修复 V18.2.1 升级到 V19.1.0 参数解析失败无错误日志输出的问题。
修复 tdstore_mod_log_flags 版本兼容适配问题,V19.x 版本移除了 NONE_FLAG 选项。
修复灾备在切换后,新备实例关闭增量备份,但 auto-compaction-enabled 没有打开的问题。
修复 MC 缺少对 Global Variables 字符串为空的情况进行判别,可能导致进程拉起异常的问题。
修复归档 Task 清理协程的缓存 Map BriefTask 未清理,导致 MC 从 V19.2 以下版本升级到 V19.2 时,可能存在大量归档 Task 需要清理,短时间内出现内存使用上涨的问题。
修复 RENAME TABLE 失败后的 Recover 逻辑存在踩内存的问题。
修复包含特殊符号的库表名称,在查询库表结构时出现报错的问题。
修复 BKA 内表并行可能少查数据的问题。
修复 Split Region 可能会造成一些复杂事务锁超时的问题。
修复 tdstore_mod_log_flags 跨版本不兼容的问题,同时为参数解析失败退出之前添加 Log Flush 便于问题定位。
V19.2.0
版本更新说明
扩展性与性能
优化 Binlog 回放过程中叠加 Raft 切主导致回放延迟
Log Receiver Install Snapshot 叠加 Raft 切主时主动结束未完成的任务,避免影响后续 Install Snapshot 任务,提升回放速度。
稳定性
执行 DDL 任务前,执行线程提前获取分布式锁
DDL Exec 进程提前获取 DDL Job ID 并持有相应分布式锁,以防止 DDL Exec 线程执行任务的同时,DDL Recover 线程接管 DDL Job 导致 DDL 执行失败的情况出现。
执行 Online Copy DDL 任务前预先检查磁盘剩余量是否支持完成 DDL
Online Copy DDL 任务开启前,预先检查磁盘剩余量是否支持完成 DDL,若磁盘空间不够,则报错 'no available space'。
Online DDL 的 IngestBehind 模式控制内存使用量
Online DDL 增加 Data Import 过程中的内存控制,提前计算好需要的内存,从 Block Cache 中借用,如果总 Data Import 使用内存量超过限额,则拒绝任务。
Online DDL 的 IngestBehind 模式产生的 BulkLoad 事务不阻塞普通事务
Online DDL 原先用 BulkLoad 的流程进行存量数据的 Ingest,BulkLoad 提交过程中会阻塞普通事务。现在取消了与普通事务的互斥限制,新增一种 Log 类型 DataImportLog,可以与普通事务并行。
修复复杂 SQL 导致 Bthread Worker 占满的问题
增加参数 yield_threshold_rows 用于控制扫描多少行数后主动释放 CPU,保证其他事务也能被处理,而不是阻塞。
增量恢复的过程中,如果遇到 BulkLoad Commit Log,需要报错
增量恢复的过程中,目前 BulkLoad Commit Log 关联的 External SST 文件没有备份到 COS,因此增量恢复时这部分数据暂时没有办法恢复。目前临时修复方案是遇到 BulkLoad Commit Log,整个增量恢复失败。
修复 RG 刚启动时,全量备份生成的 incr_base_index 为0的问题
增量恢复的过程中,如果全量备份生成的 incr_base_index=0,导致恢复的过程中找不到 index=1 的 Raft Log,最终恢复失败。
BatchPut 通过使用 Get 的方式来校验 Key 是否冲突
BatchPut 之前是通过构造迭代器 + Seek 的方式来判断 Key 是否冲突。测试发现相比于 Get,迭代器 + Seek 的方式性能更差。
tdsql_lock_wait_timeout 过大时,引起事务永不超时
tdsql_lock_wait_timeout 超过 tdsql_tdstore_rpc_timeout 时,将锁超时时间调整至 RPC 超时时间下。
数据库管理
无。
安全增强
Install Snapshot 拉取 SST 文件之前清除数据
目前 Install Snapshot 的流程是,先从 Leader 拉取 SST 文件,再清除数据,再将拉取到 SST 文件 Ingest 到 LSM Tree 中。这个流程存在两个问题:(1)拉取到 SST 文件到清除数据之间,数据需要在节点上保留两份,当磁盘空间紧张时,会导致 Install Snapshot 失败;(2)清除数据的操作会破坏 Raft 一致性。
V19.2.0调整了 Install Snapshot 的内部步骤,使得数据清除先于 SST 文件的拉取,避免了不必要的存储空间消耗。这意味着磁盘空间占用率高的场景下,Install Snapshot 成功率的大幅提升。此外,V19.2.0通过为 Raft Metadata 引入 data_corrupted 字段,避免了清除数据操作对 Raft 一致性的破坏。
库表回收站
数据迁移
无。
备份恢复
无。
运维
迁移任务并发数量控制精细化到节点维度
新增 src-node-migrate-replica-job-limit 参数,限制同一个源端节点往外迁移的并发任务数量。
新增 target-node-migrate-replica-job-limit 参数,限制往同一个目的节点迁移的并发任务数量。
分区表均匀打散到所有节点
支持按照默认建表策略打散分区表,分区会到对应的 Primary RG 中。
支持手动打散一级或二级分区表:CALL dbms_admin.scatter_partition(db_name, table_name);。
支持手动打散二级分区表的某一个一级分区下的所有二级分区:CALL dbms_admin.scatter_subpartition(db_name, table_name, partition_name);。
创建二级分区表时,不同一级分区下的对应二级分区划分到相同 RG,如表 t1.p0.sp0 与 t1.p1.sp0 放到相同 RG。
互斥参数支持自动调整
互斥参数 hot-schedule-enabled 和 rebalance-leader-enabled,其中一个参数设置为1时自动将互斥参数设置为0,设置为0时互不影响。
LogService 相关错误落表与可视化
LogService 视图 LOGSERVICE_PROCESSLIST 中添加 err_msg 字段用于展示 LogService 服务运行时的错误信息。
Auto Region Merge 实现和适配
自动合并 Size 较小的 Region,减少实例中元数据规模,从而减轻 MC 资源占用。V19.2.0开始默认打开 merge-region-enabled 参数。
MC 将历史调度 Job 从 ETCD 层捞到 SQLEngine 系统表
Raft 层切主需记录到表
MC 每次重启时会保留历史 STD 标准输出流文件
V19.2.0以前的版本,MC 的每次重启,都会把上一次的 stdout 文件覆盖,如果出现进程异常退出的情况,难以追溯到异常原因。本版本优化为每次重启都通过重命名的方式保留旧的 stdout 输出文件。
MC 中频繁出现 Get Member Version 慢的日志,对此进行优化缓存
MC Bootstrap 接口获取 Member Version 时频繁访问 ETCD,导致慢操作,针对此问题,MC 会在内存中缓存最新 Member Version。
悲观锁视图
PERFORMANCE_SCHEMA.DATA_LOCKS 支持展示悲观锁对应的 Session ID,详细请参见 DATA_LOCKS。支持资源规格参数动态变更
TDStore 支持动态更新资源规格相关参数。在修改这些参数时,系统会同时动态调整其关联参数。当前版本仅支持磁盘相关的规格参数动态修改。
新增 BulkLoad 数据目录磁盘占用监控指标
HyperNode、SQLEngine、TDStore、CDC 节点新增监控指标:BulkLoad 磁盘使用量(单位 MB)、BulkLoad 数据盘使用量(单位MB)。
限制临时表磁盘使用
云上环境通过限制 temptable_max_mmap 的大小来限制 TEMPTABLE 磁盘的使用,超过这个限制则报错 temptable is full。
支持删除 MC 持久化参数
目前通过 SET PERSIST 或者 SET PERSIST_ONLY 修改的参数会在 MC 进行持久化,同时会同步到所有节点;当前版本 MC 持久化参数的优先级最高,会覆盖节点配置文件。当需要修改某个或者某几个节点的配置文件时,支持了 SQL 语句先删除 MC 中的持久化记录,然后去节点上修改配置文件。对于动态生效的配置,可以修改配置文件后通过 SET GLOBAL 生效;对于静态参数,需要修改配置文件后重启节点生效。
删除 MC 持久化参数:CALL dbms.admin_remove_persist_variable
展示 MC 持久化参数:SHOW PERSIST VARIABLES,详细请参见 PERSIST。 提供导出全部 I_S 视图定义的方法
DBMS_ADMIN.DUMP_I_S_VIEW($path_to_save) 用于将 I_S(INFORMATION_SCHEMA)视图的 DDL 语句 Dump 出来,并且存储到指定路径下的 view_I_S_ddl.sql 文件中。
DBMS_ADMIN.CHECK_I_S_VIEW 用于检查 I_S(INFORMATION_SCHEMA)视图是否完整。
支持修改 LogService 同步时 MySQL Client 超时时间
支持通过数据库参数 log_service_mysql_client_timeout 修改 LogService 时 MySQL Client 的超时时间,从而避免某些 SQL 执行时间过长导致 LogService 同步卡住。
支持修改 LogService 同步为 MySQL 类型时使用的缓存队列长度
支持通过数据库参数 log_service_mysql_info_queue_size 修改 LogService 使用的缓存队列长度,从而避免 LogService 使用过大内存而导致的 OOM。
新增 SST 数据文件健康检查工具 bin/td_sst_healthy_checker
用于巡检 SST 数据文件是否出现数据错乱等问题。
问题修复
修复分区表的 RENAME INDEX 不支持 INPLACE 算法的问题。
修复只读模式进入和退出逻辑不合理的问题。
修复 BatchPut、Get、Check 未适配 Region Merge 的问题。
修复 CREATE TABLE LIKE 不支持和源表 DDL 并发的问题。
修复 MDL 死锁时未打印锁等待信息的问题;PERFORMANCE_SCHEMA.METADATA_LOCKS 新增 MC 锁信息打印。
修复偶现建表 sys.logservice_dump_seqno DDL 记录进入 ddl_jobs_history,而集群初始化阶段的其他 SYS 建表语句没有进入 ddl_jobs_history 的问题。
修复 MC 大量 Get Member Version 慢操作问题,优化缓存机制。
修复灾备状态下,DDL 执行过慢,导致 MySQL Client 超时的问题。
修复启动时偶发 Agent Core,导致 Agent 无法被启动的问题。
修复对于包含使用 PARTITION BY KEY 生成分区表,并且使用了普通索引扫描做 GROUP BY 的查询计划,在做并行优化时 Crash 的问题。
修复容量均衡创建 Task 失败后,关联 RG 的 Operator Placeholder 没有释放的问题。
修复对于 N 副本实例,CDC 节点与所有对等节点不在同一个可用区,所有对等节点在 ≤N-1 个可用区内,建表会创建一个新的 RG 的问题。
修复容量均衡出现分裂、迁移的组合任务时,迁移了错误的 RG 的问题。
修复小实例规格 MC 没有按照预期设置为单 RG 模式的问题。
修复用户设置的 DP Leader Preference 和主 AZ 设置冲突产生来回迁移的问题。
修复 Fast Online DDL 去除 Delete Only 阶段后,DDL 过程中数据一致性的问题。
修复 Online Copy DDL Recover 时可能出现 Crash 的问题。
修复并行粒度细分场景下可能出现 start_key 非法的问题。
修复 PERFORMANCE_SCHEMA 在并行场景会出现内存泄漏的问题。
修复 BRPC Channel 存在 UAF 问题。
修复投影下推下,SQL 有范围查询,同时范围包括一段范围和点查,会导致点查的数据的列不对的问题。
修复 Local 优化中的 Get 实现有问题。
修复热点 RG 切主未按预期下发 Transfer Leader 任务的问题。
参数变更
|
新增 | | 是否开启回收站,默认关闭。 |
修改 | | tdsql_lock_wait_timeout 表示 TDStore 引擎锁超时时间,单位为毫秒。
|
新增 | | LogService 控制参数,控制 MySQL 类型的 LogService 在数据同步时,其内部 MySQL 客户端连接的超时时间,单位为秒。 |
新增 | | LogService 控制参数,控制 MySQL 类型的 LogService 同步时,内部使用的缓存队列的长度。 |
使用注意事项
Binlog Dump 暂不支持 RESET MASTER 命令,用户可以通过 PURGE MASTER LOGS 来清理 Binlog 文件,后续版本将新增对 RESET MASTER 命令的支持。
混合架构支持 TDStore + Hybrid 类型 SET,暂不支持同时创建 SQLEngine + Hybrid 类型 SET。