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

学习笔记:8小时玩转openGauss训练营

1363

学习笔记: 8小时玩转openGauss训练营

openGauss 检查点学习心得:

刷脏对数据库是消耗非常大的动作,在Oracle中进程DBwn 是数据库块写入器主要是负责将脏块写入磁盘的后台进程,通过新建检查点: 将database buffer cache 写入磁盘。对比 openGauss。
openGauss 数据库的检查点是将脏缓冲队列上的全部数据写出到数据文件,对比Pg中的检查点执行时会将buffer中所有的脏页刷到磁盘,需要在checkpoint_timeout*checkpoint_completion_target时间内完成刷脏页动作。
但openGauss 更加细化了检查点技术,包含有全量检查点与增量检查点,全量检查点的触发条件包含:

  1. 执行 checkpoint命令
  2. 数据库关机
  3. 做数据库备份。

而增量检查点通过 enable_incremental_checkpoint=on 参数开启。因此 openGauss 数据库引入增量检查点技术,而每一个脏数据块都被记录到脏页队列,按照第一次对此数据块修改时日志的LSN顺序排列,如果一个数据块进行多次修改,则该数据块在脏队列中的顺序并不会发生变化。
openGauss中的增量检查点会小批量的分阶段的滚筒式的去进行脏页刷盘,同时更新lsn信息,回收不需要的xlog日志,也就是在执行增量检查点时,把一定 recovery LSN之前的脏页刷盘,不需要把所有的 dirty buffer 全部写到磁盘。
image.png

double write的学习心得:

一般 double write 技术目的是防止数据在系统断电或者异常crash情况下最大程度的防止数据丢失; 我们知道 在操作系统奔溃过程中,由于操作系统数据块为4k,但数据库块一般8k/16k/32k,
因此可能造成页面断裂问题,
一个数据库数据块刷到操作系统的过程中可能发生宕机造成块损坏数据库无法启动。或导致在用一个页面中包含新旧数据的混合,在奔溃后的恢复期间,无法实现完全恢复数据页,造成数据丢失,在oracle 中,发生灾难时可以 rman或者dg备库来恢复;mysql通过双写double write来解决这个问题;在 postgresql中 通过full_page_write 来解决这个问题,就是在数据页第一次发生变更的时候将整个页面记录到xlog日志中,那么,openGauss 如果解决这一现实问题呢? 答案是double write,
因此双写double write 技术应运而生于openGauss中,使得openGauss 对数据的保护更加彻底,也更加安全。openGauss 数据库double write 的基本原理是 写数据块的同时将脏页也写到一个共享的双写空间里,如果发生问题会从双写空间里找到完整的数据页进行恢复。双写特性参数(enable_double_write) 需要配合增量检查点(enable_incremental_checkpoint)一起使用,才能发挥作用。
修改如下参数,需要重启数据库
enable_incremental_checkpoint=on
enable_double_write=on

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

评论