title: TiDB 4.0.9 Release Notes
TiDB 4.0.9 Release Notes
发版日期:2020 年 12 月 21 日
TiDB 版本:4.0.9
兼容性更改
TiDB
- 废弃配置文件中
enable-streaming
配置项 #21055
- 废弃配置文件中
TiKV
- 减少开启加密时的 I/O 开销和锁冲突。该修改向下不兼容。如果需要降级至 v4.0.9 以下,需要将
security.encryption.enable-file-dictionary-log
配置为false
,并在降级前重启 #9195
- 减少开启加密时的 I/O 开销和锁冲突。该修改向下不兼容。如果需要降级至 v4.0.9 以下,需要将
新功能
TiFlash
- 支持将存储引擎的新数据分布在多个硬盘上,分摊 I/O 压力(实验特性)
TiDB Dashboard
优化提升
TiDB
- 在转换等值条件为其它条件时,通过使用启发式规则,避免生成 (index) merge join 以得到更好的执行计划 #21146
- 区分用户变量的类型 #21107
- 在配置文件中添加了
performance.gogc
配置项,用于设置GOGC
#20922 - 提升
Timestamp
和Datetime
类型的二进制输出结果与 MySQL 的兼容性 #21135 - 优化用户使用
LOCK IN SHARE MODE
SQL 语句时输出的报错信息 #21005 - 优化在可剪切的表达式进行常量折叠时输出的错误信息,避免输出不必要的警告或错误信息 #21040
- 优化
LOAD DATA
语句执行PREPARE
时的报错信息 #21199 - 修改整型列的类型时,忽略掉整型字段的零值填充的属性 #20986
- 在
EXPLAIN ANALYZE
结果中输出 DML 语句执行器相关运行时的信息 #21066 - 禁止在一条语句中对主键做出多次不同的修改 #21113
- 添加连接空闲时间的监控项 #21301
- 新增运行
runtime/trace
分析工具时系统自动临时开启慢日志的功能 #20578
TiKV
- 添加标记以跟踪
split
命令的来源 #8936 - 支持动态修改
pessimistic-txn.pipelined
配置项 #9100 - 减少运行 Backup & Restore 和 TiDB Lightning 时对系统的性能影响 #9098
- 添加 Ingesting SST 报错的监控项 #9096
- 阻止 Leader 在任意副本需要复制日志时进入休眠状态 #9093
- 提高 Pipelined locking 的成功率 #9086
- 调整配置项
apply-max-batch-size
和store-max-batch-size
的默认值为1024
#9020 - 添加
max-background-flushes
配置 #8947 - 默认关闭 RocksDB consistency check 以提高性能 #9029
- 将 Region 大小的查询操作移出
pd heartbeat worker
以减轻其压力 #9185
- 添加标记以跟踪
PD
TiDB Dashboard
TiFlash
- 降低 Replica read 时的延迟
- 优化 TiFlash 的错误信息
- 优化在大数据量下,对缓存数据大小的限制
- 添加正在处理的 Coprocessor 请求数量的 metric
Tools
Backup & Restore (BR)
TiCDC
Dumpling
TiDB Lightning
TiDB Binlog
- 在写下游出错时给 Drainer 设置非零退出码 #1012
Bug 修复
TiDB
- 修复了前缀索引和
OR
条件一起使用时结果不正确的问题 #21287 - 修复了开启自动重试后可能出现的一处 panic #21285
- 修复了根据列类型检查分区表定义时出现的一处问题 #21273
- 修复了分区表对于列的类型检查的一处问题。分区表达式的值的类型和分区列的类型必须一致 #21136
- 修复了哈希分区表对于分区名唯一性检查的问题 #21257
- 修复非
INT
类型的值,插入到哈希分区表后结果不正确的问题 #21238 - 修复了在部分写入类的场景中,使用了 index join 会遇到非预期报错的问题 #21249
- 修复了在
CASE WHEN
中BigInt
无符列的值被错误地转换成有符类型的问题 #21236 - 修复了 index hash join 和 index merge join 没有考虑 collation 的问题 #21219
- 修复了分区表在建表和查询时,没有考虑 collation 的问题 #21181
- 修复了慢日志记录的查询结果可能不全的问题 #21211
- 修复了一处数据库名大小写处理不当,导致的
DELETE
未正确删除数据的问题 #21206 - 修复了执行 DML 语句导致 schema 的内存被覆盖的问题 #21050
- 修复了使用 join 时,无法查询到合并后的列的问题 #21021
- 修复了一些 semi-join 的查询结果不正确的问题 #21019
- 修复了表锁对于
UPDATE
语句不生效的问题 #21002 - 修复创建递归的视图出现栈溢出的问题 #21001
- 修复了 index merge join 在执行外连接的时候,结果不符合预期的问题 #20954
- 修复了一处事务问题,该场景下应该返回结果未知,但是却返回了执行失败 #20925
- 修复
explain for connection
无法显示最后一次执行计划的问题 #21315 - 修复在 Read Committed 隔离级别下,Index Merge 结果不正确的问题 #21253
- 修复了由于事务写冲突重试导致的 auto-ID 分配失败 #21079
- 修复了 JSON 数据无法通过
load data
无法正确导入到 TiDB 的问题 #21074 - 修复新增加
Enum
类型列的默认值问题 #20998 - 对于日期类型的数学计算,保留原始的数据类型信息,修复
adddate
函数插入非法值的问题 #21176 - 修复了部分场景错误地生成了
PointGet
的执行计划,导致执行结果不正确 #21244 - 在
ADD_DATE
函数中忽略夏令时的转换,以和 MySQL 兼容 #20888 - 修复了插入尾部带有超出
varchar
和char
长度限制的空白字符的字符串时报错的 bug #21282 - 修复了对比
int
和year
类型时没有将[1, 69]
的整数转换为[2001, 2060]
以及没有将[70, 99]
的整数转换为[1970, 1999]
的兼容性 bug #21283 - 修复了
sum()
函数计算Double
类型字段的结果溢出导致 panic 的问题 #21272 - 修复了
DELETE
语句未能给 unique key 加悲观锁的问题 #20705 - 修复了快照读能够命中 lock cache,返回错误结果的问题 #21539
- 修复了在同一个事务中读取大量数据时可能发生的内存泄漏问题 #21129
- 修复了在子查询中省略表别名时的语法解析错误问题 #20367
- 修复了查询中
IN
函数的参数为 time 类型时可能返回错误结果的问题 #21290
- 修复了前缀索引和
TiKV
- 修复当列个数大于 255 时,下推返回错误结果集的问题 #9131
- 修复网络隔离时 Region Merge 可能会导致数据丢失的问题 #9108
- 修复使用
latin1
字符集时,ANALYZE
语句会导致 panic 的问题 #9082 - 修复类型转换中将数字转成时间会得到错误结果的问题 #9031
- 修复当开启加密时无法使用 TiDB Lightning 导入数据的问题 #8995
- 修复使用
0.0.0.0
时advertise-status-addr
异常的问题 #9036 - 修复当事务删除 key 时却报 key 已存在的问题 #8930
- 修复 RocksDB cache 映射错误导致的数据错误问题 #9029
- 修复当 Leader 切换时 Follower Read 可能返回旧数据的问题 #9240
- 修复悲观锁下可能读到旧值的问题 #9282
- 修复 transfer leader 后 replica read 可能会读到旧值的问题 #9240
- 修复 TiKV 在 profiling 结束后再收到
SIGPROF
会 panic 的问题 #9229
PD
TiDB Dashboard
TiFlash
- 修复
INFORMATION_SCHEMA.CLUSTER_HARDWARE
中可能包含未被使用的硬盘信息的问题 - 修复 Delta cache 内存占用量估算偏少的问题
- 修复由线程统计信息引起的内存泄露问题
- 修复
Tools
Backup & Restore (BR)
- 修复因 S3 secret access keys 中存在特殊字符而导致失败的问题 #617
TiCDC
- 修复某些异常情况下存在多个 Owner 的问题 #1104
- 修复在 TiKV 节点意外退出或重启恢复情况下 TiCDC 不能正常同步的问题,该 bug 在 v4.0.8 引入 #1198
- 修复在表初始化过程中会向 etcd 中重复写入元数据的问题 #1191
- 修复 schema storage 缓存 TiDB 表信息的过程中因更新表信息延迟或过早 GC 导致同步中断的问题 #1114
- 修复 schema storage 在 DDL 频繁的情况下会消耗过多内存的问题 #1127
- 修复在同步任务暂停或取消之后会产生 goroutine 泄露的问题 #1075
- 增加 Kafka producer 最大重试时间到 600s,避免在下游 Kafka 服务或网络抖动情况下同步中断 #1118
- 修复 Kafka 消息所包含行变更数量不能正常生效的问题 #1112
- 修复当 TiCDC 与 PD 间网络出现抖动,并且同时操作 TiCDC changefeed 暂停和恢复,可能会出现部分表数据没有被同步的问题 #1213
- 修复 TiCDC 与 PD 网络不稳定情况下 TiCDC 可能出现进程非预期退出的问题 #1218
- 在 TiCDC 内部使用全局 PD client,以及修复 PD client 被错误关闭导致同步阻塞的问题 #1217
- 修复 TiCDC owner 节点可能在 etcd watch client 里消耗过多内存的问题 #1224
Dumpling
- 修复在某些情况下 MySQL 链接关闭导致 Dumpling 卡住的问题 #190
TiDB Lightning