TiDB 5.1.2 Release Notes

发版日期:2021 年 9 月 27 日

TiDB 版本:5.1.2

兼容性更改

  • TiDB

    • 以下 Bug 修复涉及执行结果变化,可能引起兼容性变化:
      • 修复了 greatest(datetime) union null 返回空字符串的问题 #26532
      • 修复了 having 子句可能执行错误的问题 #26496
      • 修复了当 between 表达式两边的 collation 不一致会导致查询结果错误的问题 #27146
      • 修复了当 group_concat 函数包含非 bin 的 collation 时查询结果错误的问题 #27429
      • 修复了当开启 New Collation 时,在多列上执行 count(distinct) 表达式结果错误的问题 #27091
      • 修复了 extract 函数的参数是负数时查询结果错误的问题 #27236
      • 修复了当 SQL_MODE 为 ‘STRICT_TRANS_TABLES’ 时,插入非法时间不报错的问题 #26762
      • 修复了当 SQL_MODE 为 ‘NO_ZERO_IN_DATE’ 时,使用非法的默认时间不报错的问题 #26766
  • Tools

    • TiCDC

      • 将兼容版本从 5.1.0-alpha 改为 5.2.0-alpha #2659

改进提升

  • TiDB

    • 根据直方图行数来触 auto-analyze,提升 auto-analyze 触发的准确度 #24237
  • TiKV

    • 支持动态更改 TiCDC 配置项 #10645
    • 减少 Resolved TS 消息的大小以节省网络带宽 #2448
    • 支持限制每个 Store 发送的心跳包信息中 peer stats 的数量 #10621
  • PD

    • 存在 scatter range 调度器情况下,允许空 Region 被调度,并可以在该调度器中使用单独的 tolerance 配置项 #4117
    • 提升 PD 之间同步 Region 信息的性能 #3933
    • 支持根据 Operator 的生成情况动态调整 Store 的重试次数 #3744
  • TiFlash

    • 支持 DATE() 函数
    • 为 Grafana 面板增加每个实例的写入吞吐
    • 优化 leader-read 流程的性能
    • 加速 MPP 任务取消的流程
  • Tools

    • TiCDC

      • 当统一分类器使用内存进行分类时,优化内存管理 #2553
      • 当并发性高时,优化 workerpool 以减少 goroutines 的数量 #2488
      • 当一个表的区域从一个 TiKV 节点转移出去时,减少 goroutine 的使用 #2284
      • 添加一个全局 gRPC 连接池并在 KV 客户端之间共享 gRPC 连接 #2534
      • 禁止跨主要和次要版本操作 TiCDC 集群 #2599
    • Dumpling

      • 支持备份一些无法执行 START TRANSACTION ... WITH CONSISTENT SNAPSHOTSHOW CREATE TABLE 语句的 MySQL 兼容数据库 #309

