oracle 11g 自动内存管理

Oracle对内存的管理的 优化从未间断,从8i到11g不断地提出新的管理概念。每个本版都对内存管理进行了简化:

  1. 8i->9i:PGA的自动管理;
  2. 9i->10g:SGA的自动管理;
  3. 10g->11g:MEMORY(SGA+PGA)的自动管理。

在11g中oracle引入了

1
MEMORY_TARGET:oracle所能使用的最大内存,该参数可以动态调整。<br>MEMORY_MAX_TARGET:MEMORY_TARGET参数所能动态设定的最大值,不能动态调整,需要重启数据库。

注:oracle的内存管理方式可以根据本版向下兼容的,11g可以实现10g,9i,8i时的管理方式。

oracle环境:

下面通过一个小测试来看看oracle的内存分配(没有对PGA测试)。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
SQL> select component,current_size,min_size,max_size from v$memory_dynamic_components;
 
COMPONENT                      CURRENT_SIZE   MIN_SIZE   MAX_SIZE             
------------------------------ ------------ ---------- ----------             
shared pool                       130023424  109051904  130023424             
large pool                          4194304    4194304    4194304             
java pool                           4194304    4194304    4194304             
streams pool                              0          0          0             
SGA Target                        322961408  322961408  322961408             
DEFAULT buffer cache              176160768  176160768  197132288             
KEEP buffer cache                         0          0          0             
RECYCLE buffer cache                      0          0          0             
DEFAULT 2K buffer cache                   0          0          0             
DEFAULT 4K buffer cache                   0          0          0             
DEFAULT 8K buffer cache                   0          0          0             
 
COMPONENT                      CURRENT_SIZE   MIN_SIZE   MAX_SIZE             
------------------------------ ------------ ---------- ----------             
DEFAULT 16K buffer cache                  0          0          0             
DEFAULT 32K buffer cache                  0          0          0             
Shared IO Pool                            0          0          0             
PGA Target                        218103808  213909504  218103808             
ASM Buffer Cache                          0          0          0             
 
已选择16行。
 
SQL> show parameter memory_target
 
NAME                                 TYPE        VALUE                        
------------------------------------ ----------- ------------------------------
memory_target                        big integer 516M                         
 
SQL> run
  1* select (322961408+218103808)/1024/1024||'M' "SGA+PGA" from dual
 
SGA+                                                                          
----                                                                          
516M                                                                          

 

在此可以看出memory_target参数管理的内存是PGA与SGA之和。

单独计算SGA,通过shared pool,streams pool,java pool,large pool,buffer cache,
ASM Buffer Cache参数求和,计算得出当前SGA使用的大小
314572800

1
2
3
4
5
6
SQL> select (130023424+4194304+4194304+176160768) SGA from dual
  2  ;
 
       SGA                                                                    
----------                                                                    
 314572800                                                                     
通过SGA的目标值减去当前SGA的动态消耗。

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>
在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部分。

posted on   大肚熊  阅读(10718)  评论(0编辑  收藏  举报

努力加载评论中...

导航

< 2010年8月 >
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 1 2 3 4
5 6 7 8 9 10 11
点击右上角即可分享
微信分享提示