产品概述
应用场景
产品架构
实例类型
兼容性说明
Goroutine 的栈信息。这有助于开发人员分析是否存在因协程阻塞或死锁导致的内存泄漏或心跳堆积等问题,提升问题定位效率。compaction_merge_small_file_trigger_ratio 配置,便于运维人员监控和优化存储层性能。Bulk Load 等大数据导入场景下慢日志堆积占用数据盘空间,导致 MC 对磁盘占用量判断不准、表分布看起来不均匀的问题。Ddl_count(执行的 DDL 个数)和 Ddl_failed_count(失败的 DDL 个数)两个监控指标,支持计算 DDL 失败率告警,便于及时发现和处理 DDL 执行异常。transaction_isolation 参数暴露transaction_isolation 字段,支持用户通过控制台配置事务隔离级别,满足客户对参数可视化管理的需求。mc-ctl 命令行工具,提升易用性mc-ctl 命令行工具进行了多项优化:1) 新增 cluster gv delete-single 命令,用于删除单个全局变量,语法更直观;2) 新增 cluster gv-old get 和 cluster gv-old delete-single 命令,以支持对旧格式(JSON)全局变量的查询和删除操作;3) 新增 show node_role 命令,方便用户查看节点角色的枚举值。DDL(如 CREATE/DROP TABLE)或执行 DROP DATABASE 时,每个分区都需要与数据字典(DD)交互,若执行节点与系统副本组(sys rg)Leader 不在同一节点,会产生大量跨节点 RPC 调用。本次优化将此类 DDL 语句的转发逻辑,使其优先在 sys rg Leader 所在的节点执行,从而大幅减少网络开销,提升 DDL 执行效率。tdsql_stmt_optim_batch_delete 和 tdsql_stmt_optim_batch_update 参数,启用批量删除和更新语句的优化能力,提升大批量数据变更操作的执行效率。EC_TDS_TRANS_PREPARE_NEED_MORE_PART 后,立刻给已 Ready 的参与者发送 Prepare 请求刷新参与者列表,避免等待下一轮重试(默认1秒)导致的慢查询。Lease::CheckLease 函数在 RG 状态不可写时返回错误码不准确的问题,确保返回 EC_TDS_TRANS_REP_GROUP_NOT_LEADER 并携带 recommended_retry_connection,使 SQLEngine 能及时发现新 Leader,避免2秒以上的路由延迟。HandleBlockParticipantPrepareForMergeTrans 无法获取参与者锁时,主动中断锁等待,避免因锁等待超时(默认50秒)导致的慢查询。Proxy Executor 内存优化Proxy Executor 的内存释放机制。在 OnConnClose 时启动后台协程立即执行释放动作,而非依赖后台线程定期清理,避免短链接高并发场景下因内存延迟释放导致的 OOM 风险。Batch Insert 将数据和索引的写入合并为一次 RPC 调用,减少网络开销。Compaction 压缩算法优化Compaction 输出 SST 文件的压缩算法选取策略。不仅考虑目标层的压缩算法设置,还考虑输入 SST 文件的压缩算法,确保输出的压缩级别不低于输入。解决 RG 迁移时 ZSTD 压缩的 SST 被 Ingest 到 L0/L1 层后因 Compaction 退化为无压缩导致的空间膨胀问题。estimated_pending_compaction_bytes 估算偏大导致的误缓写问题,同时通过 L0 层大小限制控制 L0 到 L1 层 Compaction 所需的额外磁盘空间,提升写入性能稳定性。tdstore_data_db_table_cache_numshardbits 和 tdstore_block_cache_num_shard_bits 参数。Block Cache 大小在64GB以下设置为6,64-128GB设置为7,128-256GB设置为8,256-512GB设置为9,512GB以上设置为10,优化大内存实例的缓存性能。INSERT INTO... AS new ON DUPLICATE KEY UPDATE 的写入性能。解决该语法相比 REPLACE INTO 性能差距较大的问题,支持 Batch 优化提升批量写入效率。optimizer_switch 中开启 force_batched_key_access 开关,默认启用强制批量键访问(BKA)连接优化,提升多表 Join 查询的性能。测试时关注:多表连接、不同 Join 类型组合、join_buffer_size 调整、相关优化器开关组合及 Parallel Hint。Information_Schema 系统视图查询自动使用 Proxy 转发至 System RG 节点执行。由于 I_S 视图基本都是多表 NLJ 查询,转发到 System RG 所在节点执行更高效,减少跨节点 RPC 调用。Write Fence 的处理效率Write Fence 操作频繁的场景下,Region 分裂和合并操作中处理 Write Fence 耗时过长的问题进行了优化。通过改进内部处理逻辑,减少了相关操作的延迟,提升了数据分片动态调整(分裂/合并)的执行效率,从而增强了集群在面对数据增长和负载变化时的弹性与响应速度。skip_scan 以避免潜在负优化skip_scan 在 TDSQL Boundless 的某些查询场景中可能导致性能下降(负优化)。默认将此优化器开关关闭。Sys_var_flagset 类型参数(如 parallel_query_switch、optimizer_switch)在版本升级前后不兼容导致节点无法启动的问题。在配置文件读取路径中增加与 SET 语句路径相同的容错处理,确保升级过程平滑。NodeHeartbeat 和 EngineHeartbeat 在高负载场景下不受限流影响,提升系统稳定性。SKIP_DD_ACCESS_CHECK 权限,确保并行执行时能正确访问数据字典,避免权限检查导致的执行失败。data_locks 系统视图的可读性。在视图中增加数据库名和表名。SELECT COUNT 操作,提升大表 DDL 操作的校验效率。Bulk Load 导入 TDSQL Boundless 集群。已验证 TiDB v6.1.7、v6.5.12、v7.1.5、v7.5.3、v8.1.1、v8.5.0 等版本。SUBPARTITION BY KEY 的分区表中,当 GROUP BY 子句的列与索引分组列不完全匹配时,查询优化器错误地将 GROUP BY 操作完全下推到存储层的问题。这可能导致返回错误的分组聚合结果。Jemalloc 内存分配器默认参数配置(如未开启 background_thread)导致的偶发性查询抖动问题。在特定内存分配场景下,Jemalloc 内部调用 madvise 系统调用可能耗时超过1秒,导致点查、点更新等简单操作出现严重延迟。Persist)全表统计信息时,可能只汇总计算了部分分区的统计信息TDRequestPessimisticTransLockManager)内部链表访问未加锁导致的竞态条件。该问题会引起空指针解引用,最终导致节点崩溃(Core)。range stats)因缓存容量限制被频繁淘汰和重新加载,导致性能损失的问题。本次修复新增了通过参数指定热表列表的功能,在使用 FIFO 淘汰策略时,这些表的索引对应的 Range 统计信息将被"钉住"(pin),避免被常规淘汰机制移除。relaxed-usage-diff-ratio 和 strict-usage-diff-ratio)设置过小的问题。在磁盘容量较小的节点上,此问题容易触发不必要的均衡调度,破坏 Hash/Key 分区表的默认数据分布,进而影响查询性能。get_record 操作。此多余操作导致了不必要的性能开销。ScatterPartition 接口进行分区打散时效果不符合预期的两个问题:1) 打散逻辑基于 Primary 副本组(RG)进行,但在 21.2.3 版本中未正确处理 Log-Only 节点(其上不存在 Primary RG),导致打散不完整;2) 分区索引需要与对应数据分区放置在一起的约束在实现上存在缺陷,导致打散结果不满足预期分布。equal 条件落入到单个 range 内,并且存在数据倾斜时,线性估计可能会导致估计行数偏小range 估计行数时,相同索引前缀的不同索引估计行数偏差较大HistoryJobList 中冗余的问题。重试 Job 对应的原 Job 已在历史列表中,需过滤掉重试 Job 避免冗余,防止 TDBR 后续动作失败。Bulk Load 分裂任务状态判断问题。当一个 RG 中有多个表进行 Bulk Load 导入时,某张表结束后 MC 不再提前放开该 RG 的任务调度,需等待所有表导入完成后再解除禁止调度。BatchPut RPC 遇到锁超时执行失败时客户端未返回错误信息的问题。Destroy Replica 任务完成后,MC 需等待该节点收到新心跳后,才可将其作为迁移的 Src 节点,避免因心跳延迟导致重复发送迁移任务。Merge Empty RG 时未检查副本角色一致性的问题。在合并空 RG 前增加副本角色检查,确保两个 RG 的 Voter/Learner 配比一致后再执行合并操作。pthread 模式下 futex timed wait 被虚假唤醒后未正确推进已消耗等待时间的问题。Passive Abort Stage 完成后,需同步清理节点缓存中的 RG 记录。sys 表不存在导致节点启动卡住的问题。调整前向兼容版本判断,从 19.2.x 版本开始走新的 sys 表升级路径。GenericCleanupData 过程中因 PhysicallyDeleteRange 执行成功但 Range 内数据未清空导致 Core 的问题。shutdown 再执行 close,避免因缓冲区数据残留导致阻塞。Batch Update 场景的问题。在 Batch Update 优化路径中增加二级索引值变化校验和回表记录获取的容错处理,确保更新操作数据一致性。UPDATE 语句在包含 VARCHAR 字段的唯一索引上可能破坏唯一性约束的问题。修正唯一性校验的扫描范围计算逻辑,避免因字符串长度变化导致校验范围缩小。GetRegion 导致空指针崩溃的问题。在 GetRegion 函数中增加空指针判断,当 multi_range 为空时返回 nullptr 而非访问空指针。Replay Barrier 机制存在日志回放乱序的问题。解决多个 Barrier Log 并发回放时,后一个 Barrier Log 可能在前一个完成后错误释放状态锁,导致其他日志与 Barrier Log 并发执行的问题。raft_data 目录残留大量 deleted__async-cleanup 目录导致 Agent 执行 du -cshm 频繁 Core 的问题。CheckConflictWithCleanupDataTask 持续检测到 Range Overlap 的问题。当 Destroy Job 的异步清理任务长时间未完成时,不再持续阻塞后续迁移任务。Item_int_with_ref 未实现 Parallel Safe 导致特定 SQL 并行执行崩溃的问题。CONVERT(SUBSTR()) 函数结果不一致的问题。确保并行执行与串行执行返回相同的字符串内容。PutTimestampToEtcdLoop 协程异常退出的问题。将协程中获取时间戳失败时的 break 改为 continue,确保协程持续运行。mc_rg_state_leader_transfer_high_frequency_gauge 指标无法正确重置的问题。指标重置逻辑原先写在 AddLeaderHistoryLocked 中,只有下次切主发生后才会重置,现已修复为可正常重置。raft_data 目录,不再进行重命名并保留,而是直接删除目录。WHERE 条件做分区裁剪后,正确选择对应分区的 RG Leader 节点进行转发,充分利用 Local Scan 优化。RG_JOB_TYPE_DELETE_REGION_IN_RG 任务无法调度执行的问题。允许 Local Meta CF 写入跳过缓写状态,确保 Drop Table 等释放空间的操作能尽快正常执行。Drop Table 操作卡住的问题。解决 Write Fence 版本不匹配(SQLEngine 发送版本1,TDStore 记录版本2)导致校验失败的问题。dbms_admin.show_variables 查询字符集相关变量时 Candidate Values 显示为空的问题,同时修复大数值显示为科学计数法的问题。Permission Denied 报错导致节点初始化失败的问题。context deadline exceeded)时,重试机制存在两个问题:1) 重试次数固定为10次,不可配置;2) 重试间隔为固定的20-30秒随机值,在网络持续拥塞时效果不佳。这可能导致下载任务在达到重试上限后失败,进而使整个备份恢复流程卡住。checkLeader)发生读写锁竞争,进而导致死锁的问题。死锁后心跳包处理被阻塞并堆积,最终引发 MC 内存溢出(OOM)。prefer leader 和数据保护(DP)规则的检查,而此时有亲和性的目标副本组(RG)可能正处于合并(Merge)状态无法创建。这导致后续分区表的 Leader 选择不受约束,全部集中到同一个节点,未能实现预期的打散分布。变更类型 | 数据字典 | 说明 |
修改 | 新增了 OBJECT NAME、OBJECT SCHEMA 说明。 |
max_digest_length 的默认值以支持更长的 SQL 语句指纹max_digest_length 的默认值从1024提升到10240,以便 Outline 可以使用到更长 SQL。range_stat_maximum_scanned_partitions 的默认值,以优化超大分区表的范围行数估计性能algorithm=1,原本1表示 KTY_51 算法,现在1表示 MURMURHASH 算法;KEY 分区原本的默认 algorithm=2,表示 KEY_55,现在默认 algorithm=1 使用 MURMURHASH。m_part_ids_sorted_by_num_of_records 没有按照子分区表的行数降序排序。rec_per_key 统计信息的计算性能rec_per_key)的开销。ADD INDEX)的场景下,获取路由范围过大的问题,避免了不必要的路由信息获取,提升了批量数据写入的效率。setup_read_decoders 函数调用频率setup_read_decoders 函数在查询执行中的开销占比。UPDATE 语句执行流程进行了优化,将原本针对每行数据的索引冲突检查和存储层写入操作进行批量处理,显著减少了高频次、小数据量的 RPC 网络调用。此优化提升了涉及多行更新的 UPDATE 语句的执行效率。线上默认不开,按需打开 tdsql_stmt_optim_batch_update 开关。target_file_size_multiplier_additional 参数默认值,从 1:1:1:2:2:4:8 调整为 1:1:1:2:2:2:2,当 user_cf_target_file_size_base = 32M 时,在新的默认值下,L1~L6 的 SST 大小上限为:32M, 32M, 64M, 128M, 256M, 512M,下层的 SST 大小更加合理。StartExecutor 在网络压力下的执行效率,减少耗时波动,提升查询稳定性。ORDER BY / GROUP BY 的简单 LIMIT 走并行会带来额外开销,默认禁用并行,若实在需要通过并行解决可以在 SQL 中添加 Hint /*+ parallel(n) */。GetSmallRange 函数支持远程调用GetSmallRange 函数功能,使其支持在远程节点上执行,为并行查询的进一步优化提供基础支持。FindSampleKey 函数进行性能优化,降低 CPU 开销。GetRegionsByKeyRange 查询性能GetRegionsByKeyRange 查询性能,解决 CPU 打满问题,提升系统稳定性。SHOW INDEX 命令执行性能SHOW INDEX 命令在跨 AZ 场景下的执行效率,提升查询响应速度。DELETE 操作的执行效率,通过 BatchDelete RPC 提升批量删除操作的性能表现。线上默认关闭,控制参数为 tdsql_stmt_optim_batch_delete。/*+no_range_cache*/ 可强制关闭当前查询的 Range Cache;使用 /*+use_range_cache*/ 可强制启用。EXPLAIN 输出,增加明确的下推执行标识,提升 SQL 执行计划的可读性与调试效率。SAVEPOINT 功能,提供更灵活的事务控制能力,便于复杂业务场景下的数据处理。BATCH LIMIT 语法对分区表的支持能力,提升查询功能的灵活性和适用范围。dd_history_record_cleaner_interval_second 而可能失败的问题。优化了校验逻辑,确保在相关后台线程尚未初始化的启动阶段也能安全处理,提升了进程启动成功率。FLUSH TABLE 和 Write Fence 操作的执行逻辑。新增了 Schema 版本不匹配时的本地缓存刷新机制,并强化了 flush_cache_table 操作在遇到 RPC 卡住等异常时的错误处理,提升了 DDL 相关操作的健壮性。global_system_variables.table_plugin),进而引发空指针访问导致进程崩溃的问题。提升了服务启动过程的鲁棒性。tdsql_rpc_connect_timeout 参数与持久化变量的逻辑适配问题,确保参数修改生效。RENAME COLUMN 在非 LogService 下无需禁写阶段;增强批量 Rename 操作的原子性;改进 start_ddl_job 日志输出;修复 DDL 回滚流程中的状态管理问题,确保 DDL 操作的可靠性和一致性。DROP VIEW 操作连接丢失问题DROP VIEW 时出现的连接丢失异常,确保操作执行的稳定性。bstack_fast 诊断工具,支持按线程 ID 输出原始调用栈bstack_fast 增加非聚合输出模式。新模式下,工具将输出每个线程的原始调用栈,并关联 bthread_id 或 pthread_id。此功能便于运维人员在排查复杂并发问题时,准确定位到特定线程的执行路径。Query_time)在前端界面显示为0的问题。同时,对内核慢查询日志格式进行标准化:将 Query_time、Lock_time 等所有耗时时长的单位统一为秒(s),并统一保留6位小数的精度,使其与 MySQL 标准格式一致,便于日志中心与 DBBrain 等监控工具解析,消除歧义。bstack_fast 诊断工具的回溯算法,使用 libunwind 提升栈回溯完整性bstack_fast 工具的栈回溯方法从原有的帧指针(FP)回溯法替换为 libunwind 库。新方法能够正确回溯那些未保存帧指针的函数(如 libc 库中的 usleep、nanosleep 等),解决了原有方法在遇到此类函数时调用栈信息不完整或跳跃的问题,使诊断工具输出的调用栈更精确、更接近 gdb bt 或原生 bstack 命令的结果,提升了线上问题排查效率。SHOW GLOBAL STATUS 中去掉,提供内存表 BVAR_INFO 来展示所有 Bvar 的值。tdsql_mc_meta_rpc_timeout 参数配置 MC 控制 RPC 超时时间。dbms_admin.upgrade() 实现系统表变更的幂等操作,提升升级过程的安全性与可靠性。KILL 命令执行失败时的错误信息返回,提供更明确的错误提示。SET PERSIST node_type x=x1; 其中 node_type 类型为 hyper storage engine cdc columnar log_only 之一;变量 x 只会同步到对应类型的节点。SET PERSIST x=x1; 根据执行 SET PERSIST 命令的节点的 node type 转化为 SET PERSIST node_type x=x1 执行,这里 node_type 代表该节点的节点类型。SHOW CREATE TABLE 命令,使其能够正确显示所有相关的 Schema 状态信息。tdstore_rpc_max_body_size 参数,统一使用 tdsql_max_rpc_body_size,简化配置管理。NOT EXISTS、UNION ALL、GROUP BY、HAVING 等子句的组合)触发多范围读取 (MRR) 路径下的程序崩溃 (Crash) 问题。reset_parallel_scan_exec_flags 操作,该操作成本与分区数成正比,导致大量开销。ha_rockspart) 的 ref_length_actual 字段未正确同步底层存储引擎的值,导致后续计算中使用了未初始化的异常值,进而引发内存访问错误和进程崩溃 (Core) 的问题。records_in_range) 时需要扫描每个分区进行行数估计,导致耗时较高。max_txn_size 在特定配置下实际生效值与预期不符的问题。确认问题源于参数解析或传递过程中的不一致,导致事务内存上限被错误地设置为默认值(约1GB)而非配置值。tdsql3_sys_standby_xxx),而老版本灾备使用的是旧账户 (tdsql3_sys_standby),导致权限授予失败。BatchGetV3 接口在特定条件下可能返回 part_ctx_version mismatch 错误的问题。该问题由开发 multi-scan 功能时引入的一段冗余逻辑导致,可能使本该走事务读的请求错误地走到了快照读路径。rec_per_key)时,可能出现"后续键部分的 rec_per_key 值比前缀键部分更大"的逻辑错误。根因在于不同键部分的 rec_per_key 可能由不同算法独立估算,彼此间无约束。ANALYZE TABLE 无法正常更新表的行数统计(table_rows)的问题。根因在于特定代码路径中,直方图估算的行数错误地覆盖了 ANALYZE TABLE 通过精确扫描获取的行数。ANALYZE TABLE 后,复合索引的 rec_per_key 和 cardinality 值仍然是错误的,进而影响优化器的行数估算。total_prev_ndv)的逻辑错误。该错误导致在计算后续键部分的 rec_per_key 时,使用了被错误放大的前缀不同值数量,使得估算结果不准确。kill -19 信号可能导致 I/O 持续性跌零的问题。GetRepGroupsByTs 函数存在潜在死锁而导致进程卡住无法正常停止的问题。where 条件中包含子查询的 update 语句时,binlog 生成异常的问题。PassiveAbortStage 的 job 时,因 job 无需 report 而导致回放流程卡住的问题。get_raft_node_info 时丢失 log receiver 信息的问题。TDSTORE_INSTALL_SNAPSHOT_INFO 因存储格式变化导致升级后解析出错的问题。commit_ts 优化逻辑中可能导致事务 commit_ts 小于 safe_read_ts 的问题。db_pending_compaction_bytes_limit 相关监控指标混淆问题。TRUNCATE PARTITION 失败的问题。start_index 还未被赋值,所以采用了默认值2。导致 start_index 计算错误。tdstore_compact_on_delete_ratio 参数在21.0.0版本重构中被错误设置为0的问题。Item_func_group_concat 函数执行异常问题。ImproveLocation 功能错误地迁移了创建失败的复制组(RG)的问题。BatchPut 时未对 RPC 包大小进行校验的问题。ha_rocksdb::check_index_dup_key 函数导致的 core 问题。count(*) 时未正确调用 ha_rocksdb::records_from_index 的问题。Update 语句在非隐藏主键表的非自增列上错误触发 AutoInc RPC 的问题。bthread_timer_threads 参数校验不通过,进而引发 Pod Crash 的问题。变更类型 | 语法 | 说明 |
新增 | SELECT CURRENT_GLOBAL_TIMESTAMP(); — 获取当前的全局时间戳(GTS)。SELECT FROM_UNIXTIME(CURRENT_GLOBAL_TIMESTAMP() >> 24); — 返回 GTS 的物理时间部分。 | |
修改 | 根据当前节点的类型自动转换为对应的 SET PERSIST node_type x = x1 形式,仅对同类型节点生效。 | |
新增 | 支持 SAVEPOINT 功能,具体语法如下: 1. 事务中创建 SAVEPOINT: SAVEPOINT sp_name2. 回滚到某个 SAVEPOINT: ROLLBACK TO SAVEPOINT sp_name3. 释放某个 SAVEPOINT: RELEASE SAVEPOINT sp_name | |
修改 | 新增对分区表的支持,同时新增限制:在 WHERE 子句中包含 GROUP BY 或 LIMIT 时,禁用 BATCH LIMIT 功能。 |
变更类型 | 数据字典 | 说明 |
新增 | 用于展示 TDSQL Boundless 系统中所有的 bvar 统计监控项信息。 | |
新增 | 快速查询当前实例中是否存在灾备功能不支持的表。 |
文档反馈