PostgreSQL内存数据库

PostgreSQL内存数据库,postgresql,memory,freebsd,Postgresql,Memory,Freebsd,我想从内存运行PostgreSQL数据库服务器。原因是,在我的新服务器上,我有24 GB的内存,几乎没有任何内存被使用 我知道我可以运行此命令来制作ramdisk: mdmfs -s 1024m md2 /mnt 理论上我可以让PostgreSQL将数据存储在那里。但问题是,如果服务器崩溃或重新启动,数据就会消失 基本上,我希望数据库在任何时候都加载到内存中,这样它就不必去硬盘读取每一条记录,因为我有大量的内存,而且内存比硬盘快 有没有一种方法可以在将PostgreSQL写入磁盘的同时做到这一

我想从内存运行PostgreSQL数据库服务器。原因是,在我的新服务器上,我有24 GB的内存,几乎没有任何内存被使用

我知道我可以运行此命令来制作ramdisk:

mdmfs -s 1024m md2 /mnt
理论上我可以让PostgreSQL将数据存储在那里。但问题是,如果服务器崩溃或重新启动,数据就会消失

基本上,我希望数据库在任何时候都加载到内存中,这样它就不必去硬盘读取每一条记录,因为我有大量的内存,而且内存比硬盘快


有没有一种方法可以在将PostgreSQL写入磁盘的同时做到这一点,以便在服务器停机时不会丢失任何数据?还是有办法将所有数据缓存在内存中?

我不得不相信,Postgres的编写方式能够充分利用服务器中可用的RAM。正如你现在可能已经猜到的,在博士后之外,没有可靠的方法可以做到这一点


在Postgres中,事务确保所有操作都是原子操作,因此,如果在向Postgres数据库写入数据时断电,则只会丢失该特定操作,而不会丢失整个数据库。

您看过手册章节吗?检查一下,然后谷歌
postgresql内存调优

答案是缓存。研究向服务器添加内存,然后调优PostgreSQL以最大限度地提高内存使用率。此外,文件系统缓存将帮助实现这一点,自动执行其中的一些操作。您将能够提高性能,就像除了第一次命中之外,它在内存中一样,而不必自己管理它,并且能够拥有比物理内存大的数据库。

我现在使用的是异步流复制。这意味着我的主机可以全部在内存中运行,使用传统磁盘的独立从属实例


机器重启包括停止从机,将postgresql数据复制回ramdisk,然后重启主机,然后重启从机。这将是一个有趣的可能性,与REDIS相比,它是很好的,但具有冗余/热备份/备份/sql/丰富工具集等优势。

您是否测量到,postgresql几乎没有使用这24 GB的数据?因为内存比磁盘快,很可能会有一些速度,但是,由于PostgreSQL不是在内存中运行的,因此速度可能没有预期的那么快。例如,PostgreSQL会尝试将其内存刷新到持久性存储(通常是磁盘,在本例中是内存),请参阅本文中Gracia Molina和Kenneth Salem的《内存数据库系统:概述》。这在同步复制中可能更为可行。做OP想要做的事情。如果使用同步复制,它应该被复制到内存文件系统上的另一个文件系统,否则不会有性能提升。请求同步复制时,写入事务的每次提交都将等待,直到收到确认,确认提交已写入主服务器和备用服务器磁盘上的事务日志。我也想到了同样的想法。我认为这个问题与关闭后ramdisk的持久性有关,而不是Postgres中事务的原子性质。@JustBob:这个问题已经有三年多的历史了,投票率最高的答案是“googleit”。如果你认为你可以做得更好,就发布一个答案(这应该不会太难)。谢谢你的建设性意见。我刚刚发现了这个问题,并认为在给定的答案中添加一点细节不会伤害任何人。OP不是在问调整内存使用情况;他是在问让Postgres使用系统内存,就好像它是传统的辅助磁盘存储一样。