等待 Postgres 18:通过异步 I/O 加速磁盘读取

主要观点:随着 Postgres 18 Beta 1 发布,异步 I/O(AIO)正逐渐成型,这是 Postgres 多年努力和重大架构转变的成果,虽仍在开发中,但有望带来显著性能提升,尤其在云环境中。
关键信息

  • Postgres 过去采用同步 I/O 模型,效率低,异步 I/O 可消除瓶颈,并发处理读取请求。
  • Postgres 17 的读流为异步 I/O 奠定基础,Postgres 18 引入新的io_method设置控制异步 I/O 机制。
  • io_methodsync(同步)、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 相关文档、系统调用手册等。
阅读 14
0 条评论