oracle 11g 自动内存管理
Oracle对内存的管理的 优化从未间断,从8i到11g不断地提出新的管理概念。每个本版都对内存管理进行了简化:
- 8i->9i:PGA的自动管理;
- 9i->10g:SGA的自动管理;
- 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 |
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动态消耗后,再减去固定消耗,得到当前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部分。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步