黄东旭解析 TiDB 的核心优势
362
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 中的窗口函数,包括 NTILE,LEAD,LAG,PERCENT_RANK,NTH_VALUE,CUME_DIST,FIRST_VALUE,LAST_VALUE,RANK, DENSE_RANK,ROW_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_QUOTE、JSON_ARRAY_APPEND、JSON_MERGE_PRESERVE、BENCHMARK、COALESCE、NAME_CONST 6 个内建函数
优化 Chunk 大小控制逻辑,根据查询上下文件动态调整,降低 SQL 执行时间和资源消耗,提升性能
新增 TableReader、IndexReader 和 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 系统变量的行为,修改为影响所有的可重试错误
权限管理
对 ANALYZE,USE,SET GLOBAL,SHOW PROCESSLIST 语句进行权限检查
新增基于角色的权限访问控制功能(RBAC)(实验特性)
Server
优化慢查询日志,具体包括:
重构慢查询日志格式
优化慢查询日志内容
优化查询慢查询日志的方法,通过内存表 INFORMATION_SCHEMA.SLOW_QUERY,ADMIN 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_timeout、interactive_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小时内删除侵权内容。