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

openGauss 并行回放

suger 2022-12-20
2042

并行回放
Redo日志的回放指的是将 Redo日志中记录的改动重新应用到系统/页面中的过程,这个过程通常发生在实例故障恢复抑或是主备实例之间的数据同步过程中的备机实例上(即主实例的改动,备机实例也需要回放完成,以达到与主实例状态一致的效果)。当前数据库所在物理实例往往有较多的 CPU 核,而日志回放却往往还是单线程进行运作,在日志回放的过程中数据库实例无法充分利用物理环境资源。

为了能够充分利用 CPU 多核的特点,显著加快数据库异常后恢复及备机实例日志回放的速度,行存储引擎采用了多线程并行方式回放日志,如图23所示。


整个并行回放系统的设计采用生产者-消费者模型,分配模块负责解析、分配日志到回放模块,回放模块负责消费、回放日志。

为了 达 成 这 一 设 计,实 现 中 采 用 了 带 阻 塞 功 能 的 无 锁 SPSC(Single Producer Single Consumer)队列。分配线程作为生产者将解析后的日志放入回放线程的列队中,回放线程从队列中消费日志进行回放。无锁SPSC队列如图24所示。


为了提升整体并行回放机制的可靠性,会在对一个页面的回放动作中,对事务日志中的 LSN 和页面结构中的last_LSN[详见前面章节中描述的 HeapPageHeader(堆页面头)结构体]进行校验,以保证回放过程中数据库系统的一致性。



原文链接:https://blog.csdn.net/GaussDB/article/details/116012521

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论