TiDB 2.1 RC1 Release Notes

2018 年 8 月 24 日,TiDB 发布 2.1 RC1 版。相比 2.1 Beta 版本,该版本对系统稳定性、优化器、统计信息以及执行引擎做了很多改进。

TiDB

  • SQL 优化器
    • 修复某些情况下关联子查询去关联后结果不正确的问题 #6972
    • 优化 Explain 输出结果 #7011#7041
    • 优化 IndexJoin 驱动表选择策略#7019
    • 去掉非 PREPARE 语句的 Plan Cache #7040
    • 修复某些情况下 INSERT 语句无法正常解析执行的问题 #7068
    • 修复某些情况下 IndexJoin 结果不正确的问题 #7150
    • 修复某些情况下使用唯一索引不能查询到 NULL 值的问题 #7163
    • 修复 UTF-8 编码情况下前缀索引的范围计算不正确的问题 #7194
    • 修复某些情况下 Project 算子消除导致的结果不正确的问题 #7257
    • 修复主键为整数类型时无法使用 USE INDEX(PRIMARY) 的问题 #7316
    • 修复某些情况下使用关联列无法计算索引范围的问题 #7357
  • SQL 执行引擎
    • 修复某些情况下夏令时时间计算结果不正确的问题 #6823
    • 重构聚合函数框架,提升 StreamHash 聚合算子的执行效率 #6852
    • 修复某些情况下 Hash 聚合算子不能正常退出的问题 #6982
    • 修复 BIT_AND/BIT_OR/BIT_XOR 没有正确处理非整型数据的问题 #6994
    • 优化 REPLACE INTO 语句的执行速度,性能提升近 10 倍 #7027
    • 优化时间类型的内存占用,时间类型数据的内存使用降低为原来的一半 #7043
    • 修复 UNION 语句整合有符号和无符号型整数结果时与 MySQL 不兼容的问题 #7112
    • 修复 LPAD/RPAD/TO_BASE64/FROM_BASE64/REPEAT 因为申请过多内存导致 TiDB panic 的问题 #7171 #7266 #7409 #7431
    • 修复 MergeJoin/IndexJoin 在处理 NULL 值时结果不正确的问题 #7255
    • 修复某些情况下 Outer Join 结果不正确的问题 #7288
    • 增强 Data Truncated 的报错信息,便于定位出错的数据和表中对应的字段 #7401
    • 修复某些情况下 Decimal 计算结果不正确的问题 #7001 #7113 #7202 #7208
    • 优化点查的查询性能 #6937
    • 禁用 Read Committed 隔离级别,避免潜在的问题 #7211
    • 修复某些情况下 LTRIM/RTRIM/TRIM 结果不正确的问题 #7291
    • 修复 MaxOneRow 算子无法保证返回结果不超过 1 行的问题 #7375
    • 拆分 range 个数过多的 Coprocessor 请求 #7454
  • 统计信息
    • 优化统计信息动态收集机制 #6796
    • 解决数据频繁更新场景下 Auto Analyze 不工作的问题 #7022
    • 减少统计信息动态更新过程中的写入冲突 #7124
    • 优化统计信息不准确情况下的代价估算 #7175
    • 优化 AccessPath 的代价估算策略 #7233
  • Server
    • 修复加载权限信息时的 bug #6976
    • 修复 Kill 命令对权限的检查过严问题 #6954
    • 解决 Binary 协议中某些数值类型移除的问题 #6922
    • 精简日志输出 #7029
    • 处理 mismatchClusterID 问题 #7053
    • 增加 advertise-address 配置项 #7078
    • 增加 GrpcKeepAlive 选项 #7100
    • 增加连接或者 Token 时间监控 #7110
    • 优化数据解码性能 #7149
    • INFORMMATION_SCHEMA 中增加 PROCESSLIST#7236
    • 解决权限验证时多条规则可以命中情况下的顺序问题 #7211
    • 将部分编码相关的系统变量默认值改为 UTF-8 #7198
    • 慢查询日志显示更详细的信息 #7302
    • 支持在 PD 注册 tidb-server 的相关信息并通过 HTTP API 获取 #7082
  • 兼容性
    • 支持 Session 变量 warning_counterror_count #6945
    • 读取系统变量时增加 Scope 检查 #6958
    • 支持 MAX_EXECUTION_TIME 语法 #7012
    • 支持更多的 SET 语法 #7020
    • Set 系统变量值过程中增加合法性校验 #7117
    • 增加 Prepare 语句中 PlaceHolder 数量的校验 #7162
    • 支持 set character_set_results = null #7353
    • 支持 flush status 语法 #7369
    • 修复 SETENUM 类型在 information_schema 里的 column size #7347
    • 支持建表语句里的 NATIONAL CHARACTER 语法 #7378
    • 支持 LOAD DATA 语句的 CHARACTER SET 语法 #7391
    • 修复 SETENUM 类型的 column info #7417
    • 支持 CREATE USER 语句的 IDENTIFIED WITH 语法 #7402
    • 修复 TIMESTAMP 类型计算过程中丢失精度的问题 #7418
    • 支持更多 SYSTEM 变量的合法性验证 #7196
    • 修复 CHAR_LENGTH 函数在计算 binary string 时结果不正确的问题 #7410
    • 修复在包含 GROUP BY 的语句里 CONCAT 结果不正确的问题 #7448
    • 修复 DECIMAL 类型 CAST 到 STRING 类型时,类型长度不准确的问题 #7451
  • DML
    • 解决 Load Data 语句的稳定性 #6927
    • 解决一些 Batch 操作情况下的内存使用问题 #7086
    • 提升 Replace Into 语句的性能 #7027
    • 修复写入 CURRENT_TIMESTAMP 时,精度不一致的问题 #7355
  • DDL
    • 改进 DDL 判断 Schema 是否已经同步的方法, 避免某些情况下的误判 #7319
    • 修复在 ADD INDEX 过程中的 SHOW CREATE TABLE 结果 #6993
    • 非严格 sql-mode 模式下, text/blob/json 的默认值可以为空 #7230
    • 修复某些特定场景下 ADD INDEX 的问题 #7142
    • 大幅度提升添加 UNIQUE-KEY 索引操作的速度 #7132
    • 修复 Prefix-index 在 UTF-8 字符集的场景下的截断问题 #7109
    • 增加环境变量 tidb_ddl_reorg_priority 来控制 add-index 操作的优先级 #7116
    • 修复 information_schema.tablesAUTO-INCREMENT 的显示问题 #7037
    • 支持 admin show ddl jobs <number> 命令, 支持输出 number 个 DDL jobs #7028
    • 支持并行 DDL 任务执行 #6955
  • Table Partition(实验性)
    • 支持一级分区
    • 支持 Range Partition

