PostgreSQL 18大升级:使用异步I/O加速磁盘读取

banq


PostGres 18带来了一个重大的性能改进:declac io。它使用Linux io_uring接口来进行表扫描、位图堆扫描和VACUUM操作,从而大大加快了这些操作的速度。

PostgreSQL 18这波“异步I/O”升级:

一、从前的数据库,像个“死心眼儿”的图书管理员

你去图书馆借书。以前的PostgreSQL,就像一个特别较真、一根筋的图书管理员。他要找一本《百年孤独》,就得放下手里的活儿,亲自跑一趟书架,把书搬回来,一本一本,按顺序来。你问:“大哥,能顺便多拿几本吗?” 他头也不抬:“不行,必须等我拿回来才能拿下一本!”

这效率,你说低不高?尤其在云上,那书架(存储)远在天边,来回一趟得几毫秒。他光“跑腿”就花了好半天,CPU干瞪眼,白白浪费时间,这叫“纯纯的内耗”。


二、现在好了!终于能“派小弟”了!

PostgreSQL 18这次可算开窍了,给它装上了“分身术”——异步I/O!简单说,就是老板(主进程)不再自己跑腿了,而是:

> “小弟!帮我把第100到200页的书全给我搬过来!快去快回!”

然后,老板可以一边喝茶,一边继续处理别的事。小弟们(I/O工作进程)或者更牛的“快递公司”(io_uring)就飞奔出去,并行地帮你取书。等他们把书都送回来,老板再接着干活。

这效率,能不翻倍吗?简直是“从步行进化到了火箭推进器”!

三、三套“跑腿方案”,谁最牛?

PostgreSQL 18给了你三个选择,就像选快递公司:

1.  sync(老派方案):  
    这玩意儿其实就是“没变”。还是那个一根筋的图书管理员,一次只搬一本。虽然也用了点“预读”的小技巧(提前让内核把可能用到的书放旁边),但本质没变,慢悠悠的,适合对性能要求不高的环境。  
    简单说:没升级,还是一根筋。

2.  worker(靠谱小弟):  
    这是默认选项。你有3个“小弟”(io_workers默认3个),专门负责跑腿。主进程只要下命令:“小弟,把第100-200页的书给我弄来!” 小弟们就飞奔出去,一个个去取。主进程不等,该干嘛干嘛。  
    简单说:有了帮手,效率翻倍!

3.  io_uring(终极快递):  
    这才是真正的“王炸”!它不靠小弟,直接和操作系统“快递站”(内核)打通了VIP通道。所有指令和数据都在一个“共享的环形快递箱”里传递,省去了无数的“交接手续”(系统调用),快得飞起。  
    简单说:不用小弟,直接跟快递站对接,快得像开了外挂!  
    ⚠️ 但有个门槛:你的Linux系统得够新(5.1+),文件系统也得支持。

四、实测结果:云上“翻倍”不是梦!

为了验证,大佬们在AWS上搞了个实验。一个3.5GB的大表,清空缓存后,看谁能最快把数据扫一遍。

  •   PostgreSQL 17(老派):花了 15.8秒,慢得像蜗牛。
  •   PostgreSQL 18 sync:差不多,15秒左右,没啥变化。
  •   PostgreSQL 18 worker:直接干到了 10秒,快了近三分之一!
  •   PostgreSQL 18 io_uring:哇哦!5.7秒!直接干掉了将近一半的时间!

这效果,简直就是从“步行”进化到了“火箭推进器”。特别是在云环境里,延迟高,这种提升简直是救命稻草。

五、别被“假象”骗了,监控得换脑子!

最骚的操作来了!以前你看执行计划(EXPLAIN ANALYZE),I/O耗时清清楚楚,一看就知道哪块慢。但现在,因为主进程不等了,它报告的I/O时间,其实只是“等待小弟们把书送回来”的时间,而不是“小弟们真正跑腿”的总时间。

举个栗子,你问“查一下总数”,系统告诉你“I/O耗时7秒”。但其实,小弟们可能同时跑了几十趟,总共花了20秒,只是它们并行完成的,所以你看到的只是最后“收尾”的7秒。这就容易让人误判,以为I/O没那么重。

所以,想看真实情况?得用新工具——pg_aios视图。它能像后台监控一样,把每个“取书任务”的状态(提交了、正在跑、完成了)都给你列出来,让你一目了然,知道到底有多少活儿在背后跑。

六、总结:这波操作,值不值?

总的来说,PostgreSQL 18这次的异步I/O,绝对是“史诗级”的升级。对于整天和大数据打交道、在云上跑的朋友们来说,这简直就是“降维打击”。

好处:
*   速度快:云上读取性能翻倍甚至更多,查询延迟大大降低。
*   资源省:CPU不再白白浪费在“等”上,能处理更多请求,说不定能用更小的服务器搞定事儿,省钱啊!

代价/注意事项:
*   观察方式变了:你得重新学着看监控,别再迷信EXPLAIN ANALYZE里的I/O时间了。
*   配置要小心:io_method一旦设置,重启才能改,别瞎折腾。
*   未来可期:据说PostgreSQL 19以后,连“写”也能异步了,那才是真正的“王中王”!

所以,兄弟们,如果你的数据库正被I/O拖后腿,特别是用在云上,PostgreSQL 18这波更新,真的值得你赶紧试试。记住,现在不是“等书”的时代了,是“派小弟”、“用快递”的时代!