安裝postgresDB時,出現如下錯誤:
[postgres@localhost ~]$ /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
FATAL: could not create shared memory segment: 無效的參數
DETAIL: Failed system call was shmget(key=5432001, size=38076416, 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 38076416
bytes), reduce PostgreSQL's shared_buffers parameter (currently 4096) and/or its max_connections parameter (currently 100).
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.
解決方法:
我們可以修改shmmax內核參數,使SGA存在於一個共享內存段中。
通過修改/proc/sys/kernel/shmmax參數可以達到此目的。
[root@neirongroot]# echo 1073741824 > /proc/sys/kernel/shmmax
[root@neirongroot]# more /proc/sys/kernel/shmmax
1073741824這裏設爲1G。
對於shmmax文件的修改,系統重新啓動後會復位。可以通過修改/etc/sysctl.conf使更改永久化。
在該文件內添加以下一行 kernel.shmmax = 1073741824 這個更改在系統重新啓動後生效.
1、設置 SHMMAX
SHMMAX
參數定義共享內存段的最大尺寸(以字節爲單位)。在設置 SHMMAX時,切記 SGA的大小應該適合於一個共享內存段。 SHMMAX設置不足可能會導致以下問題:
ORA-27123:unableto attach to shared memory segment
您可以通過執行以下命令來確定 SHMMAX的值:
# cat/proc/sys/kernel/shmmax
33554432
SHMMAX 的默認值是 32MB。我一般使用下列方法之一種將 SHMMAX參數設爲 2GB:
通過直接更改 /proc文件系統,你不需重新啓動機器就可以改變 SHMMAX的默認設置。我使用的方法是將以下命令放入 /etc/rc.local啓動文件中:
#>echo "2147483648" > /proc/sys/kernel/shmmax
您還可以使用 sysctl命令來更改 SHMMAX的值:
# sysctl-w kernel.shmmax=2147483648
最後,通過將該內核參數插入到 /etc/sysctl.conf啓動文件中,您可以使這種更改永久有效:
# echo"kernel.shmmax=2147483648" >> /etc/sysctl.conf
2、設置 SHMMNI
我們現在來看 SHMMNI參數。這個內核參數用於設置系統範圍內共享內存段的最大數量。該參數的默認值是 4096。這一數值已經足夠,通常不需要更改。
您可以通過執行以下命令來確定 SHMMNI的值:
# cat/proc/sys/kernel/shmmni
4096
3、設置 SHMALL
最後,我們來看 SHMALL共享內存內核參數。該參數控制着系統一次可以使用的共享內存總量(以頁爲單位)。簡言之,該參數的值始終應該至少爲:
ceil(SHMMAX/PAGE_SIZE)
SHMALL 的默認大小爲 2097152,可以使用以下命令進行查詢:
# cat/proc/sys/kernel/shmall
2097152
SHMALL 的默認設置對於我們的 Oracle9 i RAC安裝來說應該足夠使用。
注意:在 i386平臺上 Red Hat Linux的頁面大小爲 4096字節。但是,您可以使用 bigpages,它支持配置更大的內存頁面尺寸。