内存中的 Postgresql 索引

Bor*_*Mik 3 postgresql index

我使用 Postgresql 9.2。我将表存储在 ramdisk 上,但现在这些关系的索引位于常规磁盘上。我也想将它们移到 ram 中,但据我所知,postgresql 会在可能的情况下将索引加载到内存中。我对吗?有什么方法可以告诉 postgres 不要将索引加载到内存中。

Cra*_*ger 9

如果您使用 ramdisk 将索引和表强制放入 RAM,那么您可能要做的就是浪费 RAM。

PostgreSQL 使用操作系统的缓冲区缓存。因此,当第一次读取表/索引页时,它由操作系统缓存,未来的读取由操作系统缓存返回,而不是从磁盘获取。如果数据库大于可用内存,那么操作系统将丢弃最旧、最少使用的数据,下次需要时从磁盘读取。

如果创建 ramdisk,则会减少操作系统可用于缓存的内存量。在将它返回给 PostgreSQL 之前,它仍然会缓存从 ram 磁盘读取的每个块。如果没有足够的空间用于缓冲区缓存的有效内存管理,内核将做大量工作,尝试为缓冲读取释放页面,而您的 ramdisk 实际上会减慢速度

对于写入,ramdisk 的主要作用是使所有磁盘同步操作有效地无操作。所以这就像运行 PostgreSQL 一样fsync=off,它从不尝试将写入刷新到磁盘。它也有同样的特性,可以随时吃掉你的数据。

在 ramdisk 上运行 PostgreSQL 与在关闭数据持久性设置、非常高的脏写回阈值等情况下运行相比,通常没有太大好处。

(附带说明一下,如果您在 ramdisk 上创建一个表空间并将任何内容放入其中,您就会使整个数据库集群 - 即该服务器上的所有数据库 - 面临严重数据丢失的风险。不要这样做。要么initdb整个数据库都在 ramdisk 上,或者最好只调整服务器,这样您就不需要弄乱 ramdisk。)


归档时间:

查看次数:

4539 次

最近记录:

11 年,8 月 前