2.oracle資料庫記憶體參數的優化
(1)系統核心參數
修改 /etc/sysctl.conf 這個檔案,加入以下的語句:
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
參數依次為:
kernel.shmmax:共享記憶體段的最大尺寸(以位元組為機關)。
kernel.shmmni:系統中共享記憶體段的最大數量。
kernel.shmall:共享記憶體總量,以頁為機關。
fs.file-max:檔案句柄數,表示在linux系統中可以打開的檔案數量。
net.ipv4.ip_local_port_range:應用程式可使用的ipv4端口範圍。
需要注意的幾個問題
關于kernel.shmmax
oracle sga 由共享記憶體組成,如果錯誤設定 shmmax可能會限制sga 的大小,shmmax設定不足可能會導緻以下問題:ora-27123:unable to attach to shared memory segment,如果該參數設定小于oracle sga設定,那麼sga就會被配置設定多個共享記憶體段。這在繁忙的系統中可能成為性能負擔,帶來系統問題。
oracle建議kernel.shmmax最好大于sga,以讓oracle共享記憶體區sga在一個共享記憶體段中,進而提高性能。
關于kernel.shmall
表示系統共享記憶體總大小,以頁為機關。
一個32位的linux系統,8g的記憶體,可以設定kernel.shmall = 2097152,即為: 2097152*4k/1024/1024 = 8g就是說可用共享記憶體一共8g,這裡的4k是32位作業系統一頁的大小,即4096位元組。
關于kernel.shmmni
表示系統中共享記憶體段的最大數量。系統預設是4096,一般無需修改,在sun os下還有kernel.shmmin參數,表示共享記憶體段最小尺寸,勿要混肴!
(2)sga、pag參數的設定
a oracle在記憶體管理方面的改進
oracle 9i通過參數pga_aggregate_target參數實作pga自動管理 oracle 10g通過參數sga_target參數實作了sga的自動管理,
oracle 11g實作了資料庫所有記憶體塊的全自動化管理,使得動态管理sga和pga成為現實。
自動記憶體管理的兩個參數:
memory_target:表示整個oracle執行個體所能使用的記憶體大小,包括pga和sga的整體大小,即這個參數是動态的,可以動态控制sga和pga的大小。
memory_max_target:這個參數定義了memory_target最大可以達到而不用重新開機執行個體的值,如果沒有設定memory_max_target值,預設等于memory_target的值。
使用動态記憶體管理時,sga_target和pga_aggregate_target代表它們各自記憶體區域的最小設定,要讓oracle完全控制記憶體管理,這兩個參數應該設定為0。
b oracle五種記憶體管理方式
Ø 自動記憶體管理,即amm (automatic memory management)
Ø 自動共享記憶體管理,即asmm(automatic shared memory management)
Ø 手動共享記憶體管理
Ø 自動pga管理
Ø 手動pga管理
自動記憶體管理(amm)
預設安裝oracle11g的執行個體就是amm方式。通過如下檢視:
示例如下:
sql> show parameters target
name type value
------------ --------------------- ------------------ ---------------------- archive_lag_target integer 0
db_flashback_retention_target integer 1860
fast_start_io_target integer 0
fast_start_mttr_target integer 0
memory_max_target big integer 1400m
memory_target big integer 1400m
pga_aggregate_target big integer 0
sga_target big integer 0
注意:如果初始化參數 lock_sga = true ,則 amm 是不可用的。
自動共享記憶體管理
自動共享記憶體管理是oracle10g引進的,如果要使用自動共享記憶體管理,隻需設定memory_target=0,然後顯式指定sga_target即可。
sql> alter system set memory_target=0 scope=both;
system altered.
sql> alter system set sga_target=1024m scope=both;
sql>
手工共享記憶體管理
oracle9i以及以前版本,隻能手工設定共享記憶體管理,如果要使用手動共享記憶體管理,首先需要設定sga_target 與 memory_target為0。
sga包含主要參數有:
share_pool_size:共享池大小,建議300-500m之間。
log_buffer:日志緩沖區大小,建議1-3m之間。
large_pool_size:大緩沖池大小,非mts系統,建議在20-30m之間。
java_pool_size:java池大小,沒有java應用時,建議10-20m之間。
db_cache_size:資料緩沖區大小,根據可使用記憶體大小,盡可能大。
自動pag管理
oracle9i版本引入了自動pga管理,如果使用的是amm管理方式,則無需擔心pga的配置,但是如果對對amm管理不放心的話,可以設定自動pga管理,設定
workarea_size_policy = auto
然後指定pga_aggregate_target大小即可。,
手工pag管理
如果要做到精确的控制pga,還可以設定手動管理pga,設定
workarea_size_policy = manual
然後分别指定pga相關參數即可:
pga相關參數有:
sort_area_size
sort_area_retained_size,
3.oracle下磁盤存儲性能優化
① 選擇檔案系統存取資料
檔案系統的選擇
單一檔案系統(ext2、ext3、xfs等)
叢集檔案系統(gfs、ocfs2)
檔案系統存儲優缺點:
優點:管理維護友善。
缺點:資料讀寫要經過作業系統級的緩存,效率不是很高。
② asm(automatic storage management)
asm優點:
資料可直接讀寫,無需經過作業系統存取效率很高,讀寫效率與直接的原始裝置基本相同。
oracle提供了專門的管理和維護工具
關于作者
高俊峰,網名:南非螞蟻
ixpub “儲存設備與容災技術”及“ linux與開源世界”版主。
喜歡oracle和 unix/linux技術,平時主要活動在itpub.net﹑ixpub.net﹑chinaunix.net等大型技術社群,一直緻力與oracle資料庫﹑unix/linux作業系統管理﹑優化領域,現在主要從事oracle資料庫管理和項目規劃設計工作,擅長oracle資料庫的備份恢複,性能調優,對unix/linux叢集應用也有一定的研究。
轉自:http://www.517sou.net/article/104.aspx