2019 年 1 月 19 日,TiDB 发布 3.0 Beta 版,对应 master branch 的 TiDB-Ansible。相比 2.1 版本,该版本对系统稳定性、优化器、统计信息以及执行引擎做了很多改进。

支持 View

支持 Window Function

支持 Range Partition

支持 Hash Partition

SQL 优化器

重新支持聚合消除的优化规则

优化 NOT EXISTS 子查询,将其转化为 Anti Semi Join

支持在事务中使用 Index Join

优化 Outer Join 上的常量传播,使得对 Join 结果里和 Outer 表相关的过滤条件能够下推过 Outer Join 到 Outer 表上,减少 Outer Join 的无用计算量,提升执行性能

调整投影消除的优化规则到聚合消除之后,消除掉冗余的 Project 算子

优化 IFNULL 函数,当输入参数具有非 NULL 的属性的时候,消除该函数

支持对 _tidb_rowid 构造查询的 Range,避免全表扫,减轻集群压力

优化 IN 子查询为先聚合后做 Inner Join 并,添加变量 tidb_opt_insubq_to_join_and_agg 以控制是否开启该优化规则并默认打开

支持在 DO 语句中使用子查询

修改 TIDB_INLJ 优化器 Hint 的行为,优化器将使用 Hint 中指定的表当做 Index Join 的 Inner 表

更大范围的启用 PointGet,使得当 Prepare 语句的执行计划缓存生效时也能利用上它

引入贪心的 Join Reorder 算法,优化多表 Join 时 Join 顺序选择的问题

支持 View

支持 Window Function

当 TIDB_INLJ 未生效时,返回 warning 给客户端,增强易用性

支持根据过滤条件和表的统计信息推导过滤后数据的统计信息的功能

增强 Range Partition 的 Partition Pruning 优化规则

SQL 执行引擎

优化 Merge Join 算子,使其支持空的 ON 条件

优化日志,打印执行 EXECUTE 语句时使用的用户变量

优化日志,为 COMMIT 语句打印慢查询信息

支持 EXPLAIN ANALYZE 功能,使得 SQL 调优过程更加简单

优化列很多的宽表的写入性能

支持 admin show next_row_id

添加变量 tidb_init_chunk_size 以控制执行引擎使用的初始 Chunk 大小

完善 shard_row_id_bits,对自增 ID 做越界检查

Prepare 语句

对包含子查询的 Prepare 语句,禁止其添加到 Prepare 语句的执行计划缓存中,确保输入不同的用户变量时执行计划的正确性

优化 Prepare 语句的执行计划缓存,使得当语句中包含非确定性函数的时候,该语句的执行计划也能被缓存

优化 Prepare 语句的执行计划缓存,使得 DELETE/UPDATE/INSERT 的执行计划也能被缓存

优化 Prepare 语句的执行计划缓存,当执行 DEALLOCATE 语句时从缓存中剔除对应的执行计划

优化 Prepare 语句的执行计划缓存,通过控制其内存使用以避免缓存过多执行计划导致 TiDB OOM 的问题

优化 Prepare 语句,使得 ORDERBY / GROUP BY / LIMIT 子句中可以使用 “?” 占位符

权限管理

增加对 ANALYZE 语句的权限检查

增加对 USE 语句的权限检查

增加对 SET GLOBAL 语句的权限检查

增加对 SHOW PROCESSLIST 语句的权限检查

支持了对 SQL 语句的 Trace 功能

支持了插件框架

支持同时使用 unix_socket 和 TCP 两种方式连接数据库

支持了系统变量 interactive_timeout

支持了系统变量 wait_timeout

提供了变量 tidb_batch_commit,可以按语句数将事务分解为多个事务

支持 ADMIN SHOW SLOW 语句,方便查看慢日志

支持了 ALLOW_INVALID_DATES 这种 SQL mode

提升了 load data 对 CSV 文件的容错能力

支持了 MySQL 320 握手协议

支持将 unsigned bigint 列声明为自增列

支持 SHOW CREATE DATABASE IFNOT EXISTS 语法

当过滤条件中包含用户变量时不对其进行谓词下推的操作,更加兼容 MySQL 中使用用户变量模拟 Window Function 的行为

支持快速恢复误删除的表

支持动态调整 ADD INDEX 的并发数

支持更改表或者列的字符集到 utf8/utf8mb4

默认字符集从 utf8 变为 utf8mb4

支持 RANGE PARTITION

TiDB-Lightning

大幅优化 SQL 转 KV 的处理速度

对单表支持 batch 导入,提高导入性能和稳定性

增加 RegionStorage 单独存储 Region 元信息

增加 shuffle hot region 调度

增加调度参数相关 Metrics

增加集群 Label 信息相关 Metrics

增加导入数据场景模拟

修复 Leader 选举相关的 Watch 问题

支持了分布式 GC

在 Apply snapshot 之前检查 RocksDBlevel 0 文件,避免产生 Write stall

支持了逆向 raw_scan 和 raw_batch_scan

更好的夏令时支持

支持了使用 HTTP 方式获取监控信息

支持批量方式接收和发送 Raft 消息

引入了新的存储引擎 Titan

升级 gRPC 到 v1.17.2

支持批量方式接收客户端请求和发送回复

多线程 Apply

多线程 Raftstore

如今,在社区和 PingCAP 技术团队的共同努力下,TiDB 3.0 Beta 版已发布,在此感谢社区小伙伴们长久以来的参与和贡献。

作为开源的分布式关系型数据库,TiDB 具备「分布式强一致性事务、在线弹性水平扩展、故障自恢复的高可用、跨数据中心多活」等核心特性。TiDB 于 2015 年 5 月在 GitHub 创建,同年 12 月发布 Alpha 版本,而后于 2016 年 6 月发布 Beta 版,12 月发布 RC1 版, 2017 年 3 月发布 RC2 版,6 月发布 RC3 版,8 月发布 RC4 版,10 月发布 TiDB 1.0 版,并在 2018 年 4 月发布 TiDB 2.0 版,11 月发布 2.1 GA 版。