Oracle对内存的管理的 优化从未间断,从8i到11g不断地提出新的管理概念。每个本版都对内存管理进行了简化:
8i->9i:PGA的自动管理;
9i->10g:SGA的自动管理;
10g->11g:MEMORY(SGA+PGA)的自动管理。
在11g中oracle引入了自动化内存管理(Automatic Memory Management)概念,仅用两个参数就能完成oracle的内存管理工作。DBA的工作看来又要轻松不少了,看看两个参数:
MEMORY_TARGET:oracle所能使用的最大内存,该参数可以动态调整。
MEMORY_MAX_TARGET:MEMORY_TARGET参数所能动态设定的最大值,不能动态调整,需要重启数据库。
注:oracle的内存管理方式可以根据本版向下兼容的,11g可以实现10g,9i,8i时的管理方式。
oracle环境:
下面通过一个小测试来看看oracle的内存分配(没有对PGA测试)。
SQL> select component,current_size,min_size,max_size from v$memory_dynamic_components;
02
03COMPONENT CURRENT_SIZE MIN_SIZE MAX_SIZE
04—————————— ———— ———- ———-
05shared pool 130023424 109051904 130023424
06large pool 4194304 4194304 4194304
07java pool 4194304 4194304 4194304
08streams pool 0 0 0
09SGA Target 322961408 322961408 322961408
10DEFAULT buffer cache 176160768 176160768 197132288
11KEEP buffer cache 0 0 0
12RECYCLE buffer cache 0 0 0
13DEFAULT 2K buffer cache 0 0 0
14DEFAULT 4K buffer cache 0 0 0
15DEFAULT 8K buffer cache 0 0 0
16
17COMPONENT CURRENT_SIZE MIN_SIZE MAX_SIZE
18—————————— ———— ———- ———-
19DEFAULT 16K buffer cache 0 0 0
20DEFAULT 32K buffer cache 0 0 0
21Shared IO Pool 0 0 0
22PGA Target 218103808 213909504 218103808
23ASM Buffer Cache 0 0 0
24
25已选择16行。
26
27SQL> show parameter memory_target
28
29NAME TYPE VALUE
30———————————— ———– ——————————
31memory_target big integer 516M
32
33SQL> run
341* select (322961408+218103808)/1024/1024||‘M’ “SGA+PGA” from dual
35
36SGA+
37—-
38516M
在此可以看出memory_target参数管理的内存是PGA与SGA之和。
单独计算SGA,通过shared pool,streams pool,java pool,large pool,buffer cache,
ASM Buffer Cache参数求和,计算得出当前SGA使用的大小(314572800)。
1SQL> select (130023424+4194304+4194304+176160768) SGA from dual
22 ;
3
4SGA
5———-
6314572800
通过SGA的目标值减去当前SGA的动态消耗。
SQL> select 322961408-314572800 “sga target-sga” from dual;
sga target-sga
————–
8388608
SQL> select * from v$sgastat where poolis null;
POOL NAME BYTES
———— ————————– ———-
fixed_sga 1375792
buffer_cache 167772160
log_buffer 5804032
SQL> select 1375792+5804032“fixed_sga+log_buffer” from dual;
fixed_sga+log_buffer
——————–
7179824
在SGA中的包括LOG BUFFER,fixed_sga部分,在最开始的v$memory_dynamic_components视图中
并没有包括这两部分,也说明这两个部分是固定的值,不会动态的改变。
出去SGA动态消耗后,再减去固定消耗,得到当前SGA还剩余多少。
1SQL> select 8388608-7179824 from dual;
8388608-7179824
—————
1208784
在动态分配视图的查询结果中包含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部分。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国