如果你要進入交換,增加shared_buffers會使問題變得更糟;你將會把RAM從運行和交換部分拿走,而不是將內存專用於數據庫緩存。這是值得修正的SHMMAX等只是在一般原則和後來的調整工作,但這不會幫助解決這個問題。
猜測你的記憶吞噬源的識別是一個廢話。最好從「top -c」和ps查看數據,以查找哪些進程正在使用大量進程。對於一個非常糟糕的查詢來說,它可能會消耗更多內存。如果你看到內存使用量激增,以運行一些PostgreSQL進程,請檢查進程ID與pg_stat_tables中的信息,看看它在做什麼。
有幾件事情會導致這類問題,這往往讓人感到驚訝。如果您在單個事務中執行大量行更新,並且涉及外鍵檢查或觸發器,則可能會導致內存不足。在每個這種情況下檢查的事情隊列都保存在RAM中,並且可能會非常大。
PostgreSQL設置有兩個可能相關的問題。如果您的活動連接數多於服務器中的內核數量,那麼數據庫實際上並不會很好地工作;最佳性能通常是每個核心有2到3個活動客戶端。一旦你有超過幾百個連接,各種各樣的事情就會出錯。有一些連接^ 2的行爲在性能方面變得很糟糕,並且也有一些內存問題。如果你真的需要1250個連接,你應該使用連接池,比如pgBouncer或者pgpool-II。
對於地球上的任何硬件,effective_io_concurrency = 1000都太高了。有用的值是你在服務器中有多少個磁盤的一小部分。我不知道會發生什麼情況,只要將內存使用量設置得很高,但在該範圍內測試得並不好。正常設置更像1到25.在Tuning Your PostgreSQL Server列出的參數比它重要得多;併發值僅影響一種特定類型的表掃描。
必須是你的CentOS配置。共享緩衝區可以很容易地設置爲512MB,並且4GB不是沒有聽說過的。你應該發佈你得到的錯誤信息,如果你超出64MB –
這裏雅去... http://pastebin.com/FsyawN3S我跟着Postgresql推薦的設置在這裏http://www.postgresql.org/docs/8.4 /static/kernel-resources.html,但它仍然交換。 – aeupinhere
這是我的/etc/sysctl.conf文件。 http://pastebin.com/TUMcPequ – aeupinhere