2019 年 1 月 19 日,TiDB 发布 3.0 Beta 版,对应 master branch 的 TiDB-Ansible。相比 2.1 版本,该版本对系统稳定性、优化器、统计信息以及执行引擎做了很多改进。TiDB新特性支持 View支持 Window Function支持 Range Partition支持 Hash PartitionSQL 优化器重新支持聚合消除的优化规则优化 NOT EXISTS 子查询,将其转化为 Anti Semi Join添加 tidb_enable_cascades_planner 变量以支持新的 Cascades 优化器。目前 Cascades 优化器尚未实现完全,默认关闭支持在事务中使用 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 语句中使用子查询添加 Outer Join 消除的优化规则,减少不必要的扫表和 Join 操作,提升执行性能修改 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 语句,使得 ORDER BY/GROUP BY/LIMIT 子句中可以使用 “?” 占位符权限管理增加对 ANALYZE 语句的权限检查增加对 USE 语句的权限检查增加对 SET GLOBAL 语句的权限检查增加对 SHOW PROCESSLIST 语句的权限检查Server支持了对 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 IF NOT EXISTS 语法当过滤条件中包含用户变量时不对其进行谓词下推的操作,更加兼容 MySQL 中使用用户变量模拟 Window Function 的行为DDL支持快速恢复误删除的表支持动态调整 ADD INDEX 的并发数支持更改表或者列的字符集到 utf8/utf8mb4默认字符集从 utf8 变为 utf8mb4支持 RANGE PARTITIONToolsTiDB-Lightning大幅优化 SQL 转 KV 的处理速度对单表支持 batch 导入,提高导入性能和稳定性PD增加 RegionStorage 单独存储 Region 元信息增加 shuffle hot region 调度增加调度参数相关 Metrics增加集群 Label 信息相关 Metrics增加导入数据场景模拟修复 Leader 选举相关的 Watch 问题TiKV支持了分布式 GC在 Apply snapshot 之前检查 RocksDB level 0 文件,避免产生 Write stall支持了逆向 raw_scan 和 raw_batch_scan更好的夏令时支持支持了使用 HTTP 方式获取监控信息支持批量方式接收和发送 Raft 消息引入了新的存储引擎 Titan升级 gRPC 到 v1.17.2支持批量方式接收客户端请求和发送回复多线程 Apply线程 Raftstore英文版 Release Noteshttps://github.com/pingcap/docs/blob/master/releases/3.0beta.md