AIX 下oracle 資料庫記憶體優化

lenx2000發表於2010-04-13
記憶體訪問的衝突出現在當程式申請的記憶體超過系統的實體記憶體總量時,為了處理這種情況,系統將程式與資料在記憶體和硬碟間進行交換。

控制記憶體交換操作 (Paging)
大量的記憶體交換操作會極大地影響系統的效能,尤其是在當資料庫檔案建立在檔案系統上時(JFS and JFS2) 。在這種情況下經常訪問的資料,即在SGA 中存在,也同樣在檔案的快取中存在。這種相同的資料在記憶體中快取兩次的情況,會降低記憶體的使用效率,從而使記憶體頻繁進行交換操作,造成系統的I/O 瓶頸,降低整個系統的效能。

調整 AIX 上的檔案快取
在AIX 上,可以通過vmtune 命令中的MINPERM 和MAXPERM 引數,調整系統檔案快取來控制記憶體交換操作,MINPERM 和MAXPERM 引數的調整應遵照以下的原則:
l 當記憶體中的檔案快取頁在MINPERM 以下時,記憶體頁交換演算法同時交換檔案快取頁和程式頁(computational pages)
l 當記憶體中的檔案快取頁在MAXPERM 以上時,記憶體頁交換演算法只交換檔案快取頁。
l 當記憶體中的檔案快取頁在MINPERM 和MAXPERM 之間時,記憶體頁交換演算法通常只交換檔案快取頁,但如果檔案快取頁的交換率大於程式頁時,程式頁也同樣被交換。

MINPERM 和MAXPERM 引數的預設值
MINPERM = ((number of memory page) – 1024)*0.2
MAXPERM = ((number of memory page) – 1024)*0.8
可以用以下命令將MINPERM 設為5% 的記憶體頁,而MAXPERM 設為20% 的記憶體頁。

# vmtune –p 5 –P 20

預設值分別為20% 和80% 。

在Oracle 資料庫應用的環境下,可以將MINPERM 和MAXPERM 分別設為5% 和20% 甚至更小,從而使記憶體更多地被用於Oracle 的SGA 而不是系統的檔案快取。

配置足夠的交換區
如果交換區空間不足會造成系統響應速度變慢甚至掛起,交換區的大小取決於系統記憶體的大小以及應用程式對記憶體的需求。在AIX 上可以動態增加交換區,也可以用lsps 命令察看交換區的使用狀況,以及用vmstat 監視系統記憶體頁交換的操作。

通常交換區的大小需要大於系統的實際記憶體,這主要取決於應用程式對記憶體的需求。使用者需要監視交換區的使用狀況,根據需要增加交換區的空間。對於執行Oracle Application 或Oracle development tools 可能需要較大的交換空間。

排定記憶體需求優先順序
如果系統的記憶體不足,就需要對程式對記憶體使用的優先順序進行排序,將記憶體優先分配給能獲得更好的系統總體效能的程式。通常的順序如下:
1. AIX 和Oracle 的核心程式
2. 應用程式程式
3. Oracle 的Redo log buffer
4. PGA 和共享池(shared pool)
5. Oracle 的資料快取(block buffer cache)
例如:當你查詢Oracle 的動態效能表時發現共享池(shared pool) 和資料快取區(block buffer cache) 都需要配置更多地記憶體,而你的系統中的空閒記憶體有限,那麼將空閒記憶體分配給共享池比分配給資料快取區有更好的效果。

資料塊 (Database block) 的大小
使用者可以選擇Oracle 資料庫中資料塊的大小以獲得更好的效能,在AIX 上通過設定DB_BLOCK_SIZE 初始化引數,選擇從2KB 到32KB 的資料塊,預設值是4KB 。如果資料檔案在檔案系統上,則Oracle 資料塊的大小應為檔案系統資料塊4KB 的整倍數。如果資料檔案在系統裸裝置上,則Oracle 資料塊的大小應為系統資料塊512B 的整倍數。

Oracle 公司推薦,對於線上交易的應用(OLTP) 或混合型的應用環境,採用2KB 或4KB 的資料塊。對於BI 的應用或決策支援系統(DSS) ,採用更大的資料塊,如8KB ,16KB 或32KB 。

調整日誌歸檔快取 (Log Archive Buffers)
配置較大的快取可以提高資料庫日誌歸檔的速度,但注意不要對整個系統的效能產生影響。使用者可以將LOG_ARCHIVE_BUFFER_SIZE 增加到128KB ( 其預設值為4KB) ,會提高0-20% 的資料庫歸檔操作的效能。

調整 SGA 的大小
對於Oracle SGA 來說,被系統的記憶體管理程式換出到交換區上,肯定是使用者最不願意見到的情況,這就需要系統配置有足夠的記憶體。對於大量使用者同時線上的應用,建議配置較大的SGA 區。對於SGA 影響最大的引數是DB_BLOCK_BUFFERS 和SHARED_POOL_SIZE 。增大這兩個引數,取決於使用者希望分配給SGA 記憶體的大小,同時,增大這兩個引數也會造成CPU 的利用率提高。

小結
合理的記憶體配置,是Oracle 資料庫效能調整的重要方面,其根本的目標是,首先儘量避免系統記憶體頁的交換操作,然後儘量將應用程式經常用到的資料快取在系統的SGA 區中。

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

相關文章