Oracle記憶體結構詳解(一) Oracle SGA簡介

來源:互聯網
上載者:User

Oracle的記憶體配置與oracle效能息息相關。關於記憶體的配置,是最影響Oracle效能的配置。記憶體還直接影響到其他兩個重要資源的消耗:CPU和IO.

先看Oracle記憶體儲存的主要內容是什麼:

程式碼(PLSQL、Java);

關於已經串連的會話的資訊,包括當前所有活動和非活動會話;

程式運行時必須的相關資訊,例如查詢計劃;

Oracle進程之間共用的資訊和相互交流的資訊,例如鎖;

那些被永久儲存在外圍儲存介質上,被cache在記憶體中的資料(如redo log條目,資料區塊)。

每個Oracle資料庫都是由Oracle Instance(執行個體)與資料庫(資料檔案,控制檔案、重做記錄檔)組成,其中所謂執行個體就是使用者同資料庫互動的媒介,使用者通過於一個執行個體相連來操作資料庫。而執行個體又是由統一的記憶體結構(SGA,PGA,UGA)和一批記憶體駐留進程組成。執行個體在作業系統中用ORACLE_SID來標識,在Oracle中用參數INSTANCE_NAME來標識, 它們兩個的值是相同的。資料庫啟動時,系統首先在伺服器記憶體中分配系統全域區(SGA), 構成了Oracle的記憶體結構,然後啟動若干個常駐記憶體的作業系統進程,即組成了Oracle的 進程結構,記憶體地區和後台進程合稱為一個Oracle執行個體。

1、SGA的概念

SGA是一組為系統分配的共用的記憶體結構,可以包含一個資料庫執行個體的資料或控制資訊。如果多個使用者串連到同一個資料庫執行個體,在執行個體的SGA中,資料可以被多個使用者共用。   當資料庫執行個體啟動時,SGA的記憶體被自動分配;當資料庫執行個體關閉時,SGA記憶體被回收。  SGA是佔用記憶體最大的一個地區,同時也是影響資料庫效能的重要因素。

SGA區是可讀寫的。所有登入到執行個體的使用者都能讀取SGA中的資訊,而在oracle做執行操作時,服務進程會將修改的資訊寫入SGA區。

SGA主要包括了以下的資料結構:

資料緩衝(Buffer Cache)

重做日誌緩衝(Redo Log Buffer)

共用池(Shared Pool)

Java池(Java Pool)

大池(Large Pool)

流池(Streams Pool --- 10g以後才有)

資料字典緩衝(Data Dictionary Cache)

其他資訊(如資料庫和執行個體的狀態資訊)

SQL> show sga

Total System Global Area  612368384 bytes

Fixed Size                  1250428 bytes

Variable Size             192940932 bytes

Database Buffers          411041792 bytes

Redo Buffers                7135232 bytes

查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

備忘:

(1)SGA 中的資料字典緩衝和其他資訊會被執行個體的後台進程所訪問,它們在執行個體啟動後就固定在SGA中了,而且不會改變,所以這部分又稱為固定SGA(Fixed SGA)。這部分地區的大小一般小於100K。

(2)Shared Pool、Java Pool、Large Pool和Streams Pool這幾塊記憶體區的大小是相應系統參數設定而改變的,所以有通稱為可變SGA(Variable SGA)。

2、SGA參數說明

通過下面的語句查詢

SQL> show parameter sga

NAME                  TYPE        VALUE

------------------------------------ ----------- -------

lock_sga                boolean     FALSE

pre_page_sga            boolean     FALSE

sga_max_size            big integer  584M

sga_target               big integer  584M

先對這幾個參數做一下說明:

SQL> select name,value ,ISSYS_MODIFIABLE from v$parameter where name like 'sga%';

NAME            VALUE           ISSYS_MOD

--------------- --------------- ---------

sga_max_size    612368384       FALSE

sga_target      612368384       IMMEDIATE

如果ISSYS_MODIFIABLE 返回的是false,說明該參數無法用alter system語句動態修改,需要重啟資料庫。

所以sga_max_size 是不可以動態調整的。但是我們可以對sga_target 進行動態調整。

(1)SGA_MAX_SIZE:

SGA區包括了各種緩衝區和記憶體池,而大部分都可以通過特定的參數來指定他們的大小。但是,作為一個昂貴的資源,一個系統的實體記憶體大小是有限。儘管對於CPU的記憶體定址來說,是無需關係實際的實體記憶體大小的,但是過多的使用虛擬記憶體導致page in/out,會大大影響系統的效能,甚至可能會導致系統crash。所以需要有一個參數來控制SGA使用虛擬記憶體的最大大小,這個參數就是SGA_MAX_SIZE。

當執行個體啟動後,各個記憶體區只分配執行個體所需要的最小大小,在隨後的運行過程中,再根據需要擴充他們的大小,而他們的總和大小受到了SGA_MAX_SIZE的限制。

當試圖增加一個記憶體的大小,並且如果這個值導致所有記憶體區大小總和大於SGA_MAX_SIZE時,oracle會提示錯誤,不允許修改。

當然,如果在設定參數時,指定地區為spfile時(包括修改SGA_MAX_SIZE本身),是不會受到這個限制的。這樣就可能出現這樣的情況,在spfile中,SGA各個記憶體區設定大小總和大於SGA_MAX_SIZE。這時,oracle會如下處理:當執行個體再次啟動時,如果發現SGA各個記憶體總和大於SGA_MAX_SIZE,它會將SGA_MAX_SIZE的值修改為SGA各個記憶體區總和的值。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.