黄东旭解析 TiDB 的核心优势
505
2019-01-19
内容来源:http://mp.weixin.qq.com/s?__biz=MzI3NDIxNTQyOQ==&mid=2247487788&idx=1&sn=9ee1df7de6b134b35a0bba62112802fb&chksm=eb163646dc61bf50f376f7b28d14534eaf0e9509e9078295fe483ae179f90e65d12a7b8e305f#rd
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 版。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。