Oracle記憶體體系結構

abstractcyj發表於2013-05-21
SGA(System Global Area) : SGA被所有伺服器和後臺程式共享, 它包含了可以在使用者之間共享的控制資訊以及資料。 例如:快取的資料塊和共享SQL區
       SGA包含以下記憶體區域:
           a. Shared pool: Caches various constructs that can be shared among users
               包含了: 庫快取
                               -Shared SQL area
                              資料字典快取
                              控制結構
           b. Database buffer cache: Caches blocks of data retrieved from the database
           c. KEEP buffer pool: A specialized type of database buffer cache that is tuned to retain blocks of data in memory for long periods of time
           d. RECYCLE buffer pool: A specialized type of database that is tuned to recycle or remove block from memory quickly
           e. nK buffer cache: One of several specialized type of database buffer cache that is designed to hold block sizes different than the default database block size
            f. Redo log buffer: caches redo information(used for instance recovery) util it can be written to the physical redo log files stored on the disk
           g. Large pool: Option area that provides large memory allocations for certain large processes, such as Oracle backup and recovery operations, and I/O server process
           大池專門用於以下情況:
? 共享伺服器連線,用於在SGA 中分配UGA 區
? 語句的並行執行,允許分配程式間的訊息緩衝區,這些緩衝區用於協調並行查詢伺服器。
? 備份,在某些情況下用於RMAN 磁碟I/O 緩衝區。
可以看到,這些記憶體分配都不應該在LRU 緩衝區池中管理,因為LRU 緩衝區池的目標是管理小塊的
記憶體。例如,對於共享伺服器連線記憶體,一旦會話登出,這個記憶體就不會再重用,所以應該立即返回到池
中。另外,共享伺服器UGA 記憶體分配往往“很大”。如果檢視前面使用SORT_AREA_RETAINED_SIZE 或
PGA_AGGREGATE_TARGET 的例子,可以看到,UGA 可能擴張得很大,成為絕對大於4 KB 的塊。把MTS
記憶體放在共享池中,這會導致把它分片成很小的記憶體,不僅如此,你還會發現從不重用的大段記憶體會導致
可能重用的記憶體老化。這就要求資料庫以後多做更多的工作來重建記憶體結構。
對於並行查詢訊息緩衝區也是如此,因為它們不能根據LRU 原則來管理。並行查詢訊息緩衝區可以
分配,但是在使用完之前不能釋放。一旦傳送了緩衝區中的訊息,就不再需要這個緩衝區,應該立即釋放。
對於備份緩衝區更是如此,備份緩衝區很大,而且一旦Oracle 用完了這些緩衝區,它們就應該“消失”。
使用共享伺服器連線時,並不是一定得使用大池,但是強烈建議你使用大池。如果沒有大池,而且使
用了一個共享伺服器連線,就會像Oracle 7.3 及以前版本中一樣從共享池分配空間。過一段時間後,這會
導致效能惡化,一定要避免這種情況。如果DBWR_IO_SLAVES 或者PARALLEL_MAX_SERVERS 引數設
置為某個正值,大池會預設為某個大小。如果你使用了一個用到大池的特性,建議你手動設定大池的大小。
            i. Java pool: Used for all session-specific Java code and data in the Java Virtual Machine(JVM)
            j. Streams pool: Used by Oracle Streams to store information required by capture and apply

在不關閉例項的情況下, database buffer cache, the shared pool, large pool, the Java pool和Streams pool的大小可以被改變(SGA的動態基礎架構)。Oracle資料庫使用初始化引數來建立管理記憶體結構。 最簡單的管理記憶體的方法是允許資料庫自動管理,調整。 我們只需要設定一個目標記憶體的初始化大小(MEMORY TARGET)和一個最大記憶體的初始化引數(MEMORY_MAX_TARGET)。

PGA: 程式當中包含資料以及控制資訊的記憶體區域。 PGA是程式開始執行時的專享記憶體區域, PGA的訪問是排他的。每一個伺服器程式和後臺程式都有它自己的PGA。
      PGA包含兩個最主要的區域:stack space(棧空間?)和User Global Area(UGA)

   

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

相關文章