要提高應用系統的性能,在維持現有硬件平台不變的情況下,主要采用的方法由以下幾種:
l 調整操作系統參數,提高操作系統的管理性能;
l 調整數據庫管理系統的參數,提高數據庫管理系統的性能;
l 修改應用程序,提高應用程序的運行效率。
一、ORACLE數據庫的內存結構
本文將著重對SGA的結構進行介紹:
SGA 通常又被稱作 Shared Global Area,包括以下幾個共享區域:
l 數據緩存(the Database buffer cache)
數據緩存存放從數據庫文件中讀取的數據,可分為剩余緩存(Free buffer)、正在使用的緩存(Pinned buffer)、已使用緩存(Dirty buffer)。
l 日志緩存(redo log buffer)
存放數據庫已改變的信息。
l 共享存儲池(shared pool)
共享存儲池主要由三個方面構成:
Library cache
Library cache 包括共享SQL區、用戶自有SQL區、PL/SQL過程和程序包及控制結構;
Dictionary Cache
存放數據庫字典信息,如:表及視圖名、列名及數據類型、各用戶的存取權限;
Control structures
l 請求及響應隊列(request and response queues)(僅用於多線索模式)
l 其他(other miscellaneous information)
二、ORACLE 內存的工作機制
當用戶請求被接受後,ORACLE 的內存分配將分以下幾個步驟進行:
1.首先檢查共享SQL區有無該SQL語句,如有在使用該SQL區執行用戶的SQL語句(稱作一次library cache hit),否則為該SQL語句分配共享SQL 區(稱作一次library cache miss),同時為該語句分配自有SQL 區。
2.檢查Dictionary cache 中有無要訪問的表/視圖信息,若無則將其讀入Dictionary cache 中(稱作一次rowcache miss)。
3.檢查數據緩存(Database buffer cache),有無要操作的數據,如有則使用當前的緩存(稱作一次 data buffer hit),否則,將按下列步驟為該數據請求新的緩存(稱作一次 data buffer miss):
1) 搜索least-recently-used(LRU) list,若發現dirty buffer 則寫入dirty list 並繼續搜索,如發現free buffer則將其分配給該用戶,同時將該buffer移至most-recently-used(MRU) list,若未能搜索到free buffer,則觸發DBWR進程將一些dirty buffer 寫入磁盤,並將這部分dirty buffer 釋放為free buffer。
2) 從數據文件中將要操作的數據讀入buffer cache 中;
4.如果用戶執行的是INSERT、DELETE、UPDATE等操作,系統將為其分配redo log buffer,用於記錄數據的變更情況,當redo log buffer中無free buffer時觸發LGWR進程,將redo log buffer中的一些信息寫如數據庫的LOG FILE 中。