Oracle記憶體結構(一)----SGA的區域資訊(轉)
SGA的區域資訊
SGA(system global area)系統全域性區跟一些必須的後臺程式合進來稱為例項(Instance).說它是全域性區是包含了全域性變數和資料結構,是系統區是包含了進入整個Oracle Instance的資料結構而不是特定的程式結構.
SGA區域:
SGA大概包括下面四到五種區域:
The fixed area
The variable area
The database blocks area
The log buffer
The instance lock database(for parallel server instances)----OPS&RAC
根據記憶體的大小,我們可以把The fixed area和The log buffer設為很小.
The fixed area:
SGA中的The fixed area包含了數千個原子變數,以及如latches和指向SGA中其它區域的pointers(指標)等小的資料結構.通過對fixed table內表X$KSMFSV查詢(如下)可以獲得這些變數的名字,變數型別,大小和在記憶體中的地址.
SQL> select ksmfsnam, ksmfstyp, ksmfssiz, ksmfsadr
2> from x$ksmfsv;
這些SGA變數的名字是隱藏的而且幾乎完全不需要去知道.但是我們可以通過結合fixed table內表X$KSMMEM獲得這些變數的值或者檢查它們所指向的資料結構.
SQL>select a.ksmmmval from x$ksmmem a where addr=(select addr from x$ksmfsv where ksmfsnam=’kcrfal_’);
SGA中的fixed area的每個組成部分的大小是固定的.也就是說它們是不依靠於其它的初始化引數的設定來進行調整的.fixed area中的所以組成部分的大小相加就是fixed area的大小.
The variable area:
SGA中的the variable area是由large pool和shared pool組成的.large pool的記憶體大小是動態分配的,而shared pool的記憶體大小即包含了動態管理的記憶體又包含了永久性的(已經分配的)記憶體.實際上,初始化引數shared_pool_size的大小設定是指定shared pool中動態分配的那部分記憶體的一個大概的SIZES而不是整個shared pool的SIZES
Shared pool中永久性的記憶體包含各種資料結構如:the buffer headers, processes, sessions, transaction arrays, the enqueue resources , locks, the online rollback segment arrays, various arrays for recording statistics.其中大部分的SIZE是依靠初始引數的設定來確定的.這些初始引數只能在例項被關閉的狀態下才能夠進行修改.所以這裡說的永久性是針對例項開啟狀態下的生存期而言.簡單的一個例子PROCESSES引數.在這個process arrays中的slots用完之後,如果有其它的process想再申請一個process則會失敗,因為它們在記憶體中的大小是在例項啟動時預分配的.不能動態修改之.
針對很多永久性的arrays,有很多的X$表都把這些元素做一個記錄而成員結構則作為欄位.V$檢視的資料就是從這些X$表獲得.如V$PROCESS是基於X$KSUPR內表的.V$PROCESS檢視不包含X$KSUPR的全部欄位. X$KSUPR也沒有覆蓋SGA程式結構的所有成員.
The variable area的在SGA中的SIZES就等於LARGE_POOL_SIZE,SHARED_POOL_SIZE和永久性的記憶體arrays的SIZE三者相加. 永久性的記憶體arrays的總的SIZE可以通過初始引數的設定來計算得到.然而,你需要知道從引數獲得這些array sizes的方程式,每個array元素大小的位元組數,還有array頭資訊的sizes.這些跟Oracle的版本號和OS有關.實際使用中,我們是不必要計算這個永久性的記憶體arrays的SIZE的.如果想知道,一個方法就是在STARTUP NOMOUNT資料庫時記下the variable area.然後減去引數中LARGE_POOL_SIZE和SHARED_POOL_SIZE的大小就可以.
The database block area:
這個區域是資料庫塊的拷貝.在Oracle 8i中,buffer數由DB_BLOCK_BUFFERS指定.每個buffer的大小由DB_BLOCK_SIZE指定.所以這個區域的大小是兩者相乘.在Oracle 9i中,這個區域的大小是DB_CACHE_SIZE指定.這個區不包含它們自己的控制結構,只包含database block copies data.每個buffer的header資訊存在於SGA的the variable area中.還有latches資訊也放在SGA的the variable area中.在設定DB_BLOCK_BUFFERS時每4個BUFFERS會影響the variable area的1K的SIZE.關於這一點.可以通過測試(針對8i而言).
The log buffer:
這個區域的SIZE是由引數LOG_BUFFER指定的.如果OS支援記憶體保護,log buffer將會被兩個保護頁面包圍起來以免被一些ORACLE的錯誤程式損壞log buffer.在SGA中,跟其它的如variable area和database block area相比,log buffer是非常小的.log buffer分成內部的buffer blocks,而這些block各有8個位元組的頭部資訊存在於variable area中.
The instance lock database
在OPS/RAC配置中,instance locks用來控制由所有instances共享的資源以序列的方式被進入並使用.SGA中的這個區域所維護的是本地例項所要使用的資料庫資源,所有例項和程式都會用到的資料庫資源,還有所有例項和程式當前需要的或者已經擁有的鎖(LOCKS).這三個arrays的SIZE分別由引數LM_RESS,LM_PROCS,LM_LOCKS引數指定.(這三個引數是RAC的引數,在單例項中用SHOW PARAMETER是檢視不到的). The instance lock database還包含了message buffers和其它的structure.但是其SIZE是非常小的.
這個區域的SIZE是沒辦法在例項啟動的時候看到的.這是Oracle Internals.可以用ORADEBUG工具檢視.SQL>ORADEBUG IPC.至於ORADEBUG工具就不做介紹.用這個工具做操作時需要經過Oracle Support同意.
可以用以下的兩種方式DUMP SGA:
SQL>ALTER SESSION SET EVENTS 'immediate trace name global_area level 2';
或者SQL>ORADEBUG DUMP GLOBAL_AREA 2
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/756652/viewspace-242268/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle記憶體結構(四)----如何獲得Oracle各記憶體段的內部資訊(轉)Oracle記憶體
- Oracle記憶體結構(二)----Shared Pool的詳細資訊(轉)Oracle記憶體
- Oracle記憶體結構(三)----Process Memory的詳細資訊(轉)Oracle記憶體
- Oracle - 資料庫的記憶體結構Oracle資料庫記憶體
- Oracle Exadata與SGA快取記憶體CQOracle快取記憶體
- JVM之記憶體區域總結JVM記憶體
- Java記憶體區域(執行時資料區域)和記憶體模型(JMM)Java記憶體模型
- Oracle OCP(39):Database 記憶體結構OracleDatabase記憶體
- JVM的記憶體區域JVM記憶體
- Java記憶體區域有哪些構成?Java記憶體
- JVM 記憶體區域JVM記憶體
- 【JVM記憶體區域】JVM記憶體
- Java記憶體區域Java記憶體
- Java記憶體區域和記憶體模型Java記憶體模型
- Java記憶體區域總結(堆、棧、方法區等)Java記憶體
- 【MEMORY】Oracle記憶體結構資源常用檢視及sqlOracle記憶體SQL
- Oracle面試寶典-記憶體結構篇Oracle面試記憶體
- 理解JVM(一):記憶體結構JVM記憶體
- JVM——記憶體區域:執行時資料區域詳解JVM記憶體
- JVM的記憶體區域劃分JVM記憶體
- Java的記憶體區域劃分Java記憶體
- 記憶體結構記憶體
- oracle12c之 控制pdb中sga 與 pga 記憶體使用Oracle記憶體
- Java記憶體區域與記憶體溢位異常 - 執行時資料區Java記憶體溢位
- JVM執行時記憶體資料區域JVM記憶體
- 結構體資訊寫入SD卡,記憶體不連續結構體SD卡記憶體
- oracle體系結構(轉)Oracle
- Java的記憶體管理機制之記憶體區域劃分Java記憶體
- Java記憶體區域學習Java記憶體
- JVM記憶體區域劃分JVM記憶體
- JAVA記憶體區域與記憶體溢位異常Java記憶體溢位
- JVM學習(一)——記憶體結構JVM記憶體
- JVM記憶體結構JVM記憶體
- PostgreSQL:記憶體結構SQL記憶體
- Postgresql資料庫體系結構-程式和記憶體結構SQL資料庫記憶體
- Hotspot VM 執行時資料區記憶體結構劃分HotSpot記憶體
- JVM系列(二) - JVM記憶體區域JVM記憶體
- JVM-概述和記憶體區域JVM記憶體