oracle 9i 32位系統 使用VLM 突破SGA 1.7G限制

spectre2發表於2016-01-26
最近公司有幾臺舊環境的機器,32位RHEL AS 4.8的系統,oracle 9i的資料庫,資料庫的壓力比較大,記憶體都是8GB的,但是oracle在32位系統中,SGA只能使用不超過1.7G,多出來的記憶體空置著,頂多快取下系統檔案,我開始想辦法把這部分記憶體利用起來,還是要靠oracle的VLM特性,實際上就是利用linux的tmpfs(記憶體檔案系統)
1、啟動資料庫,檢視原有主要引數配置情況:
啟動sqlplus,匯出初始化引數檔案:
SQL>create pfile from spfile
備份init和spfile。

2、配置linux引數
(1)修改/etc/fstab 的shm,並新增許可權
tmpfs                     /dev/shm                tmpfs   defaults,size=4G,uid=500,gid=500    0 0

(2)增加  max locked memory     ulimit
為了適應VLM 視窗大小(預設為512M)需要調整Oracle鎖定的記憶體地址空間的大小(在預設情況下為4k),本次中將Oracle鎖定的記憶體設定為接近4G,新增如下內容到/etc/security/limits.conf
oracle soft memlock 4194303
oracle hard memlock 4194303
注:在32位的Oracle中,鎖定記憶體的大小不能超過4G,計算公式:4*1024*1024-1。

(3)切換到Oracle使用者,輸入如下命令,使第(2)步的設定生效:
$ ulimit
(4)輸入“ulimit -l”可以檢視當前設定的結果
3、配置Oracle
(1)修改initorcl.ora檔案中如下引數設定,如果引數檔案中沒有,則新增下述引數設定。
*.use_indirect_data_buffers=true
*.db_block_buffers = 510000
*.shared_pool_size = 252984832  (這個值不能太大,也不能太小,如果太小了,在載入這個pfile時系統會提示你把這個值放到多少at least,按照系統提示的值放就行了)
(本次計劃將SGA區調整到接近4G,由於db_block_size=8192,所以設定db_block_buffers為510000,計算公式:4*1024*1024/8.192-200)
將db_cache_size引數設定刪除(使用VLM技術增大SGA到2.6G時db_cache_size引數將失效,必須使用db_block_buffers引數。)
將sga_target引數刪除(預設沒配置)
刪除:
*.db_cache_size=xxxxxx
*.java_pool_size= xxxxxx
*.large_pool_size= xxxxxx
*.shared_pool_size= xxxxxx
**************************
#我的設定如下(4G):
*.use_indirect_data_buffers=true
*.db_block_buffers = 510000
*.shared_pool_size = 419430400
*.pga_aggregate_target=629145600
*******************************
 
(2)以initorcl.ora引數檔案啟動並關閉資料庫,檢視引數設定是否生效:
SQL>startup pfile='/opt/app/oracle/product/9.2.0/dbs/initorcl.ora'
啟動沒問題,再建立spfile
SQL> create spfile from pfile;
正常重啟資料庫。

可以發現, data buffer部分的共享記憶體來自VLM,但SGA的其他部分,如shared_pool使用的共享記憶體來自系統的普通共享記憶體;
kernel.shmmax的設定應大於等於除data buffer以外的其他SGA元件之和;


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14184018/viewspace-1982267/,如需轉載,請註明出處,否則將追究法律責任。

相關文章