TiDB 3.0 GA Release Notes

网友投稿 412 2019-06-28

内容来源:http://mp.weixin.qq.com/s?__biz=MzI3NDIxNTQyOQ==&mid=2247489066&idx=2&sn=6e3f8ba97bb8dbd2c387ee9e3ce3af47&chksm=eb163140dc61b85664f8fd4312ce5bfb39899fb7531b44d7cedbcf4ee7a44707184ae8ca439a#rd


2019 年 6 月 28 日,TiDB 发布 3.0 GA 版本,对应的 TiDB Ansible 版本为 3.0.0 。

相比于 V2.1, V3.0.0 版本在以下方面有重要改进:

  • 稳定性方面,显著提升了大规模集群的稳定性,集群支持 150+ 存储节点,300+TB 存储容量长期稳定运行。

  • 易用性方面有显著的提升,降低用户运维成本,例如:标准化慢查询日志,制定日志文件输出规范,新增 EXPLAIN ANALYZE,SQL Trace 功能方便排查问题等。

  • 性能方面,与 2.1 相比,TPC-C 性能提升约 4.5 倍,Sysbench 性能提升约 1.5 倍,因支持 View,TPC-H 50G Q15 可正常运行。

  • 新功能方面增加了窗口函数、视图(实验特性)、分区表、插件系统、悲观锁(实验特性)、SQL Plan Managment 等特性。


