聊聊postgresql的double buffering 问题

本文探讨了PostgreSQL中的DoubleBuffering机制,解释了其工作原理、优点与缺点,强调了个性化优化和根据系统负载调整缓冲区配置的重要性。作者指出,虽然Oracle近年来解决了DoubleBuffering问题,但在PostgreSQL中它仍然是关键考虑因素,特别是对于大型数据库系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近有朋友和我们交流PostgreSQL运维的问题,其中交流提纲里提到了关于Double Buffering的问题。对于以往习惯于使用Oracle数据库的人来说,不会体会到Double Buffering这个词的含义。很多Oracle DBA也认为Oracle天生就不需要考虑Double Buffering的问题的,只有PG/MYSQL这样的开源数据库才需要关心。事实上,Oracle也就是最近这十几年才彻底的解决了Double Buffering问题,采用完全绕过文件缓冲区的方法的,在我早期使用的Oracle版本中,如何利用文件缓冲提升大数据量的访问性能还是Oracle DBA能够用来挣钱的独门绝技,我也曾利用这个技能帮助用户做过一些优化项目。既然今天要讨论Double Buffering,那么我们就先用PG的一个IO分层结构图来理解一下PG的这个问题吧。

我们看到最上面的shared buffer是PG的主BUFFER,PG数据库使用bufferd io和OS的文件系统进行交互,因此PG数据库的读写都需要使用OS CACHE作为缓冲,读取的数据可以通过OS CACHE来进行加速,写入的数据先写入OS CACHE中,然后再通过fsync()来强制刷盘。在PG数据库里,我们要访问一个数据块可能会经过两个CACHE,一个是PG自己的SHARED BUFFERS,一个是OS的CACHE,这就是Double Buffering的含义。

Double Buffering有什么缺点呢?首先是增加了一个数据块访问的路径,数据块要先读入OS CACHE,然后才能到达SHARED BUFFERS

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值