在32bit或者64bit的平台上跑32bit的Oracle的時候,SGA總是受到限制,導致大記憶體的機器不能完全發揮作用,最近就專門找了一些關於調整最大SGA區的文檔,看了看,感覺收穫蠻大的,總結了一下幾個平台的,但是不全,歡迎大家探討補全。
我先把我總結的幾個平台貼出來大家討論討論。
在RedHat ADVANCED SERVER2.1上擴充SGA(1.7G以上)
一. 目標:
1. 在一個4G以上的記憶體的機器上將SGA從1.7G增至2.7G
2. 相容8.1.7,9.0.1,9.2.0版本的資料庫
3. 整個SGA都能夠被提高
二. 限制:
1. 只允許在本地啟動和關閉資料庫
2. 如果為PGA儲存的虛擬記憶體太少就會導致ORA-4030的錯誤
三. 基本步驟:
1. 查看啟動oracle使用者的shel的進程號PID
ps -ef或者echo $$
2. 以root使用者單獨開一個進程,執行:
echo 268435456 > /proc/$PID/mapped_base
這個要對server上所有產生oracle進程的shell
3. 修改shmmax的值。用root使用者執行
echo 3000000000 > /proc/sys/shmmax
4. 重新分配SGA
shutdown immediate所有的oracle執行個體
cd $ORACLE_HOME/lib
cp –a libserver9.a libserver9.a.org(備份liberver9.a檔案)
cd $ORACLE_HOME/bin
cp –a oracle oracle.org(備份oracle檔案)
cd $ORACLE_HOME/rdbms/lib
genksms –s 0x15000000 > ksms.s
make –f ins_rdbms.mk ksms.o(編譯新的sga地址)
make –f ins_rdbms.mk ioracle(重新連結)
這樣改過以後就可以支援到2.65G的sga,從而可以提高db_cache_size或者db_block_buffers去提高資料庫的緩衝區了。
更多Oracle相關資訊見Oracle 專題頁面 http://www.bkjia.com/topicnews.aspx?tid=12