Oracle的內存結構分為SGA和PGA,對於SGA是動態分配的,通過參數sga_max_size進行配置,在oracle數據庫實例啟動的時候就已經分配好,對於所有的會話連接共享一個SGA;對於PGA則是每個用戶的會話連接創建一個自己的PAG的內存區域。
Shared Pool:存放最近執行過的sql語句的執行結構(執行計劃)已經數據定義(數據字典).主要組成分為library cache,data dictionary cache。其中大小的決定參數是shared_pool_size。
對於library cache主要是存放shared sql area 和 shared pl/sql area 這兩個區域塊
對於 data dictionary cache 主要是用於存放數據系統,系統的動態性能視圖和系統表
對於SGA的重頭戲 database buffer cache 主要是用來存放data數據文件的數據塊,把硬盤中的數據讀取直接存放到內存中,提高數據的操作速度。對於用戶對數據的操作,首先是找database buffer cache中的數據,如果可以找到就直接返回數據,不再從硬盤中找,提高數據響應速度。反應數據庫性能的一個重要指標就是database buffer cache的命中率.其中主要的參數有:db_keep_cache_size,db_cache_size,db_recycle_cache_size
Redo log buffer:是數據文件redo log的緩存,如果需要恢復數據,讀取redo log 文件的話,會先從 redo log buffer 裡面讀取數據庫的操作記錄。對於數據庫的操作記錄也是先寫入到redo log buffer,然後在存儲到 數據文件 redo log files 中
Larger pool: Rman備份的時候會使用larger pool 進行數據的緩存,某些server procees 的I/O操作也是需要使用larger pool 進行數據的緩存。
Java pool: 大小決定於參數java_pool_size,對於oracle中使用java語言寫的方法在執行的時候就是使用java pool這個存儲區域。該緩存區域主要是用於java的相關操作。