Oracle對內存的管理的 優化從未間斷,從8i到11g不斷地提出新的管理概念。每個本版都對內存管理進行了簡化:
在11g中Oracle引入了自動化內存管理(Automatic Memory Management)概念,僅用兩個參數就能完成Oracle的內存管理工作。DBA的工作看來又要輕松不少了,看看兩個參數:
1
MEMORY_TARGET:Oracle所能使用的最大內存,該參數可以動態調整。<BR>MEMORY_MAX_TARGET:MEMORY_TARGET參數所能動態設定的最大值,不能動態調整,需要重啟數據庫。
注:Oracle的內存管理方式可以根據本版向下兼容的,11g可以實現10g,9i,8i時的管理方式。
Oracle環境:
下面通過一個小測試來看看Oracle的內存分配(沒有對PGA測試)。
01
SQL> select component,current_size,min_size,max_size from v$memory_dynamic_components;
02
03
COMPONENT CURRENT_SIZE MIN_SIZE MAX_SIZE
04
------------------------------ ------------ ---------- ----------
05
shared pool 130023424 109051904 130023424
06
large pool 4194304 4194304 4194304
07
Java pool 4194304 4194304 4194304
08
streams pool 0 0 0
09
SGA Target 322961408 322961408 322961408
10
DEFAULT buffer cache 176160768 176160768 197132288
11
KEEP buffer cache 0 0 0
12
RECYCLE buffer cache 0 0 0
13
DEFAULT 2K buffer cache 0 0 0
14
DEFAULT 4K buffer cache 0 0 0
15
DEFAULT 8K buffer cache 0 0 0
16
17
COMPONENT CURRENT_SIZE MIN_SIZE MAX_SIZE
18
------------------------------ ------------ ---------- ----------
19
DEFAULT 16K buffer cache 0 0 0
20
DEFAULT 32K buffer cache 0 0 0
21
Shared IO Pool 0 0 0
22
PGA Target 218103808 213909504 218103808
23
ASM Buffer Cache 0 0 0
24
25
已選擇16行。
26
27
SQL> show parameter memory_target
28
29
NAME TYPE VALUE
30
------------------------------------ ----------- ------------------------------
31
memory_target big integer 516M
32
33
SQL> run
34
1* select (322961408+218103808)/1024/1024||
'M'
"SGA+PGA"
from dual
35
36
SGA+
37
----
38
516M
在此可以看出memory_target參數管理的內存是PGA與SGA之和。
單獨計算SGA,通過shared pool,streams pool,Java pool,large pool,buffer cache,
ASM Buffer Cache參數求和,計算得出當前SGA使用的大小(314572800)。
1
SQL> select (130023424+4194304+4194304+176160768) SGA from dual
2
2 ;
3
4
SGA
5
----------
6
314572800
通過SGA的目標值減去當前SGA的動態消耗。
在SGA中的包括LOG BUFFER,fixed_sga部分,在最開始的v$memory_dynamic_components視圖中
並沒有包括這兩部分,也說明這兩個部分是固定的值,不會動態的改變。
出去SGA動態消耗後,再減去固定消耗,得到當前SGA還剩余多少。
1
SQL> select 8388608-7179824 from dual;<BR><BR>8388608-7179824 <BR>--------------- <BR> 1208784<BR>
在動態分配視圖的查詢結果中包含Shared IO pool部分,以下是對該參數的說明:
Shared IO Pool Memory
Wait until a shared I/O pool buffer becomes available. This happens when processes are
using these buffers for I/O and the current process needs to wait for the release
of any one of the buffers to the shared I/O pool.
Wait Time: 10msec
Parameters: None
說明:shared IO pool參數設置是為了盡量減小進程IO的等待而專門配置的參數。
從分析角度看應該是屬於PGA部分。
1
SQL> select 322961408-314572800
"sga target-sga"
from dual;<BR><BR>sga target-sga<BR>--------------<BR> 8388608<BR><BR>SQL> select * from v$sgastat where pool
is
null
;<BR><BR>POOL NAME BYTES <BR>------------ -------------------------- ---------- <BR> fixed_sga 1375792 <BR> buffer_cache 167772160 <BR> log_buffer 5804032 <BR><BR>SQL> select 1375792+5804032
"fixed_sga+log_buffer"
from dual;<BR><BR>fixed_sga+log_buffer <BR>-------------------- <BR> 7179824 <BR>