TiDB 3.0 Beta Release Notes

百家 作者:PingCAP 2019-01-19 03:35:54

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 语句,使得 ORDERBY / 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 IFNOT 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 之前检查 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 版。


关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接