PostgreSQL16中已有实验性质的directio,真正的directio还远吗?

本文讨论了PostgreSQL在16版本中实验性引入的DirectIO功能,旨在解决doublebuffering问题,但可能带来性能下降。开发者需谨慎使用并期待后续更优化的版本。设置方法包括通过debug_io_direct参数调整wal_init,wal,和data标志位。
摘要由CSDN通过智能技术生成

背景

PostgreSQL之前一直被人诟病的地方就是需要使用文件系统缓存,有double buffering的问题,即数据块缓存可能同时存在文件系统缓存中和自己的共享缓存中,形成内存的浪费。

用directio方式可以避免double buffering问题,但由于现有的PostgreSQL数据库代码是在有文件系统缓存的基础上做的开发,如果贸然直接把IO切换成directio,会导致一些场景的性能大大下降,引入一些新的问题,所以社区一直没有实现directio。

最近这几年社区终于行动起来了。社区的思路是在PostgreSQL 16中实现了directio,但是把此特性放在了实验性质里并提醒用户该特性可能导致性能下降,请斟酌使用,在后续的版本(可能是17或之后)会推出高性能的directio功能。

使用方法

PostgreSQL 16增加了数据库参数debug_io_direct,可以取下面三个值的组合:

  • wal_init: 表示建新的wal文件时使用directio

  • wal: 表示读写wal文件时使用directio

  • data: 表示读写数据文件时使用directio

这三个值对应代码中的三个标志位:

#define IO_DIRECT_DATA			0x01
#define IO_DIRECT_WAL			0x02
#define IO_DIRECT_WAL_INIT		0x04

在postgresql.conf配置此参数开启directio:

请前往中启乘数科技官网查看全文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值