TiDB


  • 新功能

    • 新增 Window Function,支持所有 MySQL 8.0 中的窗口函数,包括 NTILELEADLAGPERCENT_RANKNTH_VALUECUME_DISTFIRST_VALUELAST_VALUERANKDENSE_RANKROW_NUMBER 函数

    • 新增 View 功能(实验特性)

    • 完善  Table Partition 功能

      • Range Partition

      • Hash Partition

    • 新增插件系统,官方提供 IP 白名单(企业版特性),审记日志(企业版特性)等插件

    • 新增 SQL Plan Managment 功能,通过绑定 SQL 执行计划确保查询的稳定性(实验特性)

  • SQL 优化器

    • 优化 NOT EXISTS 子查询,转化为 Anti Semi Join 提升性能

    • 优化 Outer Join 常量传播,新增 Outer Join 消除优化规则,避免无效计算,提升性能

    • 优化 IN 子查询,先聚合后执行 Inner Join,提升性能

    • 优化 Index Join,适应更多的场景,提升性能

    • 优化 Range Partition 的 Partition Pruning 优化规则,提升性能

    • 优化 _tidb_rowid 查询逻辑,避免全表扫,提升性能

    • 当过滤条件中包含相关列时,在抽取复合索引的访问条件时尽可能多地匹配索引的前缀列,提升性能

    • 利用列之间的顺序相关性,提升代价估算准确度

    • 基于统计信息的贪心算法及动态规划算法改进了 Join Reorder,提升多表关联的执行速度 

    • 新增 Skyline Pruning,利用规则防止执行计划过于依赖统计信息,提升查询的稳定性

    • 提升单列索引上值为 NULL 时行数估算准确度

    • 新增 FAST ANALYZE,通过在各个 Region 中随机采样避免全表扫描的方式提升统计信息收集性能

    • 新增单调递增的索引列增量 Analyze 功能,提升统计信息收集性能

    • 支持 DO 语句中使用子查询 

    • 支持在事务中使用 Index Join 

    • 优化 prepare/execute,支持不带参数的 DDL 语句

    • 修改变量 stats-lease 值为 0 时系统的行为,使其自动加载统计

    • 新增导出历史统计信息功能

    • 新增导入导出列的关联性信息功能

  • SQL 执行引擎

    • 优化日志输出,EXECUTE 语句输出用户变量,COMMIT 语句输出慢查询日志,方便排查问题

    • 新增 EXPLAIN ANALYZE 功能,提升 SQL 调优易用性

    • 新增 admin show next_row_id 功能,方便获取下一行 ID

    • 新增JSON_QUOTEJSON_ARRAY_APPENDJSON_MERGE_PRESERVEBENCHMARKCOALESCENAME_CONST 6 个内建函数

    • 优化 Chunk 大小控制逻辑,根据查询上下文件动态调整,降低 SQL 执行时间和资源消耗,提升性能

    •  新增 TableReaderIndexReader 和 IndexLookupReader 算子内存追踪控制

    • 优化 Merge Join 算子,使其支持空的 ON 条件 

    • 优化单个表列较多时写入性能,提升数倍性能

    • 通过支持逆序扫数据提升 admin show ddl jobs 的性能

    • 新增 split table region 语句,手动分裂表的 Region,缓解热点问题

    • 新增 split index region 语句,手动分裂索引的 Region 缓解热点问题

    • 新增黑名单禁止下推表达式到 Coprocessor 功能

    • 优化 Expensive Query 日志,在日志中打印执行时间或者使用内存超过阈值的 SQL 查询

  • DDL

    • 支持字符集从 utf8 转换到 utf8mb4 的功能

    • 修改默认字符集从 utf8 变为 utf8mb4

    • 新增 alter schema 语句修改数据库 charset 和 collation 功能

    • 新增 ALTER ALGORITHM INPLACE/INSTANT 功能

    • 新增 SHOW CREATE VIEW 功能

    • 新增 SHOW CREATE USER 功能

    • 新增快速恢复误删除的表功能

    • 新增动态调整 ADD INDEX 的并发数功能

    • 新增 pre_split_regions 选项,在 CREATE TABLE 时预先分配 Region,缓解建表后大量写入造成的写热点问题

    • 新增通过 SQL 语句指定表的索引及范围分裂 Region,缓解热点问题 

    • 新增 ddl_error_count_limit 全局变量,控制 DDL 任务重次数

    • 新增列属性包含 AUTO_INCREMENT 时利用 SHARD_ROW_ID_BITS 打散行 ID 功能,缓解热点问题

    • 优化无效 DDL 元信息存活时间,使集群升级后一段时间 DDL 操作比较慢的情况变短

  • 事务

    • 新增悲观事务模型(实验特性)

    • 优化事务处理逻辑,适应更多场景,具体如下:

      • tidb_disable_txn_auto_retry 的默认值为 on,即不会重试非自动提交的事务

      • 新增 tidb_batch_commit 系统变量控制将事务拆分成多个事务并发执行

      • 新增 tidb_low_resolution_tso 系统变量控制批量获取 tso 个数,减少事务获取 tso 的次数,以适应某些数据一致性要求较低的场景

      • 新增 tidb_skip_isolation_level_check 变量控制事务检查隔离级别设置为 SERIALIZABLE 时是否报错

      • 修改 tidb_disable_txn_auto_retry 系统变量的行为,修改为影响所有的可重试错误

  • 权限管理

    • ANALYZEUSESET GLOBALSHOW PROCESSLIST 语句进行权限检查

    • 新增基于角色的权限访问控制功能(RBAC)(实验特性)

  • Server

    • 优化慢查询日志,具体包括:

      • 重构慢查询日志格式

      • 优化慢查询日志内容

      • 优化查询慢查询日志的方法,通过内存表 INFORMATION_SCHEMA.SLOW_QUERYADMIN SHOW SLOW 语句查询慢查询日志

    • 制定日志格式规范,重构日志系统,方便工具收集分析 

    • 新增 SQL 语句管理 TiDB Binlog 服务功能,包括查询状态,开启 TiDB Binlog,维护发送 TiDB Binlog 策略

    • 新增通过 unix_socket 方式连接数据库

    • 新增 SQL 语句 Trace 功能

    • 新增 /debug/zip HTTP 接口,获取 TiDB 实例的信息,方便排查问题

    • 优化监控项,方便排查问题,如下:

      • 新增 high_error_rate_feedback_total 监控项,监控真实数据量与统计信息估算数据量之间的差距

      • 新增 Database 维度的 QPS 监控项

    • 优化系统初始化流程,仅允许 DDL Owner 执行初始化操作,缩短初始化或升级过程中的启动时间

    • 优化 kill query 语句执行逻辑,提升性能,确保资源正确释放

    • 新增启动选项 config-check 检查配置文件合法性

    • 新增 tidb_back_off_weight 系统变量,控制内部出错重试的退避时间

    • 新增 wait_timeoutinteractive_timeout 系统变量,控制连接空闲超过变量的值,系统自动断开连接。

    • 新增连接 TiKV 的连接池,减少连接创建时间

  • 兼容性

    • 支持 ALLOW_INVALID_DATES SQL mode

    • 支持 MySQL 320 握手协议

    • 支持将 unsigned bigint 列声明为自增列

    • 支持 SHOW CREATE DATABASE IF NOT EXISTS 语法

    • 优化 load data 对 CSV 文件的容错

    • 过滤条件中包含用户变量时谓词不下推,兼容 MySQL Window Function 中使用用户变量行为