Bug 修复

  • TiDB

    • 修复 hash 列为 ENUM 类型时 index hash join 的结果可能出错的问题 #27893
    • 修复极少数情况下 batch client 复用空闲连接可能阻塞请求发送的问题 #27678
    • 修复了 FLOAT64 类型的溢出检查与 MySQL 不一致的问题 #23897
    • 修复 TiDB 把 pd is timeout 错误返回成 unknown 的问题 #26147
    • 修复了 case when 表达式的字符集和排序规则错误的问题 #26662
    • 修复 MPP 查询可能返回 can not found column in Schema column 错误的问题 #28148
    • 修复 TiFlash 宕机可能导致 TiDB Panic 的问题 #28096
    • 修复使用谓词 enum like 'x%' 可能导致错误结果的问题 #27130
    • 修复当使用 IndexLookupJoin 时公共表达式 (CTE) 死锁的问题 #27410
    • 修复死锁重试被错误记录到 INFORMATION_SCHEMA.DEADLOCKS 表的问题 #27400
    • 修复分区表上的 TABLESAMPLE 查询结果排序不生效的问题 #27349
    • 移除未使用的 /debug/sub-optimal-plan HTTP 接口相关逻辑 #27265
    • 修复 hash 分区表处理无符号数据时查询返回错误结果的问题 #26569
    • 修复当 NO_UNSIGNED_SUBTRACTION 被设置时创建分区出错的问题 #26765
    • 修复 Apply 转换为 Join 时缺失 distinct 的问题 #26958
    • 为处于恢复状态的 TiFlash 节点设置一段屏蔽时间,避免在此时间内阻塞查询 #26897
    • 修复 CTE 被引用多次时可能出现的 bug 的问题 #26212
    • 修复使用 MergeJoin 时可能造成 CTE 出现 bug 的问题 #25474
    • 修复当 Join 分区表和普通表时 select for update 不能正确上锁的问题 #26251
    • 修复当 Join 分区表和普通表时 select for update 语句结果报错的问题 #26250
    • 修复 PointGet 不能使用轻量清锁的问题 #26562
  • TiKV

    • 修复当 TiKV 从 v3.x 升级至较高版本后出现 Panic 的问题 #10902
    • 修复损坏的快照文件可能会造成磁盘空间无法回收的问题 #10813
    • 当 slogger 线程过载且队列已满时,删除日志而不是阻塞线程 #10841
    • 使 TiKV Coprocessor 慢日志只考虑处理请求所花费的时间 #10841
    • 修复当处理 Coprocessor 请求时因超时而导致 Panic 的问题 #10852
    • 修复 TiKV 在启用 Titan 并从 v5.0 以前的版本升级时出现 Panic 的问题 #10842
    • 修复高版本的 TiKV 无法回滚到 v5.0.x 的问题 #10842
    • 修复 TiKV 可能会在 RocksDB 读取文件之前删除文件的错误 #10438
    • 修复遗留的悲观锁导致的解析失败的问题 #26404
  • PD

    • 修复 PD 未能及时修复 Down Peer 副本的问题 #4077
    • 修复 replication.max-replicas 更新后默认的 Placement Rules 副本数量不变的问题 #3886
    • 修复 PD 在扩容 TiKV 时可能会 Panic 的问题 #3868
    • 修复当集群中存在 evict leader 调度器时,PD 热点调度无法工作的问题 #3697
  • TiFlash

    • 修复无法建立 MPP 连接时出现异常结果的问题
    • 修复多盘部署时数据不一致的潜在问题
    • 修复高负载时出现 MPP 查询结果错误的问题
    • 修复 MPP 查询卡死的潜在问题
    • 修复并发执行节点初始化与 DDL 操作时出现异常的问题
    • 修复当查询过滤条件包含诸如 CONSTANT<<=>>=COLUMN 时出现错误结果的问题
    • 修复并发执行多个 DDL 操作和 Apply Snapshot 操作时出现异常的潜在问题
    • 修复写入压力大时 metrics 中 store size 不准确的问题
    • 修复 TiFlash 长时间运行后无法回收 Delta 历史数据的潜在问题
    • 修复开启 New Collation 时查询结果错误的问题
    • 修复解锁出现异常的潜在问题
    • 修复 metrics 显示错误值的问题
  • Tools

    • Backup & Restore (BR)

      • 修复了备份数据和恢复数据时显示的平均速度数值不准确的问题 #1405
    • Dumpling

      • 修复特定 MySQL 版本(8.0.3,8.0.23)下,show table status 返回结果不正确导致 dump 阶段卡死的问题 #333
      • 修复 CLI 在默认 sort-engine 选项上与 4.0.x 集群的兼容性问题 #2373
    • TiCDC

      • 修复未充分考虑字符串类型的值可能是 string[]byte 时,转换为 JSON 格式可能导致 TiCDC 进程崩溃的问题 #2758
      • 降低 gRPC 的 window size 以避免出现 OOM 的情况 #2673
      • 修复内存压力较高时 gRPC 的 keepalive 错误 #2202
      • 修复 unsigned tinyint 导致 TiCDC 崩溃的问题 #2648
      • 修复 TiCDC Open Protocol 下输出空值的问题。修复后,在开放协议下,未包含变更的事务 TiCDC 处理时不再输出空值 #2612
      • 修复手动重启 TiCDC 时 DDL 处理存在的问题 #2603
      • 修复操作元数据时,EtcdWorker 的快照隔离可能被破坏的问题 #2559
      • 修复 TiCDC 在重新调度 table 时多个 processors 可能向同一个 table 写数据的问题 #2230
      • 修复 TiCDC 遇到 ErrSchemaStorageTableMiss 错误时可能导致 changefeed 被意外重置的问题 #2422
      • 修复 TiCDC 遇到 ErrGCTTLExceeded 错误时 changefeed 不能被移除的问题 #2391
      • 修复 TiCDC 同步大表到 cdclog 失败的问题 #1259#2424