背景
在去年 2024年 11月 做的关于 TiDB 版本发版调研中,
很多小伙伴希望降低版本的发版策略,而在今年的发版中,咱们已经延缓了发版的速度和频率。
在 v8.5.4 的版本中,咱们加了以下的这些功能:
新功能
- 支持表级别数据打散功能(实验特性)#63260 @bufferflies
- PD 会自动调度数据,将整个集群的数据尽可能均匀地分布到所有 TiKV 节点上。然而,这种自动调度是基于集群全局的。在某些场景下,尽管整个集群的数据分布是均衡的,但某张表在各个 TiKV 节点上的数据分布仍然可能不均匀。
- 从 v8.5.4 开始,你可以通过
SHOW TABLE DISTRIBUTION语句查看某张表在集群中所有 TiKV 节点上的数据分布情况。如果存在数据分布不均衡,可以通过DISTRIBUTE TABLE语句对该表进行数据打散(实验特性),以提升负载均衡性。 - 表级数据打散功能属于一次性执行任务,并设有超时时间限制。如果到达超时时间后,打散任务还未完成,则会自动退出。更多信息,请参考用户文档。
- 支持内嵌于 DDL 的 Analyze 特性 #57948 @terry1purcell @AilinKid该特性适用于以下两类 DDL:
- 新建索引的 DDL:
ADD INDEX - 重组已有索引的 DDL:
MODIFY COLUMN和CHANGE COLUMN开启该特性后,TiDB 会在新索引对用户可见前自动执行一次 Analyze(统计信息收集)。这样可以避免在新建或重组索引后,由于统计信息暂不可用而导致优化器估算不准确,从而引起执行计划变更的问题。更多信息,请参考用户文档。
- 新建索引的 DDL:
- 支持对分区表的非唯一列创建全局索引 #58650 @Defined2014 @mjonss
- 从 v8.3.0 开始,TiDB 支持用户在分区表的唯一列上创建全局索引以提高查询性能,但不支持在非唯一列上创建全局索引。
- 从 v8.5.4 起,TiDB 取消了这一限制,允许用户在分区表的非唯一列上创建全局索引,提升了全局索引的易用性。更多信息,请参考用户文档。
- TiFlash 支持优雅关闭 (graceful shutdown) #10266 @gengliqi
- 在关闭 TiFlash 服务器时,TiFlash 允许当前正在执行的 MPP 任务在指定的等待期内继续运行,但不再接收新的 MPP 任务请求。该等待期默认为 600 秒,可通过
flash.graceful_wait_shutdown_timeout配置项进行调整。 - 如果所有正在运行的 MPP 任务都在该等待期到达前完成,TiFlash 将立即关闭。
- 如果到达该等待期后仍有 MPP 任务未完成,TiFlash 会强制关闭。更多信息,请参考用户文档。
- 在关闭 TiFlash 服务器时,TiFlash 允许当前正在执行的 MPP 任务在指定的等待期内继续运行,但不再接收新的 MPP 任务请求。该等待期默认为 600 秒,可通过
- 引入 TiCDC 新架构,显著提升性能、可扩展性和稳定性 #442 @CharlesCheung96
兼容性变更
系统变量
- 系统变量
tidb_mpp_store_fail_ttl默认值从60s修改为0s,意味着 TiDB 不再需要额外等待即可向新启动的 TiFlash 节点发送查询请求,无需再通过延迟来避免查询失败 #61826 @gengliqi - 系统变量
tidb_replica_read从 v8.5.4 开始仅对只读 SQL 语句生效,以提高数据读取的安全性并减少与其他功能的重叠 #62856 @you06 - 新增以下系统变量:
tidb_opt_enable_no_decorrelate_in_select:控制是否对SELECT列表中的子查询进行解关联操作,默认值为OFF#51116 @terry1purcelltidb_opt_enable_semi_join_rewrite:控制是否改写EXISTS子查询,默认值为OFF#44850 @terry1purcelltidb_stats_update_during_ddl:控制是否开启内嵌于 DDL 的 Analyze 特性,默认值为OFF#57948 @terry1purcell @AilinKid
配置参数
- 新增配置项:
gc.auto-compaction.check-interval、gc.auto-compaction.tombstone-num-threshold、gc.auto-compaction.tombstone-percent-threshold、gc.auto-compaction.redundant-rows-threshold、gc.auto-compaction.redundant-rows-percent-threshold和gc.auto-compaction.bottommost-level-force。 - 新增 TiFlash 配置项
flash.graceful_wait_shutdown_timeout,用于控制在关闭 TiFlash 服务器时的最长等待时间,默认值为600秒。在此期间,TiFlash 允许尚未完成的 MPP 任务继续执行,但不再接收新的 MPP 任务。如果所有正在运行的 MPP 任务都在此超时时间之前完成,TiFlash 将立即关闭;否则将在等待时间结束后强制关闭。 #10266 @gengliqi
MySQL 兼容性
从 v8.5.4 开始,当写入 DECIMAL 类型的数据时,TiDB 的行为和 MySQL 保持一致:如果小数位数超过字段定义的小数位数,无论超出多少,TiDB 都会自动截断多余的位数并成功插入。在之前的 TiDB 版本中,如果写入的 DECIMAL 类型数据的小数位数超过 72 位,写入会失败并报错。更多信息,请参考使用 JDBC 连接到 TiDB。
改进提升
- TiDB
- 支持由
IN子查询而来的 Semi Join 使用semi_join_rewrite的 Hint #58829 @qw4990 - 优化系统变量
tidb_opt_ordering_index_selectivity_ratio生效时的估算策略 #62817 @terry1purcell - 调整优化器的选择逻辑,使新创建的索引在某些情况下更容易被选中 #57948 @terry1purcell
- 优化 NDV (number of distinct values) 较小的列的查询估算逻辑 #61792 @terry1purcell
- 优化 Index Join 查询中包含
LIMIT OFFSET时的估算策略 #45077 @qw4990 - 优化统计信息未及时收集时的越界估算策略 #58068 @terry1purcell
- 在 Grafana 上的 Performance Overview > SQL Execute Time Overview 面板中新增
backoff时间指标,便于调试 #61441 @dbsid - 在审计日志插件中新增语句 ID 信息 #63525 @YangKeao
- 支持由
- TiKV
- 将 BR 模块中部分可自动恢复的错误日志级别从
ERROR调整为WARN,减少不必要的告警 #18493 @YuJuncen - 将 TiKV 的部分错误日志级别从
ERROR调整为WARN,减少不必要的告警 #18745 @exit-code-1 - 将 Raft 模块检查 GC 的流程拆分为两个阶段,以提升 Region 中冗余的 MVCC 版本 GC 的效率 #18695 @v01dstar
- 基于 GC safe point 和 RocksDB 的统计信息计算 MVCC 的冗余度,提升 Compaction 的效率和准确性 #18697 @v01dstar
- 将 Region MVCC 的 GC 处理逻辑更改为由 GC Worker 线程执行,从而统一 GC 的处理逻辑 #18727 @v01dstar
- 优化 gRPC 线程池线程数量默认值的计算方式,将原固定值调整为根据总的 CPU 配置动态计算,避免因 gRPC 线程数量过小导致的性能瓶颈 #18613 @LykxSassinator
- 优化在存在大量 SST 文件的环境中 async snapshot 和 write 的尾延迟 #18743 @Connor1996
- 将 BR 模块中部分可自动恢复的错误日志级别从
- PD
- 减少非必要的错误日志 #9370 @bufferflies
- 将 Golang 版本从 1.23.0 升级至 1.23.12,并更新相关依赖项 #9788 @JmPotato
- 支持按表级别维度打散 Region 数量,以在
scatter-role和engine维度实现均衡分布 #8986 @bufferflies
- TiFlash
- 跳过不必要数据读取,提升
TableScan读取性能 #9875 @gengliqi - 优化 TiFlash 在列多且稀疏(大量
NULL或空值)的宽表上执行TableScan的性能 #10361 @JaySon-Huang - 在集群存在大量表的场景中,降低添加向量索引时 TiFlash 的 CPU 开销 #10357 @Lloyd-Pottiger
- 减少处理无用 Raft 命令时产生的不必要日志输出,降低日志量 #10467 @JaySon-Huang
- 优化 TiFlash 在小数据量分区表上执行
TableScan的性能 #10487 @JaySon-Huang
- 跳过不必要数据读取,提升
- Tools
- TiDB Data Migration (DM)
- 获取上游
GTID_MODE时,支持兼容大小写 #12167 @OliverS929
- 获取上游
- TiDB Data Migration (DM)
赶紧来试一下 TiDB v 8.5.4 吧!
你值得拥有!