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

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

MogDB 学习笔记系列之 — 认识checkpoint

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

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

我们继续学习了解MogDB的核心线程。对于关系数据库而言,检查点是一个尤为重要的机制,检查点机制的优劣可以说决定了数据库性能的高低和稳定性。
这里我们继续来学习了解在MogDB数据库中,checkpoint机制是怎么样的。

 

首先我们从参数来看,涉及到检查点相关的参数一共有9个。这里针对上述几个参数进行简单解释;

checkpoint_completion_target 检查点完成的目标,默认参数为0.5,表示每个checkpoint需要在checkpoints间隔时间的50%内完成

checkpoint_flush_after 设置checkpointer线程在连续写多少个磁盘页后会进行异步刷盘操作,默认值为32,表示checkpointer线程连续写32个磁盘页,即32*8=256KB磁盘空间后会进行异步刷盘。

checkpoint_segments 设置checkpoint_timeout周期内所保留的最少WAL日志段文件数量

checkpoint_timeout 自动WAL检查点之间的最长时间,默认为900s

checkpoint_wait_timeout 请求检查点等待checkpointer线程启动的最长时间,默认为60s

checkpoint_warning 填充检查点段文件导致检查点发生的时间间隔接近这个参数表示的秒数,就向服务器日志发送一个建议增加checkpoint_segments值的消息;有大量warnning说明checkpoint_segments设置偏小

enable_incremental_checkpoint 表示是否启用增量检查点功能

incremental_checkpoint_timeout 增量检查点开关打开之后,设置自动WAL检查点之间的最长时间

对于增量检查点技术而言,我们Oracle DBA们并不陌生,因为在Oracle 8i就已经有了。通过增量检查点技术,可以让数据库相对均匀的进行脏数据刷新;
同时可以减少数据库实例崩溃后的恢复时间。实际上就现在而言,很多数据库都还没有实现增量检查点功能,比如PostgreSQL或者国产的达梦数据库。

就拿postgreSQL来讲,每次检查点出发后,脏页需要在checkpoint_timeout*checkpoint_completion_target的时间范围内必须写完,如果脏数据较多,而IO又不是太强劲的话,那么可能有一些问题。
因为每次进行大量脏页写出,势必会影响整个数据库。可能这也是为什么之前在测试PostgreSQL发现性能抖动比较厉害,峰刺较多。

我们通过创建测试表并跟踪checkpoint 线程来观察一下:

通过查看跟踪文件,我们发现checkpoint线程即16341仅仅写了26号文件:

我们可以看到26号文件即double write文件。对于double write双写的情况,mogdb也提供了一个如下的性能试图,便于进行查看读写情况:

最后简单总结一下检查点线程:

1、检查点线程是单线程,从功能上来讲跟其他关系型数据库类型,可以理解为一个触发事件;通知bgwriter和pagewriter等线程写脏页。
2、MogDB使用的是增量检查点,通过增量检查点技术,可以极大的降低实例崩溃后的恢复时间,同时由于让数据库写脏更加均匀,因此性能相对稳定(实际上目前很多国产数据库还没有增量检查点技术)。
3、MogDB提供了多种存储引擎,其中MOT 内存表和增量检查点技术是不兼容的。

 

Leave a Reply

You must be logged in to post a comment.