首先,我們通過一張圖片來了解一下Oracle資料庫的記憶體結構,如下:
每個資料庫實體有兩個關聯的記憶體結構—系統全域區(SGA),程式全域區(PGA),
- 系統全域(SGA):一組共享的記憶體結構(稱為SGA 組件),其中包含一個OracleDB 實體的資料和控制資訊,SGA 由所有服務器行程和后臺行程共享,SGA 中存盤的資料有高速快取的資料塊和共享SQL 區域等;SGA的大小由引數sga_target決定,

- 程式全域區(PGA):包含某個服務器行程或后臺行程的資料及控制資訊的記憶體區域,PGA 是Oracle DB 在服務器行程或后臺行程啟動時創建的非共享記憶體,服務器行程對PGA 的訪問是獨占式的,每個服務器行程和后臺行程都具有自己的PGA,PGA的大小由引數pga_aggregate_target決定,
SGA幾個關鍵組件做以說明:
- 共享池:shared pool,用于快取可在用戶間共享的各種構造,比如給定SQL 陳述句的語法分析樹和執行計劃,
- 資料庫緩沖區高速快取:buffer cache,從資料庫中檢索到的資料塊是快取在此,資料塊從此記憶體組件對資料塊進行操作,降低了硬碟IO負擔,如果用戶行程所需的資料在該區域能很找到,我們稱之為高速快取區命中,高的命中率反映出來的效果就是操作反應快,這點很好理解,資料庫優化中很有必要考慮這點,
在buffer cache中,存在以下的緩沖區:
(*)KEEP 緩沖區池:一種專用資料庫緩沖區高速快取,用于長時間在記憶體中保留資料塊,一些頻繁使用的資料塊可相對長期的保留在此,不至于每次都從硬碟獲取,從而優化了資料庫的性能;
(*)RECYCLE 緩沖區池:一種專用資料庫緩沖區高速快取,用于從記憶體中快速回識訓洗掉資料塊,相對于KEEP的對立面,很好理解;
(*) nK 緩沖區高速快取:多種專用資料庫緩沖區高速快取中的一種,用于存放大小不同于默認資料庫塊大小的資料塊,注意默認資料塊為8K
- 重做日志緩沖區:log buffer,用于存放有關對資料庫所做更改的資訊,重做資訊在寫入磁盤中重做日志檔案(即redo檔案)前,將快取在此處,
- 大型池,用于為某些大型行程(例如Oracle 備份和恢復操作)和I/O 服務器行程提供大型記憶體分配,
- Java池和流池

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/5503.html
標籤:Oracle
