2009-12-01 101 views
19

我想從內存中運行我的PostgreSQL數據庫服務器。原因是在我的新服務器上,我有24 GB的內存,幾乎沒有使用它。PostgreSQL在內存數據庫

我知道我可以運行這個命令使一個ramdisk:

mdmfs -s 1024m md2 /mnt 

而且我可以在理論上有PostgreSQL的存儲其數據存在。但問題是,如果服務器崩潰或重新啓動,數據將會消失。

基本上,我希望數據庫在任何時候都被加載到內存中,這樣它就不必去硬盤驅動器讀取每條記錄,因爲我有大量的內存,並且內存比硬盤快驅動器。

有沒有辦法做到這一點同時也有PostgreSQL的寫入到磁盤上,所以我不輸的情況下,在服務器出現故障的任何數據?或者有沒有辦法緩存內存中的所有數據?

+0

你衡量幾乎沒有那些24千兆字節PostgreSQL所使用的? – tuinstoel 2009-12-01 21:23:43

+0

由於內存速度比磁盤快,因此最有可能會加快速度,但由於PostgreSQL並非設計爲在內存中運行,因此加速可能不如預期的那麼大。例如,PostgreSQL會嘗試將其內存刷新到持久性存儲器(在這種情況下通常是磁盤,內存),請參閱_Main Memory Databases Systems:由Gracia-Molina和Kenneth Salem提供的overview_,[這裏是我的筆記](https:// docs.google.com/document/d/1k9N8UNvCVM484P8xKSAF8Su8UnNKAt3D8oWM-aFYsK8/edit)。 – user454322 2017-04-25 11:10:53

回答

3

我不得不相信的Postgres是用這樣的方式來充分利用可用的RAM的服務器。正如您現在可能已經猜到的那樣,在Postgres之外沒有可靠的方法來做到這一點。

在Postgres的,交易保證所有的操作都是原子,這樣即使電源發生故障,而你正在寫一個Postgres數據庫,你只會失去的特定操作,而不是整個數據庫。

+0

http://www.postgresql.org/docs/8.4/static/spi-memory.html – 2009-12-01 21:13:32

+2

我認爲這個問題所涉及的問題是關閉後關閉的ramdisk的持久性,而不是交易的原子性質Postgres的。 – Kuberchaun 2013-02-25 18:03:22

+0

@JustBob:這個問題已經超過三年了,最高票數的答案是「Google it」。如果你認爲自己可以做得更好,那就發表一個答案(這不應該太難)。 – 2013-02-25 18:11:25

6

你見過Server Configuration手冊章節?檢查出來,然後谷歌postgresql memory tuning

+1

+1:shared_buffers是你的(好吧,OP的朋友) – araqnid 2009-12-05 00:09:14

1

答案是緩存。研究向服務器添加內存,然後調整PostgreSQL以最大化內存使用率。此外,文件系統緩存將對此有所幫助,並自動執行一些操作。您將能夠加快性能,就像它在內存中除了第一次命中一樣,而不必自己管理它,並且可以使數據庫大於物理內存。

8

我現在正在使用異步的流式複製。這意味着我的MASTER可以在內存中運行,使用傳統磁盤的獨立SLAVE實例。

機器重​​啓將涉及停止SLAVE,複製PostgreSQL的數據放回內存盤,然後重新啓動MASTER其次是奴隸。這將是它相媲美的東西,如Redis的,但與冗餘的優勢/熱備份/備份/ SQL /富了一個有趣的可能性,工具箱等

+2

這對於同步複製來說可能更加可行。做OP想要的。 – plundra 2011-11-15 20:34:48

+0

如果使用同步複製,它應該是另一個內存文件系統,否則不會有性能提升。 _請求同步複製時,寫入事務的每次提交都將等待,直到收到提交已寫入主服務器和備用服務器的磁盤上的事務日誌爲止._ https://www.postgresql.org/文檔/ 9.4 /靜態/暖standby.html#同步複製 – user454322 2016-07-13 06:28:23