【ORACLE】ASMM和AMM的相关问题
转自:http://m.blog.itpub.net/31397003/viewspace-2137469/
关于ASMM和AMM
http://blog.itpub.net/29800581/viewspace-1263875/http://blog.csdn.net/deanza/article/details/9635461
现在的Oracle正在往智能化方向发展。如果我们现在找一些8i/9i时代的Oracle书籍,怎么样配置合适的数据库各内存池大小是非常重要的话题。但是进入10g之后,自动内存池调节成为一个重要Oracle特性。 在10g时,Oracle推出了ASMM(Automatic Shared Memory Management),实现了Oracle SGA和PGA内部结构的自调节。进入11g之后,AMM(Automatic Memory Management)实现了参数MEMORY_TARGET,将SGA和PGA的规划全部统筹起来对待。 默认情况下,Oracle 11g是使用AMM的。我们在安装过程中,指定Oracle使用内存的百分比,这个取值就作为MEMORY_TARGET和MEMORY_MAX_TARGET的初始取值使用。如果这两个参数设置为非零取值,那么Oracle就是采用AMM管理策略的。 同时,如果我们设置这两个参数为0,则AMM自动关闭。对应的SGA_TARGET、PGA_AGGREGATE_TARGET参数取值非零之后,Oracle自动退化使用ASMM特性。
昨天花了些时间总算搞懂了oracle10g中的ASMM和oracle11g中的AMM。下面是总结:
在oracle9i引入了参数pga_aggregate_target对pga进行调整,需要将workarea_size_policy设置为auto才可开启。
在oracle10g中又引入了一个新的参数sga_target来对sga进行自动调整。
在oracle10g之前,sga的各个内存区的大小都需要通过各自的参数指定,并且无法超过参数指定的值,尽管他们之和可能
并没有达到sga的最大限制。此外,一旦分配后,各个区内存只能给本区使用,相互之间是不能共享的。拿sga中最重要的两个内存区BUFFER CACHE和SHARED POOL来说,它们两个对实例性能影响最大,但是就有这样的矛盾存在:
在内存资源 有限的情况下,某些时候数据对cache的需求非常大,为了提高buffer hit,就需要增加buffer cache ,但由于sga有限,只能从其他区“抢”过来---如缩小shared pool,增加buffer cache;而有时又有大块的plsql代码被解析注入内存中,导致shared pool不足,又需要扩大shared pool,这时可能又需要人为干预,从buffer cache中将内存夺回来。, 有了
sga_target这个新特性之后,sga中的这种矛盾就迎刃而解了,这一特性被称为自动共享内存管理Automatic Shared Memory Management(ASMM),有了这个参数之后就不需要为每个内存区指定大小了,sga中各个内存区大小由orale自行控制,不需要人为指定。oracle可以随时调整各个区域的大小,使之达到系统性能最佳状态的合理大小。当我们启用了oracle的ASMM之后,也不是sga中所有区的大小都开始动态起来, NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 536M
sga_target big integer 0
<span color:#e53333;"="" style="font-family: "Courier New";"> SQL> show parameter memory NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 536M
memory_target big integer 536M
shared_memory_address integer 0
SQL> show parameter pga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 0
SQL> show parameter buffer
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
buffer_pool_keep string
buffer_pool_recycle string
db_block_buffers integer 0
log_buffer integer 3424256
use_indirect_data_buffers boolean FALSE
SQL> show parameter pool
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
buffer_pool_keep string
buffer_pool_recycle string
global_context_pool_size string
java_pool_size big integer 0
large_pool_size big integer 0
olap_page_pool_size big integer 0
shared_pool_reserved_size big integer 7M
shared_pool_size big integer 0
streams_pool_size big integer 0
SQL> show parameter cache
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
client_result_cache_lag big integer 3000
client_result_cache_size big integer 0
db_16k_cache_size big integer 0
db_2k_cache_size big integer 0
db_32k_cache_size big integer 0
db_4k_cache_size big integer 0
db_8k_cache_size big integer 0
db_cache_advice string ON
db_cache_size big integer 0
db_flash_cache_file string
db_flash_cache_size big integer 0
db_keep_cache_size big integer 0
db_recycle_cache_size big integer 0
object_cache_max_size_percent integer 10
object_cache_optimal_size integer 102400
result_cache_max_result integer 5
result_cache_max_size big integer 1376K
result_cache_mode string MANUAL
result_cache_remote_expiration integer 0
session_cached_cursors integer 50
SQL> select * from v$sga_target_advice;
SGA_SIZE SGA_SIZE_FACTOR ESTD_DB_TIME ESTD_DB_TIME_FACTOR ESTD_PHYSICAL_READS
---------- --------------- ------------ ------------------- -------------------
160 .5 51 1.0536 8732
240 .75 48 1 8676
320 1 48 1 8676
400 1.25 48 1 8676
480 1.5 48 1 8676
560 1.75 48 1 8676
640 2 48 1 8676
7 rows selected.
AMM->MMM+ASMM参数修改(修改先memory_target的参数为0,再给sga_target设一个值,如果不设置,系统会把当前自动的sga值设置为sga_target)
SQL> select * from v$sga_target_advice;
SGA_SIZE SGA_SIZE_FACTOR ESTD_DB_TIME ESTD_DB_TIME_FACTOR ESTD_PHYSICAL_READS
---------- --------------- ------------ ------------------- -------------------
160 .5 73 1.45 13760
240 .75 50 1 10098
320 1 50 1 10084
400 1.25 50 1 10084
480 1.5 50 1 10084
560 1.75 50 1 10084
640 2 50 1 10084
7 rows selected.
SQL> alter system set memory_target=0;
System altered.
SQL> alter system set sga_target=320M scope=both;
System altered.
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 536M
sga_target big integer 320M
SQL> show parameter memory
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 536M
memory_target big integer 0
shared_memory_address integer 0
SQL> show parameter pga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 216M
SQL> shutdown immediate
SQL> startup
Oracle instance started.
Total System Global Area 334036992 bytes
Fixed Size 2226272 bytes
Variable Size 155191200 bytes
Database Buffers 171966464 bytes
Redo Buffers 4653056 bytes
Database mounted.
Database opened.
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 320M
sga_target big integer 320M
SQL> show parameter memory
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 0
memory_target big integer 0
shared_memory_address integer 0
SQL> show parameter pga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 216M
MMM+ASMM->AMM修改参数
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 320M
sga_target big integer 320M
SQL> show parameter pga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 216M
SQL> show parameter memory
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 0
memory_target big integer 0
shared_memory_address integer 0
SQL> alter system set memory_target=536M scope=spfile;
SQL> alter system set sga_target=0;--如果不改为0,如果改为大于320M的值,启动时会memory_target报错,建议改为0。
SQL> shutdown immediate;
SQL> startup;
只有学习才能跟上时代的脚步

浙公网安备 33010602011771号