title: TiDB 4.0 RC.2 Release Notes
TiDB 4.0 RC.2 Release Notes
发版日期:2020 年 5 月 15 日
TiDB 版本:4.0.0-rc.2
兼容性变化
TiDB
TiKV
- 将加密相关的配置移到 security 分类下,即调整配置项
[encryption]
为[security.encryption]
#7810
- 将加密相关的配置移到 security 分类下,即调整配置项
Tools
重点修复的 Bug
TiDB
- 修复当
WHERE
语句只有一个等值条件时错误选择分区表分区的问题 #17054 - 修复当
WHERE
语句只包含字符串列时构造错误的 Index Range 导致结果错误的问题 #16660 - 修复事务中执行
DELETE
之后再进行唯一索引点查语句 Panic 的问题 #16991 - 修复 GC worker 在有错误发生时可能死锁的问题 #16915
- 避免 TiKV 未宕机仅响应慢情况下的无故 RegionMiss 重试 #16956
- 修改客户端 MySQL 协议握手阶段日志级别为
DEBUG
,以解决干扰日志输出的问题 #16881 - 修复
TRUNCATE
后未按照表定义的PRE_SPLIT_REGIONS
信息进行预切分 Region 的问题 #16776 - 修复两阶段提交中第二阶段遇到 TiKV 不可用重试导致的 Goroutine 暴涨的问题 #16876
- 修复部分表达式不能下推可能导致语句执行 Panic 的问题 #16869
- 修复 IndexMerge 在分区表上执行结果错误的问题 #17124
- 修复因 Memory Tracker 锁竞争引起的宽表性能回退问题 #17234
- 修复当
TiFlash
- 修复库名、表名含特殊字符,系统升级后无法正常启动的问题
新功能
TiDB
- 新增
BACKUP
和RESTORE
语句进行备份与恢复 #16960 - 支持在提交前预检查单个 Region 提交数据量,并在超过阈值时预切分 Region 后再进行提交 #16959
- 新增 Session 作用域变量
LAST_PLAN_FROM_CACHE
,用于指示上一条语句是否命中 Plan Cache #16830 - 支持在慢日志和
SLOW_LOG
表中记录Cop_time
信息 #16904 - 支持在 Grafana 中展示更多 Go Runtime 内存监控指标 #16928
- 支持在 General Log 中输出
forUpdateTS
和Read Consistency
隔离级别信息 #16946 - 支持对 TiKV Region Resolve Lock 请求进行去重 #16925
- 支持
SET CONFIG
语句进行 PD/TiKV 节点配置修改 #16853 - 支持在
CREATE TABLE
语句中指定auto_random
选项 #16813 - 通过为 DistSQL 请求分配 TaskID 让 TiKV 更好地调度处理请求 #17155
- 支持在 MySQL 客户端登录后显示 TiDB server 版本信息 #17187
- 支持在
GROUP_CONCAT
中指定ORDER BY
子句 #16990 - 支持在 Slow Log 中展示
Plan_from_cache
信息,用于指示语句是否命中 Plan Cache #17121 - Dashboard 支持显示 TiFlash 多盘部署容量信息功能
- Dashboard 支持通过 SQL 查询 TiFlash 日志的功能
- 新增
TiKV
- 加密存储适配 tikv-ctl,适配后开启加密存储后通过 tikv-ctl 操作管理集群 #7698
- 新增加密码 Snapshot 中的
lock column famliy
的功能 #7712 - 修改 Raftstore latency 在 Grafana 面板显示方式,采用 heatmap 方便诊断性能抖动问题 #7717
- 支持配置 gRPC 消息大小的上限 #7824
- Grafana 面板中添加了 encryption 相关的监控 #7827
- TiKV 支持 ALPN 协议 #7825
- 添加了更多的关于 Titan 的统计信息 #7818
- 统一线程池支持用客户端提供的 task ID 来区分任务,以避免一个请求被来自同一个事务的另一个请求降低优先级 #7814
- 提升了 batch insert 请求的性能 #7718
PD
- 下线节点时放开 Remove peer 的速度 #2372
TiFlash
- 调整 Grafana 中 Read Index 的 Count 图表的名称为 Ops
- 优化系统负载较低时打开文件描述符的数据,降低系统资源占用量
- 新增 capacity 配置参数用于限制存储数据容量
Tools
Bug 修复
TiDB
- 完善多个算子中判断是否使用向量化进行表达式执行的逻辑 #16383
- 修复 IndexMerge Hint 未能正确检查数据库名称的问题 #16932
- 修复 Sequence 可以被
TRUNCATE
的问题 #17037 - 修复 Sequence 可以被
INSERT
/UPDATE
/ANALYZE
/DELETE
的问题 #16957 - 修复启动阶段执行的内部 SQL 在 Statement Summary 表中未能正确记录为内部 SQL 的问题 #17062
- 修复因 TiFlash 支持但 TiKV 不支持的过滤条件仅被下推到 IndexLookupJoin 算子之下导致的语句报错问题 #17036
- 修复开启 Collation 后,
LIKE
表达式可能出现的并发问题 #16997 - 修复开启 Collation 后,
LIKE
函数无法正确构造 Range 查询索引的问题 #16783 - 修复触发填充 Plan Cache 语句后执行
@@LAST_PLAN_FROM_CACHE
返回值错误的问题 #16831 - 修复为 IndexMerge 计算候选路径时漏掉 Index 上的
TableFilter
的问题 #16947 - 修复使用 MergeJoin Hint 并存在 TableDual 算子时无法产生物理查询计划的问题 #17016
- 修复 Statement Summary 表的
Stmt_Type
列值大小写错误的问题 #17018 - 修复因不同用户使用相同的 tmp-storage-path 导致服务无法启动报
Permission Denied
错误问题 #16996 - 修复返回结果类型由多个输入列决定的表达式(例如:
CASE WHEN
)结果类型NotNullFlag
标识推导不正确的问题 #16995 - 修复 Green GC 在有 Dirty Store 的情况下可能遗留锁的问题 #16949
- 修复 Green GC 在遇到单个 key 有多个不同锁的情况下会遗留下锁的问题 #16948
- 修复
INSERT VALUE
中子查询引用父查询列导致插入值错误的问题 #16952 - 修复对 Float 值进行
AND
操作结果不正的问题 #16666 - 修复 Expensive Log 日志中
WAIT_TIME
字段信息错误的问题 #16907 - 修复悲观事务模式执行语句
SELECT FOR UPDATE
不能被记录到 Slow Log 的问题 #16897 - 修复在
Enum
或Set
类型列上执行SELECT DISTINCT
时结果错误的问题 #16892 - 修复
auto_random_base
在SHOW CREATE TABLE
的显示问题 #16864 - 修复
WHERE string_value
结果不正确的问题 #16559 - 修复
GROUP BY
Window Function 错误消息和 MySQL 不一致问题 #16165 - 修复
FLASH TABLE
语句在数据库名有大写字母时执行失败的问题 #17167 - 修复 Projection 执行器内存消耗记录不准确的问题 #17118
- 修复
SLOW_QUERY
表在不同时区下时间过滤不正确的问题 #17164 - 修复 IndexMerge 和虚拟生成列一起使用时 Panic 的问题 #17126
- 修复
INSTR
和LOCATE
函数大小写问题 #17068 - 修复开启
tidb_allow_batch_cop
配置后频繁出现tikv server timeout
错误的问题 #17161 - 修复 Float 类型进行
XOR
操作结果和 MySQL 8.0 不一致的问题 #16978 - 修复
ALTER TABLE REORGANIZE PARTITION
不支持但执行未报错的问题 #17178 - 修复
EXPLAIN FORMAT="dot" FOR CONNECTION ID
可能遇到不支持展示的 Plan 发生报错的问题 #17160 - 修复 Prepared Statement 在 Statement Summary 表中
EXEC_COUNT
列的记录问题 #17086 - 修复设置 Statement Summary 系统变量时未检查值是否合法的问题 #17129
- 修复启用 Plan Cache 时使用越界值查询
UNSIGNED BIGINT
主键报错的问题 #17120 - 修复 Grafana TiDB Summary 面板基于机器实例和请求类型展示 QPS 不正确的问题 #17105
TiKV
- 修复 restore 后生成大量空 Region 的问题 #7632
- 修复 Raftstore 收到乱序 read index 响应时会引发 panic 的问题 #7370
- 修复启用统一线程池时,不会验证 storage 或
coprocessor read pool
配置是否无效的问题 #7513 - 修复 TiKV server 关闭时,join 可能 panic 的问题 #7713
- 修复通过诊断 API 搜索慢日志无返回结果的问题 #7776
- 修复节点长时间运行时,系统会产生较多内存碎片的问题 #7556
- 修复部分情况下因存储无效日期导致 SQL 执行失败的问题 #7268
- 修复从 GCS 进行恢复数据不能正确运行的问题 #7739
- 修复存储加密时未进行 KMS Key Id 验证的问题 #7719
- 修复 Coprocessor 在不同架构编译器下潜在正确性问题 #7714 #7730
- 修复启用加密时出现
snapshot ingestion
错误的问题 #7815 - 修复当改写配置文件时发生
Invalid cross-device link
的问题 #7817 - 修复将配置文件写入到空文件中时会出现错误的 toml 格式的问题 #7817
- 修复 Raftstore 中已销毁的 Peer 仍然可能处理请求的问题 #7836
PD
TiFlash
- 修复部分场景错误上报已使用空间信息的问题
Tools
TiDB Binlog
TiCDC
Backup & Restore (BR)
- 修复 BR 恢复带有
auto_random
属性的表之后,插入数据有一定概率触发 duplicate entry 错误的问题 #241
- 修复 BR 恢复带有