title: TiDB 4.0 Beta Release Notes

TiDB 4.0 Beta Release Notes

发版日期:2020 年 1 月 17 日

TiDB 版本:4.0.0-beta

TiDB Ansible 版本:4.0.0-beta

TiDB

  • Insert/Replace/Delete/Update 在执行过程中所使用的内存空间超过启动配置项 MemQuotaQuery 的限制时,输出日志或取消本次执行过程,具体行为取决于启动配置项 OOMAction #14179 #14289 #14299
  • 估算 Index Join 的代价时由仅考虑驱动表的行数调整为考虑驱动表和被驱动表的行数,提升估算的准确性 #12085
  • 新增 15 个 SQL hint,用于控制优化器行为,提升优化器稳定性
  • 提升查询中所涉及到的列能被索引全覆盖时的性能 #12022
  • 对表上的 OR 表达式过滤条件,使用多个索引组合进行表访问,提升查询性能 #10121 #10512 #11245 #12225 #12248 #12305 #12843
  • 优化 Range 计算流程,缓存并去重索引计算的结果,减少 CPU 开销,提升 range 计算的性能 #12856
  • Slow Log 日志的级别与普通日志的级别解耦 #12359
  • 新增 oom-use-tmp-storage 参数,默认值为 true,用于控制当单条 SQL 执行过程中占用内存使用超过 mem-quota-query 且 SQL 中包含 Hash Join 时,系统会采用临时文件来缓存中间结果 #11832 #11937 #12116 #12067
  • 支持使用 create index/alter table add index 语句创建表达式索引,使用 drop index 语句删除表达式索引 #14117
  • query-log-max-len 参数默认值调大为 4096,减少输出被截断 SQL 的数量,此参数可通过 SQL 动态调整 #12491
  • 支持在列属性上添加 AutoRandom 关键字,用于控制系统自动为主键分配随机整数,避免 AutoIncrement 自增主键带来的写入热点问题 #13127
  • 支持表级锁 (Table Locks) #11038
  • ADMIN SHOW DDL JOBS 支持 LIKEWHERE 语法进行条件过滤 #12484
  • information_schema.tables 表新增 TIDB_ROW_ID_SHARDING_INFO 列,输出列的 RowID 打散相关的信息(例如:表 A 指定 SHARD_ROW_ID_BITS,该列的值为 "SHARD_BITS={bit_number}"#13418
  • 优化 SQL 错误信息的错误码,避免出现多个错误信息的错误码都是 ERROR 1105 (HY000)(即类型为 Unknown Error)的情况
  • 在估算行数时将离散类型的很窄的 range 转化为 point set 然后用 CM-Sketch 提升估算精度 #11524
  • 支持普通 Analyze 得到的 CM-Sketch 维护 TopN 信息,将出现次数较多的值单独维护 #11409
  • 支持动态调整 CM-Sketch 长宽和 TopN 数目 #11278
  • 新增 SQL Binding 的自动捕获和自动演进功能 #13199 #12434
  • 优化与 TiKV 之间通信息编码格式,采用 Chunk 格式编码,提升网络通信性能 #12023 #12536 #12613 #12621 #12899 #13060 #13349
  • 支持新的行存储格式,提升宽表性能 #12634
  • 优化 Recover Binlog 接口,确保等待当前正在提交的事务都提交完成再返回 #13740
  • 新增通过 HTTP info/all 接口,查询集群中所有 TiDB server 开启 binlog 的状态 #13025
  • 新增在事务模式是悲观事务时,支持使用 MySQL 兼容的 Read Committed 事务隔离级别 #14087
  • 支持超大事务,事务大小的限制受限于物理内存大小
  • 提升 Kill 稳定性 #10841
  • LOAD DATA 支持十六进制和二进制表达式作为分隔符 #11029
  • IndexLookupJoin 拆分为 IndexHashJoinIndexMergeJoin,提升 IndexLookupJoin 的执行性能,减少执行过程中的内存消耗 #8861 #12139 #12349 #13238 #13451 #13714
  • 修复 RBAC 若干问题 #13896 #13820 #13940 #14090 #13940 #13014
  • 修复创建视图时,由于 select 语句包含 union 视图无法创建成功的问题 #12595
  • 修复 CAST 函数若干问题
  • Slow log 输出 TiKV RPC 的 backoff 具体信息,方便排查问题 #13770
  • 优化统一 expensive log 中内存统计信息的格式 #12809
  • 优化 explain 显式格式,支持输出算子占用内存和磁盘的信息 #13914 #13692 #13686 #11415 #13927 #13764 #13720
  • 优化 LOAD DATA 重复值检查,按照事务粒度进行且事务大小可通过 tidb_dml_batch_size 配置 #11132
  • 优化 LOAD DATA 性能,将数据读取处理和批量提交分离,且分派到不同的 Worker 处理 #11533 #11284

TiKV

PD

  • 新增根据存储节点负载信息优化热点调度的功能
  • 新增 Placement Rules 功能,通过组合不同的调度规则,精细控制任意一段数据的副本的数量、存放位置、存储主机类型、角色等信息
  • 支持插件功能 (experimental) #1799
  • 新增调度器支持自定义配置功能,支持配置调度器的作用范围 (experimental) #1735 #1783 #1791
  • 新增根据集群负载信息自动调整调度速度的功能(experimental,默认不打开)#1875 #1887 #1902

Tools

  • TiDB Lightning
    • 命令行增加配置下游数据库密码的参数 #253

TiDB Ansible

  • 下载包增加 Checksum 检查,防止下载到不完整的包 #1002
  • 新增检查 systemd 版本功能,systemd 版本最低要求 systemd-219-52 #1020 #1074
  • 修复 TiDB Lightning 启动时未正确创建日志目录的问题 #1103
  • 修复 TiDB Lightning 自定义端口不生效的问题 #1107
  • 新增支持部署运维 TiFlash 的功能 #1119