PD


  • 新增从单个节点重建集群的功能

  • 将 Region 元信息从 etcd 移到 go-leveldb 存储引擎,解决大规模集群 etcd 存储瓶颈问题

  • API 

    • 新增 remove-tombstone 接口,用于清理 Tombstone Store

    • 新增 ScanRegions 接口,用于批量查询 Region 信息

    • 新增 GetOperator 接口,用于查询运行中的 Operator

    • 优化 GetStores 接口的性能

  • 配置

    • 优化配置检查逻辑,防止配置项错误

    • 新增 enable-one-way-merge,用于控制 Region merge 的方向

    • 新增 hot-region-schedule-limit,用于控制热点 Region 调度速度

    • 新增 hot-region-cache-hits-threshold,连续命中阀值用于判断热点

    • 新增 store-balance-rate 配置,用于控制每分钟产生 balance Region Operator 数量的上限

  • 调度器优化

    • 添加 store limit 机制限制调度速度,使得速度限制适用于不同规模的集群

    • 添加 waitingOperator 队列,用于优化不同调度器之间资源竞争的问题

    • 支持调度限速功能,主动向 TiKV 下发调度操作,限制单节点同时执行调度任务的个数,提升调度速度

    • Region Scatter 调度不再受 limit 机制限制,提升调度的速度

    • 新增 shuffle-hot-region 调度器,解决稳定性测试易用性问题

  • 模拟器

    • 新增数据导入场景模拟

    • 新增为 Store 设置不同的心跳间隔的功能

  • 其他

    • 升级 etcd,解决输出日志格式不一致,prevote 时选举不出 Leader,Lease 死锁等问题

    • 制定日志格式规范,重构日志系统,方便工具收集分析

    • 新增调度参数,集群 Label 信息,PD 处理 TSO 请求的耗时,Store ID 与地址信息等监控指标


