2010-01-06 36 views
24

我試圖在本地機器上啓動我的PostgreSQL服務器。 但我得到一個錯誤信息說:在MAC OS X 10.6上爲PostgreSQL設置SHMMAX等值

FATAL: could not create shared memory segment: Invalid argument 
DETAIL: Failed system call was shmget(key=5432001, size=9781248, 03600). 
HINT: This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter. You can either reduce the request size or reconfigure the kernel with larger SHMMAX. To reduce the request size (currently 9781248 bytes), reduce PostgreSQL's shared_buffers parameter (currently 1024) and/or its max_connections parameter (currently 13). 
If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for. 
The PostgreSQL documentation contains more information about shared memory configuration. 

我搜索,看着文檔,但一切,我試圖有關設置kern.sysv.shmmax和kern.sysv.shmall工作。 雪豹的正確設置是什麼?我用macports安裝了postgres。

+0

嘗試在serverfault.com上詢問。 – pilcrow 2010-01-06 23:02:30

+2

這裏是鏈接到同一個問題在serverfault:http://serverfault.com/questions/10226/how-to-set-the-shmmax-parameter-on-mac-os-x – wallyqs 2010-11-21 06:46:13

+0

更新:Postgres 9.3及更高版本已被重寫爲只需要少量的共享內存。當使用> = 9.3時,不再需要調整內核共享內存限制。 http://www.depesz.com/2012/07/12/waiting-for-9-3-dramatically-reduce-system-v-shared-memory-consumption/ – 2013-05-08 19:18:58

回答

2

警告:這個答案已經被較新版本的OS X所取代,請參考下面的Paul Legato的回答。

在Mac OS X中,系統啓動後無法更改shmmax。您需要編輯/ etc/rc或/etc/sysctl.conf,並記住它需要是4096的倍數。看到這裏 http://www.postgresql.org/docs/8.4/static/kernel-resources.html

+4

這實際上並不影響我的系統,即使在重啓。 – Paul 2011-09-24 05:53:44

+9

這是不正確的。您可以在運行時更改shmmax和其他內核設置,而無需重啓,使用「sudo sysctl -w」。 – 2012-05-17 02:30:35

+0

我不知道有多少人回答這個問題,他們發現它已經被更新版本的OS X所淘汰。 – alvherre 2013-07-02 02:53:05

4

我知道這是一個老問題,但我認爲它可能值得注意的是如果您只是將PostgreSQL用於開發目的您可能會安全地進入postgres.conf(完成initdb之後的數據目錄)並將shared_buffers變量更改爲某種降低。它默認爲28MB或其他東西。 但這樣你就不會搞亂系統共享內存變量。

+2

雖然這會起作用,但即使默認值對於具有多個千兆字節的可用內存的現代系統來說也是荒謬的小。在處理數據集和查詢任何複雜性時,Postgres以更大的shared_buffers和workmem設置運行*速度更快。如果你正在聰明地做,而不是隨意更改系統內核設置,那麼改變系統內核設置本身就沒有什麼問題。 – 2013-01-01 21:39:39

26

您必須將內核的最大共享內存允許增加到比Postgres試圖分配的更高的值。 (您也可以減少postgresql.conf中的共享緩衝區或最大連接設置,以使Postgres請求更少的內存,但對於大多數使用情況,默認值已經相當小)。

要做到這一點,持續到下一次重新啓動:

sudo sysctl -w kern.sysv.shmmax=12582912 
sudo sysctl -w kern.sysv.shmall=12582912 

根據您的Postgres設置更改確切的數字;它必須大於Postgres在日誌文件中要求的大小。做完這兩個之後,你應該可以啓動Postgres。

要使更改在重新啓動時保持不變,請編輯/etc/sysctl.conf並在其中設置相同的值。