TiDB 3.0.0-rc.1 Release Notes
发版日期:2019 年 5 月 10 日
TiDB 版本:3.0.0-rc.1
TiDB Ansible 版本:3.0.0-rc.1
Overview
2019 年 5 月 10 日,TiDB 发布 3.0.0-rc.1 版,对应的 TiDB Ansible 版本为 3.0.0-rc.1。相比 3.0.0-beta.1 版本,该版本对系统稳定性、易用性、功能、优化器、统计信息以及执行引擎做了很多改进。
TiDB
SQL 优化器
- 利用列之间的顺序相关性提升代价估算准确度,并提供启发式参数
tidb_opt_correlation_exp_factor
用于控制在相关性无法被直接用于估算的场景下对索引扫描的偏好程度。#9839 - 当过滤条件中包含相关列时,在抽取复合索引的访问条件时尽可能多地匹配索引的前缀列。#10053
- 用动态规划决定连接的执行顺序,当参与连接的表数量不多于
tidb_opt_join_reorder_threshold
时启用。#8816 - 在构造 Index Join 的的内表中,以复合索引作为访问条件时,尽可能多地匹配索引的前缀列。#8471
- 提升对单列索引上值为 NULL 的行数估算准确度。#9474
- 在逻辑优化阶段消除聚合函数时特殊处理
GROUP_CONCAT
,防止产生错误的执行结果。#9967 - 当过滤条件为常量时,正确地将它下推到连接算子的子节点上。#9848
- 在逻辑优化阶段列剪裁时特殊处理一些函数,例如
RAND()
,防止产生和 MySQL 不兼容的执行结果。#10064 - 支持
FAST ANALYZE
,通过tidb_enable_fast_analyze
变量控制。该特性通过用对 Region 进行采样取代扫描整个 region 的方式加速统计信息收集。#10258 - 支持
SQL PLAN MANAGEMENT
。该特性通过对 SQL 进行执行计划绑定,以确保执行稳定性。该特性目前处于测试阶段,仅支持对 SELECT 语句使用绑定的执行计划,不建议在生产场景中直接使用。#10284
- 利用列之间的顺序相关性提升代价估算准确度,并提供启发式参数
执行引擎
Server
DDL
- 为 CREATE TABLE 添加了 pre_split_regions 选项,该选项可以在建表时预先分配 Table Region,避免建表后大量写入造成的写热点 #10138
- 优化了部分 DDL 语句的执行性能 #10170
- FULLTEXT KEY 新增不支持全文索引的 warning #9821
- 修正了旧版本 TiDB 中,UTF8 和 UTF8MB4 编码的兼容性问题 #9820
- 修正了一个表的 shard_row_id_bits 的潜在 BUG #9868
- 修正了 ALTER TABLE Charset 后,Column Charset 不会跟随变化的 BUG #9790
- 修正了使用 BINARY/BIT 作为 Column Default Value 时,SHOW COLUMN 可能出错的 BUG #9897
- 修正了 SHOW FULL COLUMNS 语句中,CHARSET / COLLATION 显示的兼容性问题 #10007
- 现在 SHOW COLLATIONS 语句只会列出 TiDB 所实际支持的 COLLATIONS #10186
PD
- 升级 ETCD 版本 #1452
- 统一 etcd 的日志格式与 pd server 一致
- 修复 prevote 可能无法选出 Leader 的问题
- 快速 drop 掉会失败的 propose 和 read 请求,减少阻塞后面的请求时间
- 修复 Lease 的死锁问题
- 修复 store 读热点的 keys 统计不正确问题 #1487
- 支持从单一 PD 节点强制重建 PD 集群 #1485
- 修复 Scatter Region 产生无效 Operator Step 的问题 #1482
- 修复 Region Merge Operator 超时时间过短的问题 #1495
- 热点调度使用高优先级 #1492
- 添加 PD server 端处理 TSO 请求的耗时 Metrics #1502
- 添加相对应的 Store ID 和 Address 到 store 相关的 Metrics #1506
- 支持 GetOperator 服务 #1477
- 修复 Heartbeat stream 下发送 error 找不到 store 的问题 #1521
TiKV
- Engine
- Server
- RaftStore
- 可配置化
properties index distance
#4517
- 可配置化
- Coprocessor
- 新增 batch index scan executor #4419
- 新增向量化 evaluation 框架 #4322
- 新增 batch 执行器统计框架 #4433
- 构建 RPN expression 时检查 max column 以防止 evaluation 阶段 column offset 越界的问题 #4481
- 实现
BatchLimitExecutor
#4469 - ReadPool 使用
tokio-threadpool
替换原本的futures-cpupool
,减少 context switch #4486 - 新增 batch 聚合框架 #4533
- 新增
BatchSelectionExecutor
#4562 - 实现 batch aggression function
AVG
#4570 - 实现 RPN function
LogicalAnd
#4575
- Misc
- 支持选用 tcmalloc 为内存分配器 #4370
Tools
- TiDB Binlog
- Lightning
- 使用 row id 或者列的默认值填充 dump 文件中缺少的 column 数据 #170
- Importer 修复部分 SST 导入失败依然返回导入成功的 bug #4566
- Importer 支持 upload SST 到 TiKV 限速 #4412
- Lightning 优化导入表的顺序,按照表的数据大小顺序进行导入,减少导入过程中大表执行 checksum 和 Analyze 对集群的影响,并且提高 Checksum 和 Analyze 的成功率 #156
- 提升 Lightning encode SQL 性能,性能提升 50%,直接解析数据源文件内容成 TiDB 的 types.Datum,省去 KV encoder 的多余解析工作 #145
- 日志格式改为 Unified Log Format #162
- 新增一些命令行选项,即使缺少配置文件也能使用。#157
- 数据同步对比工具 (sync-diff-inspector)
TiDB Ansible
- TiKV 监控变更以及更新 Ansible、Grafana、Prometheus 版本 #727
- summary 监控适用于用户查看集群状态
- trouble_shooting 监控适用于 DBA 排查问题
- details 监控适用于开发分析问题
- 修复下载 Kafka 版本 Binlog 失败的 BUG #730
- 修改操作系统版本限制,仅支持 CentOS 7.0 及以上,Red Hat 7.0 及以上版本的操作系统 #733
- 滚动升级时的版本检测改为多并发 #736
- 更新 README 中文档链接#740
- 移除重复的 TiKV 监控项,新增 trouble shooting 监控项 #735
- 优化
table-regions.py
脚本,按表显示 leader 分布 #739 - 更新 drainer 配置文件 #745
- 优化 TiDB 监控,新增以 SQL 类别显示延迟的监控项 #747
- 更新 Lightning 配置文件,新增 tidb_lightning_ctl 脚本 #1e946f8