title: TiDB 2.1.17 Release Notes

TiDB 2.1.17 Release Notes

发版日期:2019 年 9 月 11 日

TiDB 版本:2.1.17

TiDB Ansible 版本:2.1.17

  • 新特性

    • TiDB 的 SHOW TABLE REGIONS 语法新增 WHERE 条件子句
    • TiKV、PD 新增 config-check 功能,用于配置项检查
    • pd-ctl 新增 remove-tombstone 命令,支持清理 tombstone store 记录
    • Reparo 新增 worker-counttxn-batch 配置项,用于控制恢复速率
  • 改进提升

    • PD 优化调度流程,支持主动下发调度
    • TiKV 优化启动流程,减少重启节点带来的抖动
  • 行为变更

    • TiDB 慢日志中的 start ts 由最后一次重试的时间改为第一次执行的时间
    • TiDB 慢日志中的 Index_ids 字段替换为 Index_names 字段,提升慢日志易用性
    • TiDB 配置文件中添加 split-region-max-num 参数,用于调整 SPLIT TABLE 语法允许的最大 Region 数量,默认配置下,允许的数量由 1,000 增加至 10,000

TiDB

  • SQL 优化器
    • 修复 EvalSubquery 在构建 Executor 出现错误时,错误信息没有被正确返回的问题 #11811
    • 修复 Index Lookup Join 中,外表的行数大于一个 batch 时,查询的结果可能不正确的问题;扩大 Index Lookup Join 的作用范围:可以使用 UnionScan 作为 IndexJoin 的子节点 #11843
    • 针对统计信息的反馈过程可能产生失效 Key 的情况,SHOW STAT_BUCKETS 语句现在增加了失效 Key 的显示,例如:invalid encoded key flag 252 #12098
  • SQL 执行引擎
    • 修复 CAST 函数在进行数值类型转换时,首先将数值转换为 UINT 导致一些结果不正确的问题(例如,select cast(13835058000000000000 as double)#11712
    • 修复 DIV 运算的被除数为 DECIMAL 类型且运算含有负数时,运算结果可能不正确的问题 #11812
    • 添加 ConvertStrToIntStrict 函数,修复执行 SELECT/EXPLAIN 语句时,一些字符串转换 INT 类型结果与 MySQL 不兼容的问题 #11892
    • 修复使用 EXPLAIN ... FOR CONNECTION 语法时,stmtCtx 没有正确设置导致 Explain 结果可能不正确的问题 #11978
    • 修复 unaryMinus 函数,当 Int 结果溢出时,返回结果类型没有为 Decimal 导致与 MySQL 不兼容的问题 #11990
    • 修复 LOAD DATA 语句执行时,计数顺序导致的 last_insert_id() 可能不正确的问题 #11994
    • 修复用户显式、隐式混合写入自增列数据时,last_insert_id() 可能不正确的问题 #12001
    • 修复一个 JSON_UNQUOTE 函数兼容性问题:只有在双引号 " 内的值需要 Unquote,例如 SELECT JSON_UNQUOTE("\\\\") 应当为 “\\“(不进行 Unquote)#12096
  • Server
    • TiDB 事务重试时,记录在慢日志中的 start ts 由最后一次重试的时间改为第一次执行的时间 #11878
    • LockResolver 中添加事务的 Key 数量:当 Key 数量较少时,可以避免对整个 Region 的 Scan 操作,减小清锁的代价 #11889
    • 修复慢日志中,succ 字段值可能不正确的问题 #11886
    • 将慢日志中的 Index_ids 字段替换为 Index_names 字段,提升慢日志易用性 #12063
    • 修复 Duration 内容中包含 - 时(例如 select time(‘--’)),TiDB 解析为 EOF Error 导致连接断开的错误 #11910
    • 改进 RegionCache:当一个 Region 失效时,它将会更快地从 RegionCache 中移除,减少向该 Region 发送请求的个数 #11931
    • 修复 oom-action = "cancel" 时,当 Insert Into … Select 语句发生 OOM,OOM Panic 没有被正确处理而导致连接断开的问题 #12126
  • DDL
    • tikvSnapshot 添加逆序扫描接口用于高效地查询 DDL History Job,使用该接口后 ADMIN SHOW DDL JOBS 的执行时间有明显降低 #11789
    • 改进 CREATE TABLE ... PRE_SPLIT_REGION 的语义:当指定 PRE_SPLIT_REGION = N 时,将预切分的 Region 个数由 2^(N-1) 改为 2^N #11797
    • 根据线上负载与 Add Index 相互影响测试,调小 Add Index 后台工作线程的默认参数以避免对线上负载造成较大影响 #11875
    • 改进 SPLIT TABLE 语法的行为:当使用 SPLIT TABLE ... REGIONS N 对 Region 切分时,会生成 N 个数据 Region 和 1 个索引 Region #11929
    • 在配置文件中添加 split-region-max-num 参数,使得 SPLIT TABLE 语法允许的最大 Region 数量可调整,该参数默认值 10000 #12080
    • 修复写 binlog 时,CREATE TABLE 语句中 PRE_SPLIT_REGIONS 部分没有被注释,导致语句不能被下游 MySQL 解析的问题 #12121
    • SHOW TABLE … REGIONSSHOW TABLE .. INDEX … REGIONS 语法新增 WHERE 条件子句 #12124
  • Monitor
    • 增加监控指标 connection_transient_failure_count,用于统计 tikvclient 的 gRPC 连接错误数量 #12092

TiKV

  • 解决某些情况下 Region 内 key 个数统计不准的问题 #5415
  • TiKV 新增 config-check 选项,用于检查 TiKV 配置项是否合法 #5391
  • 优化启动流程,减少重启节点带来的抖动 #5277
  • 优化某些情况下解锁的流程,加速事务解锁 #5339
  • 优化 get_txn_commit_info 的流程,加速事务提交 #5062
  • 简化 Raft 相关的 log #5425
  • 解决在某些情况下 TiKV 异常退出的问题 #5441

PD

  • PD 新增 config-check 选项,用于检查 PD 配置项是否合法 #1725
  • pd-ctl 新增 remove-tombstone 命令,支持清理 tombstone store 记录 #1705
  • 支持主动下发 Operator,加快调度速度 #1686

Tools

  • TiDB Binlog

    • Reparo 新增 worker-counttxn-batch 配置项,用于控制恢复速率 #746
    • Drainer 优化内存使用,提升同步执行效率 #735
    • Pump 修复有时候无法正常下线的 bug #739
    • Pump 优化 LevelDB 处理逻辑,提升 GC 执行效率 #720
  • TiDB Lightning

    • 修复从 checkpoint 点重新导入可能会导致 tidb-lightning 崩溃的 bug #239

TiDB Ansible

  • 更新 Spark 版本为 2.4.3,同时更新 TiSpark 为兼容该 Spark 的 2.2.0 版本 #914#919
  • 修复了当远程机器密码过期时长时间连接等待的问题 #937#948