暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

TiDB 6.5 新特性:TiFlash、在线 DDL、PiTR 性能优化与原理解析

TiDB Club 2023-03-02
1056

⬆️PingCAP DevCon 视频回放及演讲资料已上线

点击上方图片查看相关内容

TiDB 6.5 LTS 版本已经发布了。这是 TiDB V6 的第二个长期支持版,携带了诸多备受期待的新特性:产品易用性进一步提升、内核不断打磨,更加成熟、多样化的灾备能力、加强应用开发者生态构建……
TiDB 6.5 新特性解析系列文章由 PingCAP 产研团队重磅打造,从原理分析、技术实现、和产品体验几个层面展示了 6.5 版本的多项功能优化,旨在帮助读者更简单、更全面的体验 6.5 版本。

01

过去一年,

我们是如何让 TiFlash 高效又稳定地榨干 CPU?

本篇文章主要介绍了 TiFlash 在高并发场景下的稳定性和资源利用率的优化原理。

DynamicThreadPool

DynamicThreadPool 解决了频繁创建和销毁线程带来的开销;PageStorage v3 大大降低了 GC 和 snapshot 的开销,提升了高并发写入和查询的稳定性。这两者对提升 CPU 利用率有明显的效果。

在 DynamicThreadPool 中,线程分为两类:

固定线程:固定数量的线程,生命期与整个线程池相同。

动态线程:运行过程中随着负载升高而创建,会自行在冷却后销毁。


每当有新任务需要执行时,DynamicThreadPool 会按以下顺序查找可用线程:

空闲的固定线程。

空闲的动态线程。

当没有可用线程时,创建新的动态线程服务当前任务。


MinTSOScheduler

由于 DynamicThreadPool 没有限制线程的数量,在遇到高并发查询时,TiFlash 仍然有可能会遇到无法分配出线程(OOT)的问题。为了解决此问题,我们必须控制 TiFlash 中同时使用的线程数量。为了控制同时使用的计算线程数量,同时避免死锁,我们为 TiFlash 引入了名为 MinTSOScheduler 的查询任务调度器——一个完全分布式的调度器,它仅依赖 TiFlash 节点自身的信息。

MinTSOScheduler 的基本原理


MemoryTracker


对于一个运行高并发查询的环境,还有一个重要的问题要解决——减少查询之间的相互干扰。为了避免某个大查询导致的 OOM,我们显著增强了 MemoryTracker 跟踪和记录每个 MPPTask 使用的内存的精确度。当内存使用超过限制时,可以强行中止请求,避免 OOM 影响其它请求。

PageStorage


我们重新设计并实现了全新的 PageStorage (简称 PSv3)以应对更严苛的 HTAP 负载需求。

PSv3 架构图


WALStore 中维护数据(page)在 BlobFile 中位置,内存中的 PageDirectory 实现了 MVCC 支持。

数据保存在 BlobFile 中,如果其中的数据反复重写,会造成 CPU 以及 IO 资源的浪费。

由于有 SpaceMap 的存在,写线程在 SpaceMap 中分配好数据块位置之后,多个写线程的 IO 操作可以并发执行。

让读写线程 snapshot 创建和释放时的操作更高效,内存对象的整理的时间从释放 snapshot 时改为在后台线程进行回收。


点击查看全文


02

TiDB 在线 DDL 性能提升 10 倍

本篇文章主要叙述了本文介绍了 Fast DDL 的性能实现数量级提升的原理,并给出 TiDB Cloud 与 Aurora、CockroachDB 以及 TiDB 和 OceanBase 的 Online DDL 的性能测试对比报告。

业务需求

根据业务需求对表结构进行变更是个普遍的运维操作。当业务规模越来越大,用户的单表容量也越来越大,而单次添加索引的操作耗时越来越长,严重影响了业务的发展速度,不少用户有同时变更多张表的诉求

优化演进

