TiDB 3.0 Beta Release Notes

37次阅读

共计 2389 个字符,预计需要花费 6 分钟才能阅读完成。

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

新特性

支持 View
支持 Window Function
支持 Range Partition
支持 Hash Partition

SQL 优化器

重新支持聚合消除的优化规则
优化 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 PARTITION

Tools

TiDB-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

正文完
 0