主要观点:随着 Postgres 18 Beta 1 发布,异步 I/O(AIO)正逐渐成型,这是 Postgres 多年努力和重大架构转变的成果,虽仍在开发中,但有望带来显著性能提升,尤其在云环境中。
关键信息:
- Postgres 过去采用同步 I/O 模型,效率低,异步 I/O 可消除瓶颈,并发处理读取请求。
- Postgres 17 的读流为异步 I/O 奠定基础,Postgres 18 引入新的
io_method设置控制异步 I/O 机制。 io_method有sync(同步)、worker(使用 I/O 工作进程)、io_uring(Linux 特定高效方法)三种设置。- 异步 I/O 在云环境中性能提升显著,如在 AWS 上读取性能翻倍,
io_uring表现更优。 - 需调整观测实践,
EXPLAIN ANALYZE可能低估 I/O 努力,新视图pg_aios可提供帮助。
重要细节: - Postgres 17 引入读流 API 标准化读取操作,Postgres 18 去除间接读取,直接将数据读取到共享缓冲区。
io_method设置需在postgresql.conf中配置,更改需重启,worker默认使用 3 个 I/O 工作进程。io_uring利用io_uring接口,建立共享环缓冲区,减少系统调用开销,在冷缓存测试中表现更好。effective_io_concurrency在 Postgres 18 中与异步io_method配合使用,可控制内部异步读取请求数量。- 异步 I/O 使 I/O 计时信息难以解释,
EXPLAIN ANALYZE输出可能不准确。 - 参考文献包括 Postgres 相关文档、系统调用手册等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。