haweii 2019-06-30
2019 年 1 月 19 日,TiDB 发布 3.0 Beta 版,对应 master branch 的 TiDB-Ansible。相比 2.1 版本,该版本对系统稳定性、优化器、统计信息以及执行引擎做了很多改进。
新特性
SQL 优化器
NOT EXISTS
子查询,将其转化为 Anti Semi Jointidb_enable_cascades_planner
变量以支持新的 Cascades 优化器。目前 Cascades 优化器尚未实现完全,默认关闭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 语句的执行计划缓存生效时也能利用上它TIDB_INLJ
未生效时,返回 warning 给客户端,增强易用性SQL 执行引擎
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
Trace
功能unix_socket
和 TCP 两种方式连接数据库interactive_timeout
wait_timeout
tidb_batch_commit
,可以按语句数将事务分解为多个事务ADMIN SHOW SLOW
语句,方便查看慢日志兼容性
ALLOW_INVALID_DATES
这种 SQL modeSHOW CREATE DATABASE IF NOT EXISTS
语法DDL
utf8
变为 utf8mb4
TiDB-Lightning
RegionStorage
单独存储 Region 元信息raw_scan
和 raw_batch_scan
英文版 Release Notes
https://github.com/pingcap/docs/blob/master/releases/3.0beta.md