title: TiDB 3.0.5 Release Notes

TiDB 3.0.5 Release Notes

发版日期:2019 年 10 月 25 日

TiDB 版本:3.0.5

TiDB Ansible 版本:3.0.5

TiDB

  • SQL 优化器
    • 支持对 Window Functions 进行边界检查 #12404
    • 修复 partition 表上的 IndexJoin 返回错误结果的问题 #12712
    • 修复外连接 Apply 算子上层的 ifnull 函数返回错误结果的问题 #12694
    • 修复当 UPDATEwhere 条件中包含子查询时更新失败的问题 #12597
    • 修复当查询条件中包含 cast 函数时 outer join 被错误转化为 inner join 的问题 #12790
    • 修复 AntiSemiJoin 的 join 条件中错误的表达式传递 #12799
    • 修复初始化统计信息时由于浅拷贝造成的统计信息出错问题 #12817
    • 修复 TiDB 中 str_to_date 函数在日期字符串和格式化字符串不匹配的情况下,返回结果与 MySQL 不一致的问题 #12725
  • SQL 执行引擎
    • 修复在 from_unixtime 函数处理 null 时发生 panic 的问题 #12551
    • 修复 Admin Cancel DDL jobs 时报 invalid list index 错的问题 #12671
    • 修复使用 Window Functions 时发生数组越界的问题 #12660
    • 改进 AutoIncrement 列隐式分配时的行为,与 MySQL 自增锁的默认模式 (“consecutive” lock mode) 保持一致:对于单行 Insert 语句的多个自增 AutoIncrement ID 的隐式分配,TiDB 保证分配值的连续性。该改进保证 JDBC getGeneratedKeys() 方法在任意场景下都能得到正确的结果。#12602
    • 修复当 HashAgg 作为 Apply 子节点时查询 hang 住的问题 #12766
    • 修复逻辑表达式 ANDOR 在涉及类型转换时返回错误结果的问题 #12811
  • Server
    • 实现修改事务 TTL 的接口函数,以助后续支持大事务 #12397
    • 支持将事务的 TTL 按需延长(最长可到 10min),用于支持悲观事务 #12579
    • 将 TiDB 缓存 schema 变更及相关表信息的次数从 100 调整为 1024,且支持通过 tidb_max_delta_schema_count 系统变量修改 #12502
    • 更新了 kvrpc.Cleanup 协议的行为,不再清理未超时事务的锁 #12417
    • 支持将 Partition 表信息记录到 information_schema.tables#12631
    • 支持通过 region-cache-ttl 配置修改 Region Cache 的 TTL #12683
    • 支持在慢日志中打印执行计划压缩编码后的信息,此功能默认开启,可以通过 slow-log-plan 配置或者 tidb_record_plan_in_slow_log 变量进行开关控制。另外支持 tidb_decode_plan 函数将慢日志中的执行计划列编码信息解析成执行计划信息。#12808
    • information_schema.processlist 表中支持显示内存使用信息 #12801
    • 修复 TiKV Client 判断连接空闲时可能出错并出现非预期的告警的问题 #12846
    • 修复 tikvSnapshot 没有正确对 BatchGet() 的 KV 结果进行缓存,导致 INSERT IGNORE 语句性能有所下降的问题 #12872
    • 修复了因建立到部分 KV 服务的连接较慢最终导致 TiDB 响应速度相对变慢的情况 #12814
  • DDL
    • 修复 Create Table 操作对 Set 列不能正确设置 Int 类型默认值的问题 #12267
    • 支持 Create Table 语句中建唯一索引时带多个 Unique #12463
    • 修复使用 Alter Table 添加 Bit 类型列时,对存在的行填充此列的默认值可能出错的问题 #12489
    • 修复 Range 分区表以 Date 或 Datetime 类型列作为分区键时,添加分区失败的问题 #12815
    • 对于 Date 或 Datetime 类型列作为分区键的 Range 分区表,在建表或者添加分区时,支持检查分区类型与分区键类型的统一性 #12792
    • 在创建 Range 分区表时,添加对 Unique Key 列集合需大于等于分区列集合的检查 #12718
  • Monitor
    • 添加统计 Commit 与 Rollback 操作的监控到 Transaction OPS 面板 #12505
    • 添加统计 Add Index 操作进度的监控 #12390

TiKV

  • Storage
    • 悲观事务新特性:事务 Cleanup 接口支持只清理 TTL 已经过期的锁 #5589
    • 修复事务 Primary key 的 Rollback 被折叠的问题 #5646#5671
    • 修复悲观锁下点查可能返回历史旧版本的问题 #5634
  • Raftstore
    • 减少 Raftstore 消息的 flush 操作,以提升性能,减少 CPU 占用 #5617
    • 优化获取 Region 的大小和 key 个数估计值的开销,减少心跳的开销,降低 CPU 占用 #5620
    • 修复 Raftstore 取到非法数据时打印错误日志并 panic 的问题 #5643
  • Engine
    • 打开 RocksDB force_consistency_checks,提高数据安全性 #5662
    • 修复 Titan 并发 flush 情况下有可能造成数据丢失的问题 #5672
    • 更新 rust-rocksdb 版本以避开 intra-L0 compaction 导致 TiKV 崩溃重启的问题 #5710

PD

  • 提高 Region 占用空间的精度 #1782
  • 修复 --help 命令输出内容 #1763
  • 修复 TLS 开启后 http 请求重定向失败的问题 #1777
  • 修复 pd-ctl 使用 store shows limit 命令 panic 的问题 #1808
  • 提高 label 监控可读性以及当 leader 发生切换后重置原 leader 的监控数据,防止误报 #1815

Tools

  • TiDB Binlog
    • 修复 ALTER DATABASE 相关 DDL 会导致 Drainer 异常退出的问题 #769
    • 支持对 Commit binlog 查询事务状态信息,提升同步效率 #757
    • 修复当 Drainer 的 start_ts 大于 Pump 中最大的 commit_ts 时,有可能引起 Pump panic 的问题 #758
  • TiDB Lightning
    • 整合 Loader 全量逻辑导入功能,支持配置 backend 模式 #221

TiDB Ansible

  • 增加 TiDB 添加索引速度的监控 #986
  • 精简配置文件内容,移除不需要用户配置的参数 #1043c#998
  • 修复 performance read 和 performance write 监控表达式错误的问题 #e90e7
  • 更新 raftstore CPU 使用率的监控显示方式以及 raftstore CPU 使用率的告警规则 #992
  • 更新 Overview 监控面板中 TiKV 的 CPU 监控项,过滤掉多余的监控内容 #1001