Oracle 10g SGA 的自動化管理
--==============================
--Oracle 10g SGA 的自動化管理
--==============================
/*
在SGA中每一個單獨的元件究竟需要多少記憶體呢?在Oracle 10g 中可以自動化管理大多數SGA引數。
一、什麼是SGA
簡言之,系統全域性區(SGA)僅僅是在Oracle例項啟動時的共享記憶體結構,提供了例項和控制它行為的一些資訊。下面
的表中給出了關於SGA一些特定元件的概要,控制記憶體大小分配的可變引數,以及這些特定的元件將影響Oracle server
哪些範圍,並給出了一個簡短的描述。從這個簡短的列表中我們可以發現,在沒有徹底地理解我們的應用程式後臺的工
作狀況下,以我們能力去推斷並給這些元件中每一個設定記憶體的大小並不總是最優的選擇,因為有大量的選項可供選擇。
我們並不希望發生浪費可用記憶體的情況。
二、SGA元件
--元件列表使用原使文件,未翻譯
SGA COMPONENT |
SIZE CONTROLED BY |
AREAS OF INFLUENCE |
SIMPLE DESCRIPTONS |
Shared Pool |
SHARED_POOL_SIZE |
Library Cache ·Shared SQL areas ·Private SQL areas ·PL/SQL procedures and packages ·Various control structures |
Oracle needs to allocate & deallocate memory as SQL or procedural code is executed based on the individual needs of users' sessions and in accordance to the LRU algorithm. |
Highly accessed memory structures that provide information on object structures to SQL statements being parsed. |
|||
Java Pool |
JAVA_POOL_SIZE |
·Run state ·Methods ·Classes ·Session code ·Data in JVM |
Memory available for the Java memory manager to use for all things Java. |
Streams Pool |
STREAMS_POOL_SIZE |
·Stream activity |
New to Oracle 10g, memory available for stream processing. |
LOG_BUFFER |
·Redo entries |
Holds changes made to data and allows for the reconstruction of data in the case of failure. |
|
Database Buffer Cache |
DB_2K_CACHE_SIZE DB_4K_CACHE_SIZE DB_8K_CACHE_SIZE DB_16K_CACHE_SIZE DB_32K_CACHE_SIZE DB_KEEP_CACHE_SIZE DB_RECYCLE_CACHE_SIZE |
·Write list ·LRU list |
Holds copies of data requested by SQL and reduces requests to disk by having data in memory. You may have many different buffer caches that help segregate on usage patterns. |
Large Pool |
LARGE_POOL_SIZE |
·Shared server ·Oracle XA ·I/O server processes ·Backup & restore |
For large memory allocations. |
你可以通過初始化引數檢視並控制SGA的大小。下面是一個查詢並提供了輸出結果。 */
select name, value
from v$parameter
where name in ('shared_pool_size', 'java_pool_size', 'streams_pool_size',
'log_buffer', 'db_cache_size', 'db_2k_cache_size', 'db_4k_cache_size',
'db_8k_cache_size', 'db_16k_cache_size', 'db_32k_cache_size',
'db_keep_cache_size', 'db_recycle_cache_size', 'large_pool_size');
NAMEVALUE
------------------------- ---------
shared_pool_size83886080
large_pool_size8388608
java_pool_size50331648
streams_pool_size54525952
db_cache_size25165824
db_2k_cache_size0
db_4k_cache_size0
db_8k_cache_size0
db_16k_cache_size0
db_32k_cache_size0
db_keep_cache_size0
db_recycle_cache_size0
log_buffer262144
13 rows selected.
/*
三、使用Oracle自動化SGA的管理
使用Oracle 自動共享記憶體優化,通過設定一個新的SGA_TARGET 引數,即僅僅是告訴Oralce例項SGA目標大小是多少,
Oracle將自動管理一系列SGA的元件。Oracle在你所選的元件中將集中管理,動態分配你設定的SGA_TARGET值。即不再
需要人為的為SHARED_POOL_SIZE, JAVA_POOL_SIZE, LARGE_POOL_SIZE, 或DB_CACHE_SIZE 設定值,Oracle將會自動對
其分配合適的大小。一旦你為SGA_TARGET設定了你所需要的值,上述的這些值將呈現為,並且新的引數將被建立並指派
為__SHARED_POOL_SIZE, __JAVA_POOL_SIZE, LARGE_POOL_SIZE, and __DB_CACHE_SIZE.在這些區域,Oracle將根據系
統和記憶體所需的工作負荷,基於內部統計資訊來分配更多的記憶體。Oracle將不再管理DB_KEEP_CACHE_SIZE,
DB_RECYCLE_CACHE_SIZE, DBnK_CACHE_SIZE, 或the STREAMS_POOL_SIZE ,但是你依然可以決定這些引數的值。這些
設定僅僅能通過使用SPFILE,Oracle將動態的使得這些行為再次產生。注意,SGA_TARGET值的大小是所有組成SGA元件的
大小之和。當指定一個SGA_TARGET值時,不僅僅是引數控制,應該考慮所有的這些元件將不再被控制。
四、設定Oracle SGA 自動控制功能
1.檢視你的系統是否已經使用了SGA自動控制 */
SQL> show parameter sga_target
NAMETYPEVALUE
------------------------------------ ----------- --------
sga_targetbig integer 0
/*
2.修改SGA自動控制的大小*/
SQL> alter system set sga_target=216m;
System altered.
/*
3.完成切換
當切換到自動共享記憶體優化後,一個有趣的事情是你的SPFILE 將發生變化,並且有下列引數被定義,不論你的例項名
是什麼,注意k101是我的例項名。*/
k101.__db_cache_size=25165824
k101.__java_pool_size=50331648
k101.__large_pool_size=8388608
k101.__shared_pool_size=83886080
/*
除此之外,你可以使用前面使用過的SQL語句去檢視SGA的這些設定,現在他們有一個零值。*/
select name, value
from v$parameter
where name in ('shared_pool_size', 'java_pool_size', 'streams_pool_size',
'log_buffer', 'db_cache_size', 'db_2k_cache_size', 'db_4k_cache_size',
'db_8k_cache_size', 'db_16k_cache_size', 'db_32k_cache_size',
'db_keep_cache_size', 'db_recycle_cache_size', 'large_pool_size');
NAMEVALUE
------------------------- ---------
shared_pool_size0
large_pool_size0
java_pool_size0
streams_pool_size0
db_cache_size0
db_2k_cache_size0
db_4k_cache_size0
db_8k_cache_size0
db_16k_cache_size0
db_32k_cache_size0
db_keep_cache_size0
db_recycle_cache_size0
log_buffer262144
13 rows selected.
--當設定了SGA_TARGET 後,可以修改查詢語句使用新建立的帶有下劃線的引數變數作為查詢條件。
select name, value
from v$parameter
where name in ('__shared_pool_size', '__java_pool_size',
'streams_pool_size', 'log_buffer', '__db_cache_size', 'db_2k_cache_size',
'db_4k_cache_size', 'db_8k_cache_size', 'db_16k_cache_size',
'db_32k_cache_size', 'db_keep_cache_size', 'db_recycle_cache_size',
'__large_pool_size');
NAMEVALUE
------------------------- ---------
__shared_pool_size67108864
__large_pool_size4194304
__java_pool_size8388608
streams_pool_size0
__db_cache_size142606336
db_2k_cache_size0
db_4k_cache_size0
db_8k_cache_size0
db_16k_cache_size0
db_32k_cache_size0
db_keep_cache_size0
db_recycle_cache_size0
log_buffer262144
/*
切換到自動共享記憶體優化非常容易,僅僅是設定一個初始化引數。基於負載的情況下,這個管理方式該是確定的,儘管有不同的建議
這些數量應當被如何分配。我更樂於使用他們作為一個單獨的元件。沒有理由不去規避風險來使用自動共享記憶體優化。當然,我會先
在測試的環境中來使用它。我也建議在使用自動共享記憶體優化之前,做一個初始化引數快照然後比較使用動共享記憶體優化。這樣也很
容易切換回去,僅僅是重新設定SGA_TARGET,然後再單獨設定各個元件到原來的值即可。 */
五、原文出處:
September 2, 2004
Automate the Sizing of your SGA in Oracle 10g
By James Koopmann
http://www.databasejournal.com/features/oracle/article.php/10893_3400301_1/Automate-the-Sizing-of-your-SGA-in-Oracle-10g.htm
*/
/*
六、更多:*/