有没有办法将 PostgreSQL 数据库直接存储在块设备(而不是文件系统)上?

hum*_*ace 10 postgresql

我正在阅读 PostgreSQL 在哪里存储它需要为我提供服务的数据(这里:http : //www.postgresql.org/docs/8.4/static/storage-file-layout.html

正如它所写的那样,PostgreSQL 的数据和存储似乎在我存储PGDATA文件夹的相应文件系统之上工作。在这个文件夹中,数据再次存储在一组单独的文件中(即每个数据库的文件)。

问题: 虽然我可以接受这样的“文件系统内设置”,

我想知道是否可以将 PostgreSQL 设置为直接在 POSIX 系统上使用块设备(如 /dev/sda)进行数据存储?

我认为这会提供一些优势:

  • 使数据库适合文件系统的块大小配置和优化不再需要考虑
  • 可以避免文件系统中的开销
  • 备份可以更简单

如果不是 PostgreSQL,是否有已知的数据库应用程序不依赖于将其数据保存为文件文件系统,而是直接使用块设备?

Cra*_*ger 14

[是否] 可以将 PostgreSQL 设置为直接在 POSIX 系统上使用块设备(如 /dev/sda)进行数据存储?

不。

PostgreSQL 必须实现自己的文件系统来支持这一点。它让操作系统这样做,理论上操作系统可能会做得更好。

该项目试图避免重复操作系统已经提供的功能。这就是它表现如此出色的原因之一;当内核人员进行改进时,PostgreSQL 免费获得它们。

当然,当内核人员添加性能回归和错误时,我们也会得到这些,但即使您使用原始块设备也是如此。我们也只是接触到更多的文件系统和内存管理级别差异。

与 PostgreSQL 黑客相比,有更多聪明的内核黑客拥有更多的时间。因此,让他们处理缓冲区驱逐、NUMA 调度、脏页回写等的复杂性似乎很容易,而且到目前为止效果很好。大多。

如果不是 PostgreSQL,是否有已知的数据库应用程序不依赖于将其数据保存为文件文件系统,而是直接使用块设备?

甲骨文。它实际上是它自己的操作系统;数据库世界的 Emacs。

带有 InnoDB 的 MySQL 可以在原始磁盘分区上创建 InnoDB 段

我知道它已经被用于 SQLite,但我不知道是否有人足够关心完成这项工作。

备份可以更简单

我质疑您关于使用原始分区使备份更简单的断言。我看到依赖原始块设备的好处很少,但有很多缺点。

  • 顺便说一句:Oracle 不再支持从 12c 版开始的原始设备:http://docs.oracle.com/database/121/READM/chapter12102.htm#READM123 (2认同)