PD

  • 新特性
    • 引入版本控制机制,支持集群滚动兼容升级
    • 开启 Region merge 功能
    • 支持 GetPrevRegion 接口
    • 支持批量 split Region
    • 支持存储 GC safepoint
  • 功能改进
    • 优化系统时间回退影响 TSO 分配的问题
    • 优化处理 Region heartbeat 的性能
    • 优化 Region tree 性能
    • 优化计算热点统计的性能问题
    • 优化 API 接口错误码返回
    • 新增一些控制调度策略的开关
    • 禁止在 label 中使用特殊字符
    • 完善调度模拟器
    • pd-ctl 支持使用统计信息进行 Region split
    • pd-ctl 支持调用 jq 来格式化 JSON 输出
    • 新增 etcd Raft 状态机相关 metrics
  • Bug 修复
    • 修复 leader 切换后 namespace 未重新加载的问题
    • 修复 namespace 调度超出 schedule limit 配置的问题
    • 修复热点调度超出 schedule limit 的问题
    • 修复 PD client 关闭时输出一些错误日志的问题
    • 修复 Region 心跳延迟统计有误的问题

TiKV

  • 新特性
    • 支持 batch split,防止热点 Region 写入产生超大 Region
    • 支持设置根据数据行数 split Region,提升 index scan 效率
  • 性能优化
    • 使用 LocalReader 将 Read 操作从 raftstore 线程分离,减少 Read 延迟
    • 重构 MVCC 框架,优化 memory 使用,提升 scan read 性能
    • 支持基于统计估算进行 Region split,减少 I/O 开销
    • 优化连续写入 Rollback 记录后影响读性能的问题
    • 减少下推聚合计算的内存开销
  • 功能改进
    • 增加大量内建函数下推支持,更完善的 charset 支持
    • 优化 GC 流程,提升 GC 速度并降低 GC 对系统的影响
    • 开启 prevote,加快网络异常时的恢复服务速度
    • 增加 RocksDB 日志文件相关的配置项
    • 调整 scheduler latch 默认配置
    • 使用 tikv-ctl 手动 compact 时可设定是否 compact RocksDB 最底层数据
    • 增加启动时的环境变量检查
    • 支持基于已有数据动态设置 dynamic_level_bytes 参数
    • 支持自定义日志格式
    • tikv-ctl 整合 tikv-fail 工具
    • 增加 threads IO metrics
  • Bug 修复
    • 修复 decimal 相关问题
    • 修复 gRPC max_send_message_len 设置有误的问题
    • 修复 region_size 配置不当时产生的问题