相比之前版本,TiDB v6.5.0 支持多表 DDL 并行执行、支持 Fast DDL 在线添加索引提速 10x、支持单一 SQL 语句增删改多个列或索引、并支持轻量级 MDL 元数据锁彻底地解决了 DDL 变更过程中 DML 可能遇到的 information schema is changed 的问题。
我们考虑从全量数据的索引创建模式、数据传输、并行导入三方面进行改造。

性能测试

TiDB v6.5.0 版本上默认开启了 Fast DDL 功能;TiDB On-Premise 的集群则允许用户灵活调整系统参数和 TiDB 的配置文件参数来控制存储临时文件空间的大小;TiDB Cloud 集群则已经是云上最优配置。
 在云上费用相近时,不同数据量的表在数据类型的字段上创建二级索引时 DDL 执行效率的提升比例。
空闲负载时,TiDB v6.5.0 在线加索引性能约是 TiDB v6.1.0 LTS 版本的 10 倍,CockroachDB v22.2 的 3 倍,Aurora 的 2.7 倍。
DDL 操作是数据库管理操作中最繁重的一种,TiDB Cloud 将提供更加全面、弹性、平滑、高速的多表并行 Fast DDL。相信经过未来若干版本的迭代,未来用户执行 DDL 操作可以像执行简单查询一样淡定坦然。

点击查看全文


03

坚如磐石:TiDB 基于时间点恢复特性的优化之路

对于数据库产品而言,基于时间点的恢复是非常重要的基础能力,它允许用户根据需要,将数据库恢复到特定时间点,以帮助客户的数据库免受意外损坏或错误操作的影响。
当用户启用 PiTR 功能后,TiDB 会定期将分布式变更日志保存到外部存储(例如:AWS S3,Azure BloB 或 NFS等)。如果在某个时间点之后的数据被意外删除或遭受了损坏,则可以使用 BR 工具将之前的数据库备份恢复回来,通过应用保存在外部存储上的数据改变到用户指定的时间点,从而达到定点恢复的目的。

上面的图示描述了 PiTR 特性的架构:当用户启动了日志备份之后,BR 工具会向 PD 注册一个备份任务。同时,某个 TiDB 节点会被选择成为日志备份的协调者,定期与 PD 进行交互,以便计算全局备份 checkpoint ts。同时,每个TiKV 节点会运行定期向 PD 上报本节点的备份任务状态,并将数据变更日志发送到指定的外部存储上。  
对于恢复过程,当用户发起了基于时间点的恢复命令之后,BR 工具会读取备份的元数据信息,并通知所有的 TiKV 节点启动恢复工作,TiKV 节点上的 Restore worker 会读取定点之前的变更日志并将其应用集群中,就可以得到指定时间点的 TiDB 集群。

PiTR 特性的工作机制

接下来,我们进一步看一下日志备份和恢复过程的工作机制。
 
下面的流程图说明了日志备份的主要工作机制

其中主要的交互流程如下:
1. BR 接收备份命令 br log start
解析日志备份任务的日志备份起始时间点和备份存储地址,并向 PD 注册日志备份任务 (log backup task)。
2. TiKV 定期监测新建/更新的日志备份任务
每个 TiKV 节点的日志备份 observer 监听 PD 中创建与更新日志备份任务,然后备份该节点上在备份时间范围内的变更数据日志。
3. TiKV 节点备份 KV 变更日志,并将本地备份进度上报到 TiDB
TiKV 节点中 observer 服务会持续地备份 KV 变更日志,联合从 PD 查询到的 global-checkpoint-ts 来生成备份元数据信息,并定期将日志备份数据和元信息上传到存储中,。同时 observer 服务还会防止未备份完成的 MVCC 数据被 PD 回收。
4. TiDB 节点计算并持久化全局备份进度。
TiDB 协调者节点轮询所有 TiKV 节点,获取各个 Region 的备份进度 ,并根据各个节点的备份进度计算出整体日志备份的进度,然后上报给PD。
对于恢复的过程及详细内容--

点击查看全文




为了更了解您的需求和喜好,给您提供更好、更便捷的服务

【TiDB Club】微信公众号粉丝调研活动上线,点击下图即可进入问卷页面













最后修改时间:2023-03-02 14:07:18
文章转载自TiDB Club,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论