发版日期:2022 年 6 月 13 日
TiDB 版本:6.1.0
在 6.1.0 版本中,你可以获得以下关键特性:
- List 和 List COLUMNS 分区方式 GA,与 MySQL 5.7 兼容
- TiFlash 分区表动态裁剪 GA
- 支持兼容 MySQL 的用户级别锁管理
- 支持非事务性 DML 语法(目前仅支持 DELETE)
- TiFlash 支持按需触发物理数据整理(Compaction)
- MPP 实现窗口函数框架
- TiCDC 支持将 changelogs 以 Avro 协议输出到 Kafka
- DM 合库合表迁移场景的乐观 DDL 协调模式 GA
新功能
SQL
- List 和 List COLUMNS 分区方式正式 GA,与 MySQL 5.7 兼容。
用户文档:List 分区,List COLUMNS 分区
- 支持通过 SQL 语句对 TiFlash 副本立即触发物理数据整理 (Compaction)(实验特性)
在当前 TiFlash 后台自动整理物理数据(Compaction)机制基础上,新增 compact 命令,帮助刷新旧格式数据,提升读写性能。推荐在升级至 v6.1.0 之后,执行该语句以清理数据。此语句是对标准 SQL 语法的扩展,对 MySQL 客户端保持兼容。升级之外场景一般不需要特别关注。
- 实现窗口函数框架,支持以下分析函数:
RANK()
DENSE_RANK()
ROW_NUMBER()
可观测性
- 持续性能分析支持 ARM 架构和 TiFlash 组件。
- Grafana 中新增 Performance Overview 面板,提供系统级别的总体性能诊断入口。
Performance Overview 是 TiDB 监控 Grafana 可视化组件中的一个新增面板,基于数据库时间分析法和颜色优化法,按照自上而下的性能分析方法论对 TiDB 的性能指标做了重新梳理,为 TiDB 用户提供一个系统级别的总体性能诊断入口。通过 Performance Overview 面板,你可以直观地看到整个系统的性能瓶颈在哪里,数量级地缩短了性能诊断时间并降低了性能分析和诊断难度。
性能
- 支持自定义 Region 大小(实验特性)
设置更大的 Region 可以有效减少 Region 数量,降低 Region 管理成本,提升集群性能和稳定性。该特性引入 bucket 概念,即将每个 Region 划分为更小的区间 bucket。使用 bucket 作为并发查询单位能够优化 Region 调大时的查询性能,动态调整热点 Region 的大小来保证热点调度效率和负载均衡。该特性目前属于实验特性,不建议在生产环境使用。
- Raft Engine 存储引擎 GA
TiDB 从 v6.1.0 开始默认使用引擎 Raft Engine 作为 TiKV 的日志存储引擎。新引擎与 RocksDB 相比,可以减少至多 40% 的 TiKV I/O 写流量和 10% 的 CPU 使用,同时在特定负载下提升 5% 左右前台吞吐,减少 20% 长尾延迟。
- 支持 join order hint 语法
LEADING
hint:提示优化器使用指定的顺序作为连接前缀,好的连接前缀顺序可以在连接初期快速地降低数据量,提升查询性能。STRAIGHT_JOIN
hint:提示优化器按照表在FROM
子句中的出现顺序进行连接。该特性提供更多的手段帮助用户固定连接顺序,合理运用 hint 语法,可以有效提升 SQL 性能和集群稳定性。
用户文档:
LEADING
,STRAIGHT_JOIN
,#29932 - TiFlash 新增对以下函数的支持:
FROM_DAYS
TO_DAYS
TO_SECONDS
WEEKOFYEAR
- 支持分区表动态裁剪
默认开启分区表动态裁剪功能,以提升数据分析场景下的性能。v6.0.0 以前版本的用户升级完成后建议及时手动刷新既存分区表的统计信息,以达到最好的性能表现(全新安装,或在 v6.1.0 升级完成后新创建的分区表无需此动作)。
用户文档:MPP 模式访问分区表,动态裁剪模式,#3873
稳定性
- SST 故障自动恢复
当 RocksDB 后台检测到故障 SST 文件后,TiKV 会尝试通过调度所涉及的故障 Peer,并利用其它副本恢复该节点数据,用户可以通过参数
background-error-recovery-window
设置允许的最长恢复时间。如果恢复操作未能在设置的时间窗口内完成,TiKV 将会崩溃。该特性对于可恢复存储故障进行自动检测和恢复,提升了集群稳定性。 - 支持非事务性 DML 语法
在大批量的数据处理场景,单一大事务 SQL 处理有可能对集群稳定性和性能造成影响。TiDB 从 v6.1.0 支持对
DELETE
语句提供拆分后批量处理的语法格式,拆分后的语句将牺牲事务原子性和隔离性,但是对于集群的稳定性有很大提升,详细语法请参考BATCH
。 - TiDB 支持设置最大 GC 等待时间
TiDB 的事务的实现采用了 MVCC(多版本并发控制)机制,当新写入的数据覆盖旧的数据时,旧的数据不会被替换掉,而是与新写入的数据同时保留,并通过 Garbage Collection (GC) 的任务定期清理不再需要的旧数据。定期 GC 清理有助于回收存储空间,提升集群性能和稳定性,TiDB 默认每 10 分钟自动执行 GC 清理。为了保证长时间执行的事务可以访问到对应的历史数据,当有执行中的事务时,GC 清理会被推迟。为了保证 GC 清理不会被无限制推迟,TiDB 从 v6.1.0 引入了系统变量
tidb_gc_max_wait_time
来控制 GC 推迟的最大等待时间,超过该参数允许的时间,GC 将会被强制执行。该参数默认为 24 小时。通过该系统变量,用户可以有效地控制 GC 等待时长与长事务的关系,提升集群的稳定性。 - 支持设置统计信息自动采集任务的最长执行时间
通过采集统计信息,数据库可以有效掌握数据的分布情况,从而生成合理的执行计划,提升 SQL 的执行效率。TiDB 在后台会定期对频繁变更的数据对象进行统计信息采集,但在业务高峰期时进行统计信息采集可能会对集群资源造成挤压,影响业务的稳定运行。TiDB 从 v6.1.0 开始提供系统变量
tidb_max_auto_analyze_time
用来控制后台统计信息采集的最长执行时间,默认为 12 小时。当业务没有遇到资源瓶颈的情况时,建议不要修改该参数,确保数据对象的统计信息及时采集。但是当业务压力大,资源不足的时候,可以通过该变量减少统计信息采集的时长,避免统计信息采集对核心业务造成资源争抢。
易用性
- 支持集群在 Region 多副本丢失状态下在线一键式恢复数据
在 TiDB v6.1.0 之前,当出现多个 TiKV 因物理机故障导致 Region 的多副本丢失时,用户需要停机所有 TiKV,使用 TiKV Control 逐一对 TiKV 进行恢复。从 TiDB v6.1.0 起,该过程被完全自动化且不需要停机,恢复过程中不影响其他正常的在线业务。通过 PD Control 触发在线有损恢复数据,大幅简化了恢复步骤,缩短了恢复所需时间,提供了更加友好的恢复摘要信息。
- 历史统计信息采集持久化
支持通过
SHOW ANALYZE STATUS
语句查询集群级别的统计信息收集任务。在 TiDB v6.1.0 之前,SHOW ANALYZE STATUS
语句仅显示实例级别的统计信息收集任务,且 TiDB 重启后历史任务记录会被清空,因此用户无法查看历史统计信息的采集时间和相关细节。从 TiDB v6.1.0 起,该信息被持久化保存,集群重启后依然可查询,可以为统计信息异常引起的查询性能问题提供排查依据。 - TiDB/TiKV/TiFlash 参数支持在线修改
在 v6.1.0 之前的版本中,配置变更后,必须重启 TiDB 集群,配置才会生效,这对在线业务会造成一定的影响。TiDB v6.1.0 引入了在线修改配置功能,参数修改后,无需重启,即可生效。具体优化如下:
- TiDB 将部分配置项转化为系统变量,所有变量支持在线变更,并支持持久化。请注意,转化后,原有配置项将被废弃。详细变更列表请查看配置文件参数。
- TiKV 支持部分参数在线变更。详细变更列表请查看其他。
- TiFlash 配置项
max_threads
转化为系统变量tidb_max_tiflash_threads
,从而支持配置项在线变更和持久化。转化后,原有配置项不会废弃。
对于从 v6.1.0 之前版本升级到 v6.1.0 的集群(包括滚动升级和停机升级),请注意:
- 若升级前集群指定的配置文件中,存在已经配置的项,则升级过程中 TiDB 将会将配置项的值自动更新为对应系统变量的值,以保证升级后,系统的行为不会因为参数的优化发生变化。
- 上述自动更新仅在升级过程中发生一次,升级完成之后,被废弃的配置项不再有任何效果。
通过本次优化,客户可以在线修改参数生效并持久化,方便客户进行日常运维,避免重启生效对在线业务造成的影响。
- 支持全局 kill 查询或连接
支持通过
enable-global-kill
配置项(默认开启)设置全局 kill 开关。在 TiDB v6.1.0 之前,当某个特定操作占用大量资源引发集群稳定性问题时,你需要先登陆到对应的 TiDB 节点,然后运行
kill [TiDB] id
命令终止对应的连接及操作。在 TiDB 节点多的情况下,这种方式使用不便,并且容易误操作。从 v6.1.0 起,当开启enable-global-kill
配置项时,你可以在任意 TiDB 节点运行 kill 命令终止指定的连接及操作,而无需担心客户端和 TiDB 中间有代理时错误地终止其他查询或会话。目前 TiDB 暂时不支持用 Ctrl+C 终止查询或会话。 - TiKV API V2(实验特性)
在 v6.1.0 之前,TiKV 作为 Raw Key Value 存储时,由于仅存储了客户端传入的原始数据,因此只提供基本的 Key Value 读写能力。
TiKV API V2 提供了新的 Raw Key Value 存储格式与访问接口,包括:
- 数据以 MVCC 方式存储,并记录了数据的变更时间戳。这个特性将为实现 Change Data Capture、增量备份与恢复等打下基础。
- 数据根据不同的使用方式划分范围,支持单一集群 TiDB、事务 KV、RawKV 应用共存。
警告由于底层存储格式发生了重大变化,启用 API V2 后,不能将 TiKV 集群回退到 v6.1.0 之前的版本,否则可能导致数据损坏。
MySQL 兼容性
- 支持兼容 MySQL 的用户级别锁管理
用户级别锁是 MySQL 通过内置函数提供的用户命名锁管理系统。它们可以提供锁阻塞、等待、等锁管理能力。用户级别锁在 ORM 框架中也有较为广泛的应用,例如 RoR、Elixir 和 Ecto 等。TiDB 从 v6.1.0 版本开始支持兼容 MySQL 的用户级别锁管理,支持
GET_LOCK
、RELEASE_LOCK
、RELEASE_ALL_LOCKS
函数。
数据迁移
- DM 合库合表迁移场景的乐观 DDL 协调模式 GA
对于合库合表迁移任务,DM 在现有乐观 DDL 协调策略的基础上增加了大量场景测试,足以覆盖 90% 日常使用场景。相比悲观协调策略,乐观协调在使用上更为简单、高效,在仔细阅读注意事项后可优先使用。
- DM 的 WebUI 支持根据指定参数条件启动任务
开始一个迁移任务时,允许指定“开始时间”和 “safe-mode 持续时间”。这在创建具有大量 source 的增量迁移任务时尤其有用,无需再为每个 source 精确指定 binlog 起始同步位置。
数据共享订阅
- 支持与更丰富的第三方数据生态系统进行数据共享
- TiCDC 支持同步使用 GBK 编码的上游表。