TiDB 3.0.6 Release Notes

发版日期:2019 年 11 月 28 日

TiDB 版本:3.0.6

TiDB Ansible 版本:3.0.6

TiDB

  • SQL 优化器
    • 修复窗口函数 AST Restore SQL 文本后结果不正确问题,over w 不应被 restore 成 over (w) #12933
    • 修复 stream aggregation 下推给 double read 的问题 #12690
    • 修复 SQL bind 中引号处理不正确的问题 #13117
    • 优化 select max(_tidb_rowid) from t 场景,避免全表扫 #13095
    • 修复当查询语句中包含变量赋值表达式时查询结果不正确的问题 #13231
    • 修复 UPDATE 语句中同时包含子查询和 generated column 时结果错误的问题;修复 UPDATE 语句中包含不同数据库的两个表名相同的表时,UPDATE 执行报错的问题 #13350
    • 支持用 _tidb_rowid 做点查 #13416
    • 修复分区表统计信息使用错误导致生成执行计划不正确的问题 #13628
  • SQL 执行引擎
    • 修复 year 类型对于无效值的处理时和 MySQL 不兼容问题 #12745
    • INSERT ON DUPLICATE UPDATE 语句中复用 Chunk 以降低内存开销 #12998
    • 添加内置函数 JSON_VALID 的支持 #13133
    • 支持在分区表上执行 ADMIN CHECK TABLE #13140
    • 修复对空表进行 FAST ANALYZE 时 panic 的问题 #13343
    • 修复在包含多列索引的空表上执行 Fast Analyze 时 panic 的问题 #13394
    • 修复当 WHERE 子句上有 UNIQUE KEY 的等值条件时,估算行数大于 1 的问题 #13382
    • 修复当 TiDB 开启 Streaming 后返回数据有可能重复的问题 #13254
    • CMSketch 中出现次数最多的 N 个值抽取出来,提高估算准确度 #13429
  • Server
    • 当 gRPC 请求超时时,提前让发往 TiKV 的请求失败 #12926
    • 添加以下虚拟表:#13009
      • performance_schema.tidb_profile_allocs
      • performance_schema.tidb_profile_block
      • performance_schema.tidb_profile_cpu
      • performance_schema.tidb_profile_goroutines
    • 修复 query 在等待悲观锁时,kill query 不生效的问题 #12989
    • 当悲观事务上锁失败,且事务只涉及一个 key 的修改时,不再异步回滚 #12707
    • 修复 split Region 请求的 response 为空时 panic 的问题 #13092
    • 悲观事务在其他事务先锁住导致上锁失败时,避免重复 backoff #13116
    • 修改 TiDB 检查配置时的行为,出现不能识别的配置选项时,打印警告日志 #13272
    • 支持通过 /info/all 接口获取所有 TiDB 节点的 binlog 状态 #13187
    • 修复 kill connection 时可能出现 goroutine 泄漏的问题 #13251
    • innodb_lock_wait_timeout 参数在悲观事务中生效,用于控制悲观锁的等锁超时时间 #13165
    • 当悲观事务的 query 被 kill 后,停止更新悲观事务的 TTL,避免其他的事务做不必要的等待 #13046
  • DDL
    • 修复 SHOW CREATE VIEW 结果与 MySQL 不一致的问题 #12912
    • 支持基于 UNION 创建 View,例如 create view v as select * from t1 union select * from t2 #12955
    • slow_query 表添加更多事务相关的字段:#13072
      • Prewrite_time
      • Commit_time
      • Get_commit_ts_time
      • Commit_backoff_time
      • Backoff_types
      • Resolve_lock_time
      • Local_latch_wait_time
      • Write_key
      • Write_size
      • Prewrite_region
      • Txn_retry
    • 创建表时如果表包含 collate 则列使用表的 collate 而不是系统默认的字符集 #13174
    • 创建表时限制索引名字的长度 #13310
    • 修复 rename table 时未检查表名长度的问题 #13346
    • 新增 alter-primary-key 配置来支持 TiDB add/drop primary key,该配置默认关闭 #13522

TiKV

  • 修复 acquire_pessimistic_lock 接口返回错误 txn_size 的问题 #5740
  • 限制 GC worker 每秒写入量,降低对性能的影响 #5735
  • 优化 lock manager 的准确度 #5845
  • 悲观锁支持 innodb_lock_wait_timeout #5848
  • 添加 Titan 相关配置检测 #5720
  • 支持用 tikv-ctl 动态修改 GC 限流配置:tikv-ctl --host=ip:port modify-tikv-config -m server -n gc.max_write_bytes_per_sec -v 10MB #5957
  • 减少无用的 clean up 请求,降低死锁检测器的压力 #5965
  • 悲观事务 prewrite 时避免 TTL 被缩短 #6056
  • 修复 Titan 可能发生 missing blob file 的问题 #5968
  • 修复 Titan 可能导致 RocksDBOptions 不生效的问题 #6009

PD

  • 为每个过滤器添加一个名为 ActOn 的新维度,以指示每个 scheduler 和 checker 受过滤器的影响。删除两个未使用的过滤器:disconnectFilterrejectLeaderFilter #1911
  • 当 PD 生成时间戳的时间超过5毫秒时,将打印一条 warning 日志 #1867
  • 当存在 endpoint 不可用时,降低 client 日志级别 #1856
  • 修复 region_syncer 同步时 gRPC 消息包可能过大的问题 #1952

Tools

  • TiDB Binlog
    • Drainer 配置 initial-commit-ts 为 -1 时,从 PD 处获取初始同步时间戳 #788
    • Drainer checkpoint 存储与下游解耦,支持选择配置 checkpoint 保存到 MySQL 或者本地文件 #790
    • 修复 Drainer 在配置同步库表过滤使用空值会导致 Panic 的问题 #801
    • 修复 Drainer 因为向下游应用 Binlog 失败而 Panic 后进程没有退出而是进入死锁状态的问题 #807
    • 修复 Pump 下线因为 gRPC 的 GracefulStop 流程而 hang 住的问题 #817
    • 修复 Drainer 在 TiDB 执行 DROP COLUMN DDL 期间收到缺少一列的 binlog 而同步出错的问题(要求 TiDB 3.0.6 以上)#827
  • TiDB Lightning
    • TiDB Backend 模式新增 max-allowed-packet 配置项,默认值为 64M #248