TiDB 4.0 RC.1 Release Notes

发版日期:2020 年 4 月 28 日

TiDB 版本:4.0.0-rc.1

兼容性变化

  • TiKV

    • 默认关闭 hibernate region #7618
  • TiDB Binlog

    • Drainer 增加对 Sequence DDL 的支持 #950

重点修复的 Bug

  • TiDB

    • 修复由于未检查 MemBuffer,事务内执行 INSERT ... ON DUPLICATE KEY UPDATE 语句插入多行重复数据可能出错的问题 #16689
    • 修复 lock 多行重复 keys 时导致数据索引不一致的问题 #16769
    • 修复回收空闲 gRPC 连接导致 TiDB panic 的问题 #16303
  • TiKV

    • 修复 TiDB 探活请求触发的死锁问题 #7540
    • 修复事务的 min commit ts 可能溢出、影响数据正确性的问题 #7642
  • TiFlash

    • 修正多数据路径配置下进行 rename table 会导致数据丢失的问题
    • 修正当 Region 处于 merge 状态时读取产生的数据错误
    • 修正当 Region 处于非 normal 状态时读取产生的数据错误
    • 修正 TiFlash 中表名的映射方式以正确支持 recover table/flashback table
    • 修正数据存储路径以解决 rename table 时潜在的数据丢失问题
    • 修正 Super batch 开启后,有一定概率 TiDB panic 的问题
    • 修正在线更新时的读模型以优化读性能
  • TiCDC

    • 修复 TiCDC 内部维护的 schema 信息对于读写操作时序问题没有正确处理导致同步失败问题 #438 #450 #478 #496
    • 修复 TiKV client 遇到部分 TiKV 异常没有正确维护内部资源的 bug #499 #492
    • 修复节点异常残留元数据信息没有正确清理的 bug #488 #504
    • 修复 TiKV client 没有正确处理 prewrite 重复发送的问题 #446
    • 修复 TiKV client 没有正确处理在初始化前接收到冗余 prewrite 的问题 #448
  • Backup & Restore (BR)

    • 修复关闭 checksum 情况下,仍然执行 checksum 的问题 #223
    • 修复 TiDB 开启 auto-random 或 alter-pk 时,增量备份失败的问题 #230 #231

新功能

  • TiDB

    • 支持发送 batch coprocessor 请求给 TiFlash #16226
    • 默认打开 Coprocessor cache #16710
    • 在 SQL 语句的特殊注释中,只有被注册了语句片段才能被 parser 正常解析,否则将被忽略 #16157
    • 支持使用 SHOW CONFIG 语法显示 PD 和 TiKV 的配置 #16475
  • TiKV

    • 支持在备份到 S3 时使用用户提供的 KMS key 进行服务端加密 #7630
    • 支持基于负载的 Region split #7623
    • 支持 common name 验证 #7468
    • 通过检查文件锁避免多个 TiKV 实例绑定相同的地址 #7447
    • Encryption at rest 支持 AWS KMS #7465
  • Placement Driver (PD)

    • 移除 config manager 以使其它组件自行控制它们的配置 #2349
  • TiFlash

    • 添加 DeltaTree 引擎读写负载相关 metrics 上报
    • 缓存 handle 列和 version 列减小单次读请求的磁盘 I/O
    • 增加了 TiFlash 对于 FromUnixTimeDate_format 函数的支持
    • 根据第一块盘估算全局状态并上报
    • Grafana 添加 DeltaTree 引擎读写负载相关图表
    • 优化 TiFlash chunk encode decimal 的数据
    • 实现了 Diagnostics(SQL 诊断)的 gRPC API,以支持 INFORMATION_SCHEMA.CLUSTER_INFO 等系统表的查询
  • TiCDC

    • 在 Kafka sink 模块提供发送批量消息支持 #426
    • 支持在 processor 内使用文件排序 #477
    • 增加自动 resolve lock 的支持 #459
    • 增加自动向 PD 设置 TiCDC 服务级别 safepoint 的功能 #487
    • 增加数据同步时的时区配置 #498
  • Backup & Restore (BR)

    • 支持在存储的 URL 中配置 S3/GCS #246

Bug 修复

  • TiDB

    • 修复系统表由于 unsigned 列定义导致无法正确显示负数的问题 #16004
    • 当使用 use_index_merge hint 包含不存在的索引时添加警告 #15960
    • 禁止多个 TiDB server 共享同一个临时目录 #16026
    • 修复打开 plan cache 时,执行 explain for connection 语句 panic 的问题 #16285
    • 修复显示 tidb_capture_plan_baselines 系统变量不正确的问题 #16048
    • 修复 prepare 语句中的 group by 语句解析错误的问题 #16377
    • 修复 analyze primary key 可能 panic 的问题 #16081
    • 修复 cluster_info 系统表中 TiFlash 节点信息错误的问题 #16024
    • 修复 index merge 可能 panic 的问题 #16360
    • 修复 index merge 遇到 generated column 时导致结果错误的问题 #16359
    • 修复 show create table 语句显示 sequence 默认值错误的问题 #16526
    • 修复主键使用 sequence 作为默认值时出现 not-null 的错误的问题 #16510
    • 修复当 TiKV 持续返回 StaleCommand 期间执行 SQL 卡住不报错的问题 #16530
    • 修复 CREATE DATABASE 时仅指定 COLLATE 时会报错的问题,同时在 SHOW CREATE DATABASE 结果中添加缺失的 COLLATE 部分 #16540
    • 修复打开 plan-cache 时,分区裁剪失败的问题 #16723
    • 修复点查在 handle 溢出时返回错误结果的问题 #16755
    • 修复等值时间查询 slow_query 系统表返回错误结果的问题 #16806
  • TiKV

    • 解决 OpenSSL 的安全性问题:CVE-2020-1967 #7622
    • 避免将 BatchRollback 产生的 rollback 记录标为保护的记录以改善冲突较多场景下的性能 #7604
    • 修复锁竞争严重的场景下,不必要地唤醒事务导致多余的重试和性能下降的问题 #7551
    • 修复多次 merge 时,Region 可能卡住的问题 #7518
    • 修复删除 learner 时,learner 可能并未被删除的问题 #7518
    • 修复 follower read 可能使 raft-rs panic 的问题 #7408
    • 修复 SQL 可能因 “group by constant” 错误失败的问题 #7383
    • 修复当一个乐观锁对应的 primary lock 是悲观锁时,该乐观锁可能阻塞读的问题 #7328
  • Placement Driver (PD)

    • 修复部分 API TLS 认证失败的问题 #2363
    • 修复 config API 不能识别带有前缀的配置项的问题 #2354
    • 修复找不到 scheduler 时会返回 500 错误的问题 #2328
    • 修复 scheduler config balance-hot-region-scheduler list 命令返回 404 错误的问题 #2321
  • TiFlash

    • 禁用存储引擎的粗糙索引优化
    • 修正对 Region 进行 resolve lock 时遇到需要跳过的 lock 抛异常的问题
    • 修正 Coprocessor 统计信息收集的 NPE
    • 修正 Region meta 的检查以保证 Region Split/Region Merge 流程的正确性
    • 修正对 Coprocessor response 大小未做估算导致的消息大小超过 gRPC 限制的问题
    • 修正 TiFlash 对 AdminCmdType::Split 命令的处理