V20.0.2
问题修复
修复 CREATE TABLE 时节点崩溃导致误删同名表的问题。
V20.0.1
版本更新说明
语法与功能
INDEX_FOR_GROUPBY 和 NO_INDEX_FOR_GROUPBY Hint 引入
稳定性
SQLEngine 支持设置参数限制单个事务的最大大小
提供参数 tdsql_max_memory_per_transaction_bytes,用于限制单个事务的写入量,支持用户手动设置以防止产生大事务。
问题修复
修复 Binlog Dump 占用内存超过 binlog_dump_cache_max_size 配置时,将缓存临时写入文件以缓解内存压力的问题。
修复 CDC 节点重启后,若最后一个 Binlog 文件为空,可能导致事务重复写入 Binlog 的问题。
修复 MC 在部分主动下发 RG 切主任务的场景下,遗漏对节点 reject-leader 标签判断的问题。
修复 MC 在升级后执行 Leader 位置还原时,未考虑实例并发数限制,导致 RG 切主任务发送失败的问题。
修复 TDStore 以单个 Raft Node 粒度控制 Raft Cache 内存时,当单节点 Raft Node 数量过多导致内存失控的问题,现改为全局统一控制。
修复版本滚动升级过程中,协调者收到低版本参与者响应时,因 coor_term 字段未正确设置而导致处理异常的问题,现通过 rpc_version 识别该场景并进行兼容处理。
修复 MC 在 HyperNode 只读与迁移任务叠加场景下,因任务状态未正确设置导致任务持续处于未完成状态,进而阻塞该 RG 后续任务调度的问题。
修复 Space Ratio 模式下容忍度系数计算逻辑,不再乘以平均可用磁盘空间。
V20.0.0
版本更新说明
扩展性与性能
LogService 支持 UK 表同步
LogService 的 MysqlClient 模式,支持同步含有 Unique Key 的表。
优化大分区表的执行性能
优化分区表逻辑中的关键函数,提升大分区表执行性能。
优化 Optimizer 估计 Range 内的行数
设计新的 Range Cache 缓存 SST Block Statistics,Optimizer 可以利用这些 Cached SST Block Statistics 更准确地估计查询 Range 内的行数。新增 Session 变量 enable_range_cache 作为特性开关。
将带索引的连接均转成 Batch RPC 的 BKA 连接
在执行层将 BKA 连接转换成发送 Batched RPC 的方式,在 optimizer_switch 中可以通过打开 force_batched_key_access 的开关开启此功能,将会较大提升带索引连接的性能。
BatchGet/BatchCheck/BatchPut 以 RG 为单位聚合
加大聚合粒度,进一步减少 RPC 次数以优化性能。
支持多种死锁回滚优先级
InnoDB 在选取死锁回滚的事务时,优先选取写数据量较少的事务。而此前 TDStore 的行为与 InnoDB 不一致,是选取较晚开始的事务作为死锁回滚的事务。在本版本中,TDStore 引入了新的系统变量 tdstore_deadlock_victim 以控制选取死锁回滚事务的行为,默认与 InnoDB 行为保持一致。
支持显式亲和性绑定
支持 DML Query 转发
转发 DML 到表数据所在的节点执行,当 SQL 接入节点和数据所在节点不同时,此功能可以减少计算和存储节点间的数据传输 RPC。作为实验特性,目前只支持 autocommit DML,不支持 Prepared Statement,不支持 Multi-Statement in One Query,GLOBAL 参数 tdsql_enable_proxy 控制此功能开关,默认关闭。
并行查询计划支持多个子计划
支持在一个 Query Block 内通过使用查询优化器 PARALLEL Hint 指定多个表进行并行扫描,查询优化器会将整个查询计划拆成多个子计划进行并行执行。
支持将 Raft 存储 Multi-Raft-DB 转换成 Segment
当线上的实例有节点的 Raft 存储是 Multi-Raft-DB 时,通过设置两个参数:将 raft_log_storage_type 设置成 1(表示使用 Segment)。tdstore_enable_raft_log_convert_to_segment_storage 设置为 true。这样在重启时会自动将 Multi-Raft-DB 转换成 Segment。转换后,会将 Multi-Raft-DB 备份成一个 multi-raft-db-bak 目录,需要后续手动删除。
支持通过配置项设置 default_collation_for_utf8mb4 的值
支持通过 template.cnf 里配置 default_collation_for_utf8mb4 的值设置 utf8mb4 字符集的默认 Collation,默认配置为 default_collation_for_utf8mb4 = utf8mb4_general_ci。
修改 CONVERT 函数的行为,当 CONVERT 的目标字符集为 utf8mb4 时,且并未指定 Collation 时,目标 Collation 为变量 default_collation_for_utf8mb4 的值,而不是 utf8mb4_0900_ai_ci(MySQL 默认行为)。
支持修改 default_collation_for_utf8mb4 的值为 utf8mb4_general_ci 和 utf8mb4_0900_ai_ci 以外的值。
支持一级 Key 分区绑定 Partition Policy
对于一级 Key 分区,支持对相同分区方式(分区数目和分区键数目都相同)的分区表绑定相同的 Partition Policy。
优化 MC 对 TDStore 的心跳处理以及热点统计方式
删除心跳处理时使用的对象池,减少多余的数据拷贝。
合并节点热点信息统计和全局热点表对象统计的协程,减少对 CPU 资源的占用。
将与主键不在同一个 RG 的二级索引合并到主键所在的 RG
添加索引时,二级索引不一定与主键在同一个 RG(主键所在 RG 可能在执行其他任务),需要在之后通过调度将二级索引合并到主键所在 RG 中。
支持将内部事务授时切换到 TDStore
当只有单 RG 或者跨数据中心部署时,使用 TDStore 对事务授时可减少延迟,对点查提升尤其明显。
支持合并 RG 不杀事务
Vanished RG 合并到 Expanded RG 的过程中,会将 Vanished RG 中的事务迁移到 Expanded RG 中执行,可能带来短暂的事务延迟,但是不会主动杀事务(原有实现会将 Vanished RG 中的事务全部杀掉)。
稳定性
实例滚动升级前后的 Leader 分布快照和还原
实例滚动升级后,还原升级前的 RG Leader 分布,以保障升级后数据库性能的稳定性。
快速释放残留的参与者上下文
在此前的版本中,如果 SQLEngine 发生宕机,其残留在各个 TDStore 的参与者一般需要数分钟才可以被释放(依赖于单独线程的定期检测机制)。这些参与者持有的悲观锁会阻塞其他事务的读写,对可用性造成影响。在 V20.0.0,TDStore 引入了节点的宕机检测功能(可以通过配置项 tdstore_enable_node_alive_detection 控制开启或关闭)。在启动宕机检测后,SQLEngine 的宕机可以在2s内被检测到,其残留的参与者可以迅速被释放。
数据库管理
灾备功能优化
新增灾备关系校验:如果实例存在灾备关系,提示"请先解除灾备关系,再发起销毁退还"。
支持存量实例(运行超过5天)通过备份与恢复模式购买/建立灾备链接。
灾备切换/断开操作限制:仅主备实例均为 Running 状态时可执行。
支持强制灾备切换。强制灾备切换属于高风险操作,主实例处于正常运行状态时,不建议使用强制切换功能。
支持同地域和跨地域克隆建立灾备,提升了系统在面对大规模灾难时的应对能力。通过跨地域克隆,将数据复制到不同地理位置的灾备中心,可以有效抵御诸如自然灾害、地区性网络故障等极端情况对数据的威胁。
支持 Shared Object Lock
V20.0.0版本之前只支持 Node 级别的互斥 Object Lock,V20.0.0改造后,支持会话级的互斥/共享 Object Lock。
Online DDL 加速
在日常运维中,经常需要对表结构进行调整,例如新增列或添加索引,然而当数据量很大时,添加索引或者加减列花费时间较长,影响业务发展速度。TDSQL 从 V20.0.0 版本扩展了 FastOnlineDDL 支持场景,可以让在线 DDL 的速度提高一个数量级。
在 V19.0.0 Fast Online DDL 只支持非分区表添加索引;V20.0.0支持非分区表加索引(包括唯一索引)和加减列,分区表也增加支持加减列。
SET SESSION tdsql_ddl_fillback_mode = 'IngestBehind';
CREATE TABLE sbtest1 (a INT AUTO_INCREMENT PRIMARY KEY, b INT, c INT) PARTITION BY HASH (a) PARTITIONS 3;
INSERT INTO sbtest1 VALUES(1,1,1),(2,2,2),(3,3,3);
ALTER TABLE sbtest1 ADD INDEX idx_b(b);
FastOnlineDDL 使用说明
call dbms_admin.set_schedule_config("merge-rep-group-enabled","1");
安全增强
无。
数据迁移
Binlog Dump 适配社区 Binlog 功能
支持生成 DDL 语法 CREATE TABLE tb2 AS SELECT xxx FROM tb1 的 Binlog。
支持 RESET MASTER、FLUSH LOGS 命令。
Binlog Dump 开启后自动开启 log_bin_trust_function_creators 参数。
MyDumper 支持多线程一致性导出
使用 MyDumper 多线程导出时,用闪回查询保证多线程备份一致性。
MyLoader 支持记录导入期间的 Session Variable
MyLoader 记录源文件中的 Session 变量,在与数据库断连接后恢复 Session 变量,避免因断连导致数据不一致。
MyLoader 支持识别 TDSQL 错误码
MyLoader 支持识别类似1082数字类型的错误码来判断错误类型。
备份恢复
备份恢复适配 FastOnlineDDL
支持增量备份 FastOnlineDDL 执行过程中生成的 BulkLoad External SST 文件。
支持增量恢复的过程中恢复 BulkLoad External SST 文件。
备份恢复计算增量备份日志 Purge Range 优化
改变扫描 Purge Range 方式为全量扫描,从而避免 Purge Range 的误报问题。
运维
支持 CPU/Memory 热加载
支持动态调整 CPU 和 Memory 等资源参数,并同步更新关联参数。
自增值超限时返回明确的报错信息
自增值超限时返回报错信息 "auto_increment value exceeds max value"。
MC & MC-Agent 支持区分数据盘和日志盘
MC Pod 新增日志盘,mc-server、mc-agent、TDBR 的日志均会写到日志盘,与数据盘区分开,防止日志高频刷新时挤占磁盘空间影响进程的正常运行。
ServiceLink 支持指定 Pod 绑定路由
支持指定 Pod 绑定多 LB(VIP)且不随扩缩容而动态调整。
支持管理同一个实例的多个 ServiceLink,并且 ServiceLink 关联 Eros 网络 ID。
EngineAgent 支持参数自闭环
EngineAgent 内核侧提供参数渲染脚本支持参数自闭环,提供 engine-agent-conf-gen 可执行文件进行参数渲染。
问题修复
修复 Binlog Dump 开启后未自动开启 CDC 节点的 log_bin_trust_function_creators 变量的问题。
修复 Agent 对所有节点采集 Binlog Latency 的问题,对于 HyperNode 不再采集 Binlog Latency。
修复监控指标 data_db_bytes_read 及 data_db_bytes_written 在勾选"单位自适应"后,纵坐标单位显示为"千亿"而非"千亿字节"的问题。
修复 MC 拉起时 modifyConfigFileAfterAddMember 步骤向自身发送 HTTP 请求的问题。
修复降 AZ 的同时缩容节点时校验未前置到预校验的问题。
修复 DROP TABLE 失败后,Recovery 时小概率 Crash 的问题。
修复空分区表 Reload 统计信息失败,导致统计信息未及时更新的问题。
修复任务归档时先删缓存再持久化的问题,当无法拿到时间戳时,任务在当前 MC Leader 不会再进行归档。
修复 Agent 对主进程的内存 Heap Dump 可能失效的问题。
修复 MC 在发送切主任务前未判断 RG Leader 与 Follower 的 Raft Index Gap 的问题。
修复回收站 Flashback Table 语句可能存在的并发问题。
修复 UPDATE 和 DDL 并发执行时可能存在的死锁问题。
修复升级至 V19.2.0 后的内核版本创建/切换灾备失败的问题。
修复 MySQL 社区版 SERVER_VERSION 推高时,升级过程中更新 mysql schema 下的系统表、sys schema 下的视图和 information_schema 下的 Non-DD Based View,而 TDSQL 定义的 SERVER_SUB_VERSION 升高时,升级过程中不会影响到上述内部表更新,可能导致新版本定义的内部表丢失的问题。
修复实例升级时创建 Primary RG 的问题。
参数变更
|
修改 | | 限制 binlog dump 使用的最大内存,单位为字节。 |
新增 | | 设置为 on 或 off,将带索引的连接都转成 batch rpc 的 bka 连接,减小 RPC 的数据量,提升性能。 |
修改 | | tdsql_auto_increment_batch_size 用于设置 SQLEngine 单次获取自增值的数量。自增值生成序列存放在存储节点上, 在某些情况下,为了提高插入性能,系统可以一次为多个插入操作分配连续的自增值,从而减少自增值生成器的开销。通过调整 tdsql_auto_increment_batch_size 参数,可以控制这种批量分配的大小。
|
新增 | | 控制开启或关闭宕机检测功能。 |
新增 | | 当死锁发生时,决定选取哪个事务回滚。 当设置为 WRITE_LEAST 时,优先选取写数据量较少的事务回滚。 当设置为 START_LATEST 时,优先选取较晚开启的事务回滚。 |
新增 | | 该参数用于设定主动切主任务耗时(包含旧主迁移事务以及给新主发请求的耗时)的最大阈值。 |
新增 | | 该参数用于设定 Raft 层切主耗时(包含新主选举以及上任的耗时)的最大阈值,单位为毫秒。 |
新增 | | Fast Online DDL ingest behind 模式的磁盘吞吐量限流参数,用于限制数据回填阶段消耗的读/写吞吐量,即读或写所用的吞吐量都不会超过这个值,该参数会影响 Fast Online DDL 的执行效率。设置为0代表不限速。 |