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

full_page_writes(全页写)

點點 2024-04-07
228

全页写模式下,会将一整个数据块的内容写入 WAL文件中,而非只记录日志条目

优点:解决块不一致的问题,保护数据的完整性

缺点:全页写会导致WAL日志膨胀,增加额外I/O,影响数据库整体性能。同时还会影响主备同步延时

full_page_writes参数控制,默认on


(1)(2)当checkpoint后,发起insert...操作时会将数据块从磁盘读到数据缓冲区进行修改操作

(3)修改完成commit提交时会将整个数据块先写入到日志缓冲区后在写入日志文件中

(4)(5)新发起的insert 操作commit后将事务条目从数据缓冲区写入到日志缓冲区,而后写入到日志文件

 


全页写的模式

非强制:最近一次检查点发生后,第一次修改的数据块会进行全页写,后续在修改该块时不会进行全页写,直到下一次检查点的产生

强制模式:备份时会自动进入强制模式,备份期间修改的数据库会全部写入wal文件中

# sys_rman执行过程会调用sys_start_backup()函数,系统也会进入全页写模式,sys_stop_backup()退出全页写模式


块不一致的原因

操作系统进行I/O操作时,以块为单位,例如:512字节、1kb等

数据库块一般是操作系统块的整数倍,比如2kb、4kb、8kb等

块是数据库最小的I/O单位,当数据库写一个数据块时,操作系统需要I/O多次,才能全部写完。假如在I/O过程中因系统断电、磁盘故障等原因导致一个数据块没有完整的写入,从而导致块不一致

 

禁用全页写

  • 数据库有完整备份,可以考虑关闭
  • 优先考虑数据库整体性能,可以考虑关闭
  • 能够阻止部分页面写入的系统,例如(zfs)
最后修改时间:2024-04-07 22:44:22
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论