TiDB 2.1 RC2 Release Notes

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

    • SQL 优化器
      • 新版 Planner 设计方案
      • 提升常量传播优化规则 #7276
      • 增强 Range 的计算逻辑使其能够同时处理多个 或者等值条件
      • 修复当 Range 为空时,TableScan 的估算结果不正确的问题 #7583
      • UPDATE 语句支持 PointGet 算子
      • 修复 FirstRow 聚合函数某些情况下在执行过程中 panic 的问题 #7624
    • SQL 执行引擎
      • 解决 HashJoin 算子在遇到错误的情况下潜在的 DataRace 问题
      • HashJoin 算子同时读取内表数据和构建 Hash 表 #7544
      • 优化 Hash 聚合算子性能
      • 优化 Join 算子性能 #7493
      • 修复 UPDATE JOIN 在 Join 顺序改变后结果不正确的问题 #7571
      • 提升 Chunk 迭代器的性能
    • 统计信息
      • 解决重复自动 Analyze 统计信息的问题 #7550
      • 解决统计信息无变化时更新统计信息遇到错误的问题
      • Analyze 执行时使用低优先级以及 RC 隔离级别 #7496
      • 支持只在一天中的某个时间段开启统计信息自动更新的功能
      • 修复统计信息写日志时发生的 panic #7588
      • 支持通过 ANALYZE TABLE WITH BUCKETS 语句配置直方图中桶的个数
      • 修复更新空的直方图时 panic 的问题 #7640
      • 使用统计信息更新 information_schema.tables.data_length
    • Server
      • 增加 Trace 相关的依赖库 #7532
      • 开启 Golang 的 mutex profile 功能
      • Admin 语句需要 Super_priv 权限 #7486
      • 禁止用户 Drop 关键的系统表
      • juju/errors 切换到 pkg/errors #7151
      • 完成 SQL Tracing 功能原型
      • 删除 goroutine pool #7564
      • 将 TiDB 启动时的内部 SQL 设置为高优先级
      • 在监控中用不同的标签区分内部 SQL 和用户 SQL #7631
      • 缓存最近一周内最慢的 30 条慢查询日志在 TiDB Server 上
      • TiDB 集群设置时区的方案 #7656
      • 丰富 错误信息
      • 在 TiDB 集群启动时设置集群时区信息 #7638
    • 兼容性
      • Year 类型字段增加 unsigned flag
      • 修复在 Prepare/Execute 模式下,Year 类型结果长度设置问题 #7525
      • 修复 Prepare/Execute 模式下时间 0 值的处理问题
      • 解决整数类型除法实现中的错误处理问题 #7492
      • 解决 ComStmtSendLongData 处理过程中的兼容性问题
      • 解决字符串转为整数类型过程中的错误处理问题 #7483
      • 优化 information_schema.columns_in_table 表中的值精度
      • 修复使用 MariaDB 客户端对字符串类型数据的写入和更新的兼容性问题 #7573
      • 修复返回值别名的兼容性问题
      • 修复 information_schema.COLUMNS 表中浮点数的 NUMERIC_SCALE 值不正确的问题 #7602
      • 解决单行注释内容为空 Parser 报错的问题
    • 表达式
      • insert 函数中检查 max_allowed_packet 的值 #7528
      • 支持内建函数 json_contains
      • 支持内建函数 json_contains_path #7596
      • 支持内建函数 encode/decode
      • 修复一些时间相关的函数在某些情况下和 MySQL 行为不兼容的问题 #7636
      • 解决从字符串中解析时间类型数据的兼容性问题
      • 解决计算 DateTime 类型数据的默认值时没有考虑时区的问题 #7655
    • DML
      • InsertOnDuplicateUpdate 语句设置正确的
      • 减少需要更新 auto_increment_id 计数器的情况 #7515
      • 优化 Duplicate Key 错误的报错信息
      • 修复 insert...select...on duplicate key update 问题 #7406
      • 支持 LOAD DATA IGNORE LINES 语句
    • DDL
      • 在监控中增加 DDL Job 的类型和当前 Schema 版本的信息 #7472
      • 解决 Bit 类型的默认值超过 128 的问题
      • 解决 Bit 类型默认值不能为 NULL 的问题 #7604
      • 减少 DDL 队列中检查 CREATE TABLE/DATABASE 任务的时间间隔
      • 使用 ddl/owner/resign HTTP 接口释放 DDL Owner 并开启新一轮 Owner 选举 #7649
    • TiKV Go Client
      • 支持 Seek 操作只获取 Key
    • Table Partition(实验性)
      • 解决无法使用 Bigint 类型列作为 Partition Key 的问题
      • 支持 Partitioned Table 添加索引过程中遇到问题回滚操作 #7437
    • 新特性
      • 支持 GetAllStores的接口
      • Simulator 添加评估调度的统计信息 #1218
    • 功能改进
      • 优化 Down Store 的处理流程,尽快地补副本
      • 优化 Coordinator 的启动,减少重启 PD 带来的不必要调度 #1225
      • 优化内存使用,减少 heartbeat 带来的内存开销
      • 优化错误处理,完善日志信息 #1227
      • pd-ctl 支持查询指定 store 的 Region 信息
      • pd-ctl 支持查询按 version 比对的 topN 的 Region 信息 #1233
      • pd-ctl 支持更精确的 TSO 解码
    • Bug 修复
      • 修复 pd-ctl 使用 hot store 命令错误退出的问题 #1244
    • 性能优化
      • 支持基于统计估算进行 Region split,减少 I/O 开销
      • 减少部分组件的内存拷贝 #3530
    • 功能改进
      • 增加大量内建函数下推支持
      • 增加 leader-transfer-max-log-lag 配置解决特定场景 leader 调度失败的问题
      • 增加 max-open-engines 配置限制 同时打开的 engine 个数 #3496
      • 限制垃圾数据的清理速度,减少对 snapshot apply 的影响
      • 对关键 Raft 消息广播 commit 信息,避免不必要的延迟 #3592
    • Bug 修复
      • 修复新分裂 Region 的 PreVote 消息被丢弃导致的 leader 选举问题
      • 修复 Region merge 以后 follower 的相关统计信息 #3573