love wife love life —Roger的Oracle/MySQL/PostgreSQL数据恢复博客

Phone:18180207355 提供专业Oracle/MySQL/PostgreSQL数据恢复、性能优化、迁移升级、紧急救援等服务

MogDB 学习笔记系列之 — 认识bgwriter线程

本站文章除注明转载外,均为本站原创: 转载自love wife love life —Roger的Oracle/MySQL/PostgreSQL数据恢复博客

本文链接地址: MogDB 学习笔记系列之 — 认识bgwriter线程

MogDB是云和恩墨公司基于openGauss所做的商业发行版,这里的商业发行版并非简单包装,换个壳,而是做了不少Bug修复和增强,目前也在研发相关的数据库迁移、数据比对、高可用管理,性能分析等工具,这里做说。

为了便于大家更好的学习和掌握MogDB,我打算陆续分享一些MogDB的技术知识,仅限于个人学习测试,不代表公司观点。

 

由于MogDB是openGauss的商业发行版本,因此数据库内核层面几乎继承了原生openGauss内核,我司内核团队在其基础之上做了一些优化和Bug修复。
我们不难看出,MogDB采用了单进程,多线程架构,这一点跟MySQL类似(原生PostgreSQL是多进程架构).

对于关系数据库来讲,我们知道,最核心的进程(或者线程)其实就那么几个。因此对于MogDB 的学习笔记系列,我们就从线程开始讲起。

熟悉我们来看bgwriter线程。可以看到默认情况下,有2个bgwriter线程,这里我们查看一下数据库相关参数配置:

 

接下来我们同MogDB提供的gstrace 工具来跟踪一下,看看能否有些发现:

从gstrace跟踪来看,主要是用来诊断数据库性能的,并不能跟踪到bgwriter线程的工作情况。看来还是要用通用的操作系统工具来进行。

+++session 插入部分数据

 

+++session 2 进行strace跟踪

进一步分析了一下trace log发现,目前对于数据落盘写入,还无法进行合并,仍然是单块写入(默认情况下)。
从这点来看,对于大数据量大写入,这里可能会是一个潜在的性能瓶颈,我们知道Oracle其实在很早版本就实现了IO 合并写入的。

到这里有一些疑惑,于是问了一位同事,熟悉MogDB 内核的同事,提到可能跟增量检查点和Double write机制有关。

这里我也是用vscode 看了一下原来openGauss的内核的bgwriter.cpp 源码文件,确实也发现了一些信息,不过不太懂。这里我还是尝试通过测试来进行验证,更为直观一些。

我们关掉double write机制和增量检查的后,再试试看。

调整参数之后,我们再次重启mogdb,然后再进行相关的数据写入和strace跟踪测试。

 

不难看出,如果关掉增量检查点和double write机制的话,那么对于脏数据落盘写入,则由checkpoint进程以及起work线程来负责了,跟bgwriter线程无关。

总的来看,目前MogDB对于脏数据落盘写入,目前来看仍然是单块写入,不过大家也不用担心这里会有多么严重的性能问题,其实对于绝大部分应用场景来讲,这里并非瓶颈。

不过后续我司内核团队应该会着手优化这个点。

Leave a Reply

You must be logged in to post a comment.