主要观点:随着 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) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。