TiDB 2.1 Beta Release Notes
2018 年 6 月 29 日,TiDB 发布 2.1 Beta 版。相比 2.0 版本,该版本对系统稳定性、优化器、统计信息以及执行引擎做了很多改进。
TiDB
- SQL 优化器
- 优化
Index Join选择范围,提升执行性能 - 优化关联子查询,下推 Filter 和扩大索引选择范围,部分查询的效率有数量级的提升
- 在
UPDATE、DELETE语句中支持Index Hint和Join Hint - 优化器 Hint
TIDM_SMJ在没有索引可用的情况下可生效 - 支持更多函数下推:
ABS/CEIL/FLOOR/IS TRUE/IS FALSE - 在常量折叠过程中特殊处理函数
IF和IFNULL - 优化
EXPLAIN语句输出格式
- 优化
- SQL 执行引擎
- 实现并行
Hash Aggregate算子,部分场景下能提高Hash Aggregate计算性能 350% - 实现并行
Project算子,部分场景下性能提升达 74% - 并发地读取
Hash Join的Inner表和Outer表的数据,提升执行性能 - 修复部分场景下
INSERT … ON DUPLICATE KEY UPDATE …结果不正确的问题 - 修复
CONCAT_WS/FLOOR/CEIL/DIV内建函数的结果不正确的问题
- 实现并行
- Server
- 添加 HTTP API 打散 table 的 Regions 在 TiKV 集群中的分布
- 添加
auto_analyze_ratio系统变量控制自动 analyze 的阈值 - 添加 HTTP API 控制是否打开
general log - 添加 HTTP API 在线修改日志级别
- 在
general log和slow query log中添加 user 信息 - 支持 Server side cursor
- 兼容性
- 支持更多 MySQL 语法
BIT聚合函数支持ALL参数- 支持
SHOW PRIVILEGES语句
- DML
- 减少
INSERT INTO SELECT语句的内存占用 - 修复 Plan Cache 的性能问题
- 添加
tidb_retry_limit系统变量控制事务自动重试的次数 - 添加
tidb_disable_txn_auto_retry系统变量控制事务是否自动重试 - 修复写入
time类型的数据精度问题 - 支持本地冲突事务排队,优化冲突事务性能
- 修复
UPDATE语句的Affected Rows - 优化
insert ignore on duplicate key update语句性能 - 优化
Create Table语句的执行速度 - 优化
Add index的速度,在某些场景下速度大幅提升 - 修复
Alter table add column增加列超过表的列数限制的问题 - 修复在某些异常情况下 DDL 任务重试导致 TiKV 压力增加的问题
- 修复在某些异常情况下 TiDB 不断重载 Schema 信息的问题
- 减少
- DDL
Show Create Table不再输出外键相关的内容- 支持
select tidb_is_ddl_owner()语句,方便判断 TiDB 是否为DDL Owner - 修复某些场景下
YEAR类型删除索引的问题 - 修复并发执行场景下的
Rename table的问题 - 支持
ALTER TABLE FORCE语法 - 支持
ALTER TABLE RENAME KEY TO语法 admin show ddl jobs输出信息中添加表名、库名等信息
PD
- PD 节点间开启
Raft PreVote,避免网络隔离后恢复时产生的重新选举 - 优化 Balance Scheduler 频繁调度小 Region 的问题
- 优化热点调度器,在流量统计信息抖动时适应性更好
region merge调度时跳过数据行数较多的 Region- 默认开启
raft learner功能,降低调度时出现宕机导致数据不可用的风险 pd-recover移除 max-replica 参数- 增加
Filter相关的 metrics - 修复 tikv-ctl unsafe recovery 之后 Region 信息没更新的问题
- 修复某些场景下副本迁移导致 TiKV 磁盘空间耗尽的问题
- 兼容性提示
- 由于新版本存储引擎更新,不支持在升级后回退至 2.0.x 或更旧版本
- 新版本默认开启
raft learner功能,如果从 1.x 版本集群升级至 2.1 版本,须停机升级或者先滚动升级 TiKV,完成后再滚动升级 PD
TiKV
- 升级 Rust 到
nightly-2018-06-14版本 - 开启
PreVote,避免网络隔离后恢复时产生的重新选举 - 添加 metric,显示 RocksDB 内部每层的文件数和
ingest相关的信息 - GC 运行时打印版本太多的
key - 使用
static metric优化多 label metric 性能(YCSB raw get 提升 3%) - 去掉多个模块的
box,使用范型提升运行时性能(YCSB raw get 提升 3%) - 使用
asynchronous log提升写日志性能 - 增加收集线程状态的 metric
- 通过减少程序中
box的使用来减少内存拷贝的次数,提升性能