跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • PostgreSQL 为什么不使用 direct IO,而要依赖 os page cahce?
未分類
12 2 月 2021

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

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

資深大佬 : zzkde 3

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

大佬有話說 (6)

  • 資深大佬 : Aoang

    设计问题,真想知道最初的原因…可能只能问那群人了,不过还是可以猜一猜的。

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

    另外,PostgreSQL 采用多进程的并发机制,多进程和多线程对内存的使用方式上存在区别也是一个原因,page cache 可以看做多进程之间的一种数据共享方式,在流复制中,通过 buffer io 从 page cache 读取 wal 可以减少物理读的频率

  • 資深大佬 : stabc

    什么是”buffer pool “?”不能保证跨 OS 间的一致性”是什么意思?

  • 資深大佬 : CRVV

    随便搜了一下

    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

    依赖 OS 提供的 Cahce 才能保证跨 OS 的一致性,不然各种平台 API 可能都不一样,就完全得自己去封装出一套 IO 框架。
    自己对底层 IO 封装的话,要跨 OS 多少都是要做出牺牲的,而且开发维护会更加麻烦。

  • 資深大佬 : laminux29

    没记错的话,这数据库连内存表都没支持到位,作者在解释这个问题时还找了借口。

    目前传统数据库,功能最齐全的,应该就是 Oracle,可惜贵了点。

  • 資深大佬 : zhangysh1995

    @stabc 好问题。主没解释清楚感觉讨论没什么必要。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具