SGA 的Shared Pool部分包含DB Buffer Cache、Data Dictionary Cache、SQL 查詢結果Cache、PL/SQL快取記憶體等。
“Data Dictionary”是資料庫內的Table和View的集合。在SQL 語法語法分析期間,Oracle DB 會頻繁存取Data Dictionary。Oracle DB 對Data Dictionary的存取十分頻繁,因此在記憶體中指定了兩個特殊的位置來存放Data Dictionary。
- 一個區域稱為“Data Dictionary Cache”。
- 記憶體中的另一個用於存放字典資料的區域稱為“DB Buffer Cache”。
所有Oracle DB 使用者Process都共用這兩個快取記憶體以便存取資料字典資訊。
Oracle DB 使用共用SQL 區域(以及PGA 中保留的專用SQL 區域)來表示它所運行的每個SQL 語法。Oracle DB 可識別兩個用戶執行相同SQL 語法的情況,從而為這些使用者重用共用SQL 區域。
“共用SQL 區域”包含給定SQL 語法的語法分析樹和執行計畫。Oracle DB 透過為多次運作的SQL 語法使用一個共用SQL 區域來節省記憶體。當許多使用者使用同一個應用程式時,同一SQL 語法會被多此使用。對新的SQL 語法進行語法分析時,Oracle DB 會從Shared Pool中分配記憶體,以便在共用SQL區域中存儲該語法。該記憶體的大小取決於語法的複雜性。
Oracle DB 處理PL/SQL 程式單元(Procedure、Funcation、Package、Triggle)的方式與處理SQL 語法的方式十分相似。Oracle DB 分配一個共用區域以存放程式單元在經過語法分析和編譯之後的形式。Oracle DB 分配一個專用區域,以便存放特定於運行程式單元的會話的值,包括區域變數、全域變數和套裝程式變數,並且存放用於執行SQL 的緩衝區。如果多個使用者運行同一個程式單元,則所有使用者都使用同一個共用區域,但維護其各自專用SQL 區域的單獨副本,以便存放特定於其自身會話的值。
PL/SQL 程式單元中包含的單個SQL 語法的處理方式與其它SQL 語法的處理方式類似。
無論這些SQL 語法在PL/SQL 程式單元中的來源如何,它們都使用共用區域來存放其語法分析表示,並且為語法的每個Session使用一個專用區域來服務。
查詢的結果和查詢片段的結果可以快取記憶體在“SQL 查詢結果快取記憶體”的記憶體中。這樣,資料庫可以在以後執行這些查詢和查詢片段時使用快取記憶體結果進行回答。由於從SQL 查詢結果快取記憶體中檢索結果要比重新運行查詢快得多,因此將頻繁運行的查詢的結果緩存起來可以大大提高這些查詢的性能。
沒有留言:
張貼留言