V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zzkde
V2EX  ›  数据库

PostgreSQL 为什么不使用 direct IO,而要依赖 os page cahce?

  •  
  •   zzkde · 2021-02-11 14:42:08 +08:00 · 2437 次点击
    这是一个创建于 1141 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大多数主流数据库都会使用 direct IO,但 PostgreSQL 为啥不使用?是出于什么考虑呢?我的理解是不使用 direct IO,在 buffer pool 和 os page cahce 都存一份,双重开销,内存利用率差。性能依赖各个操作系统实现的 os page cahce,不能保证跨 OS 间的一致性。而且不好做隔离啥的,比如多个 postgreSQL 实例在同一台计算机上 os page cache 冲突的问题,不知道 docker 能否在这个层面上做隔离?

    6 条回复    2021-02-17 15:34:38 +08:00
    Aoang
        1
    Aoang  
       2021-02-11 15:13:42 +08:00 via Android   ❤️ 1
    设计问题,真想知道最初的原因…可能只能问那群人了,不过还是可以猜一猜的。

    PostgreSQL 诞生于实验室中,目的是为了研究数据库内核原理。使用 buffer io 能够减少 IO 栈的开发量,从而更加专注于数据库内核原理,所以 PostgreSQL 才会有相当丰富的 SQL 语法、执行算法和优秀的执行优化器等功能,当然还可以提一下优秀的扩展性。

    另外,PostgreSQL 采用多进程的并发机制,多进程和多线程对内存的使用方式上存在区别也是一个原因,page cache 可以看做多进程之间的一种数据共享方式,在流复制中,通过 buffer io 从 page cache 读取 wal 可以减少物理读的频率
    stabc
        2
    stabc  
       2021-02-11 16:18:42 +08:00
    什么是"buffer pool "?"不能保证跨 OS 间的一致性"是什么意思?
    CRVV
        3
    CRVV  
       2021-02-11 16:34:54 +08:00
    随便搜了一下

    https://www.postgresql.org/message-id/4C1A6339.9080300%402ndquadrant.com

    > every experiment I've ever seen that tries to add more direct I/O to the database has failed to improve anything

    这个帖子比较老了,但 2020 年还有人对比测试了 Oracle 和 PostgreSQL

    https://fritshoogland.wordpress.com/2020/01/25/oracle-and-postgres-disk-io-performance/

    结论是 PostgreSQL 不用 Direct I/O 但某些情况下还比 Oracle 快。


    如果再搜一下 Linux Direct I/O,会找到很多人说这玩意不好用,包括 Linus Torvalds 。

    这么看一圈下来,不用 Direct I/O 是个很正常的决策了;当然如楼主所说,用 Direct I/O 也有优点用它当然也是合适的。
    wevsty
        4
    wevsty  
       2021-02-11 19:09:15 +08:00
    依赖 OS 提供的 Cahce 才能保证跨 OS 的一致性,不然各种平台 API 可能都不一样,就完全得自己去封装出一套 IO 框架。
    自己对底层 IO 封装的话,要跨 OS 多少都是要做出牺牲的,而且开发维护会更加麻烦。
    laminux29
        5
    laminux29  
       2021-02-11 23:11:27 +08:00
    没记错的话,这数据库连内存表都没支持到位,作者在解释这个问题时还找了借口。

    目前传统数据库,功能最齐全的,应该就是 Oracle,可惜贵了点。
    zhangysh1995
        6
    zhangysh1995  
       2021-02-17 15:34:38 +08:00
    @stabc 好问题。楼主没解释清楚感觉讨论没什么必要。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3054 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 105ms · UTC 12:48 · PVG 20:48 · LAX 05:48 · JFK 08:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.