TiKV


  • 新增分布式 GC 以及并行 resolve lock 功能,提升 GC 的性能

  • 新增逆向 raw_scan 和 raw_batch_scan 功能

  • 新增多线程 Raftstore 和 Apply 功能,提升单节点内可扩展性,提升单节点内并发处理能力,提升单节点的资源利用率,降低延时,同等压力情况下性能提升 70%

  • 新增批量接收和发送 Raft 消息功能,写入密集的场景 TPS 提升 7%

  • 新增 Apply snapshot 之前检查 RocksDB level 0 文件的优化,避免产生 Write stall

  • 新增 Titan 存储引擎插件,提升 Value 超过 1KiB 时系统的性能,一定程度上缓解写放大问题(实验特性)

  • 新增悲观事务模型(实验特性)

  • 新增通过 HTTP 方式获取监控信息功能 

  • 修改 Insert 语义,仅在 Key 不存在的时候 Prewrite 才成功

  • 制定日志格式规范,重构日志系统,方便工具收集分析

  • 新增配置信息,Key 越界相关的性能监控指标

  • RawKV 使用 Local Reader,提升性能

  • Engine

    • 优化内存管理,减少 Iterator Key Bound Option 的内存分配和拷贝,提升性能 

    • 支持多个 column family 共享 block cache,提升资源的利用率

  • Server

    • 优化 batch commands 的上下文切换开销,提升性能

    • 删除 txn scheduler 

    • 新增 read index,GC worker 相关监控项 

  • RaftStore

    • 新增 hibernate Regions 功能,优化 RaftStore CPU 的消耗 (实验特性)

    • 删除 local reader 线程

  • Coprocessor

    • 重构计算框架,实现向量化算子、向量化表达式计算、向量化聚合,提升性能

    • 支持为 TiDB EXPLAIN ANALYZE 语句提供算子执行详情

    • 改用 work-stealing 线程池模型,减少上下文切换


    Tools


    • TiDB Lightning

      • 支持数据表重定向同步功能

      • 新增导入 CSV 文件功能

      • 提升 SQL 转 kv pairs 的性能

      • 单表支持批量导入功能,提升单表导入的性能 

      • 支持将大表的数据和索引分别导入,提升 TiKV-Importer 导入数据性能

      • 支持对新增文件中缺少 Column 数据时使用 row id 或者列的默认值填充缺少的 column 数据 

      • TiKV-Importer 支持对 upload SST 到 TiKV 限速功能 

    • TiDB Binlog

      • Drainer 新增 advertise-addr 配置,支持容器环境中使用桥接模式

      • Pump 使用 TiKV GetMvccByKey 接口加快事务状态查询

      • 新增组件之间通讯数据压缩功能,减少网络资源消耗

      • 新增 Arbiter 工具支持从 Kafka 读取 binlog 并同步到 MySQL 功能

      • Reparo 支持过滤不需要被同步的文件的功能 

      • 新增同步 Generated column 功能

      • 新增 syncer.sql-mode 配置项,支持采用不同的 SQL mode 解析 DDL

      • 新增 syncer.ignore-table 配置项,过滤不需要被同步的表

    • sync-diff-inspector

      • 新增 checkpoint 功能,支持从断点继续校验的功能

      • 新增 only-use-checksum 配置项,控制仅通过计算 checksum 校验数据的一致性

      • 新增采用 TiDB 统计信息以及使用多个 Column 划分 Chunk 的功能,适应更多的场景


      TiDB Ansible


      • 升级监控组件版本到安全的版本

        • Prometheus 从 2.2.1 升级到 2.8.1 版本

        • Pushgateway 从 0.4.0 升级到 0.7.0 版本

        • Node_exporter 从 0.15.2 升级到 0.17.0 版本

        • Alertmanager 从 0.14.0 升级到 0.17.0 版本

        • Grafana 从 4.6.3 升级到 6.1.6 版本

        • Ansible 从 2.5.14 升级到 2.7.11 版本

      • 新增 TiKV summary 监控面板,方便查看集群状态

      • 新增 TiKV trouble_shooting  监控面板,删除重复项,方便排查问题

      • 新增 TiKV details 监控面板,方便调试排查问题

      • 新增滚动升级并发检测版本是否一致功能,提升滚动升级性能

      • 新增 lightning 部署运维功能

      • 优化 table-regions.py 脚本,新增按表显示 leader 分布功能 

      • 优化 TiDB 监控,新增以 SQL 类别显示延迟的监控项 

      • 修改操作系统版本限制,仅支持 CentOS 7.0 及以上,Red Hat 7.0 及以上版本的操作系统

      • 新增预测集群最大 QPS 的监控项,默认隐藏


      版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

      上一篇:TiDB 在知乎万亿量级业务数据下的实践和挑战
      下一篇:西南地区首次大型“社区面基 Party”落幕,TiDB TechDay 下一站深圳见!
      相关文章