1、memory_max_target 就是oracle实例的最大的内存大小
2、memory_target 就是oracle实例实际内存的大小,最大值不能超过memory_max_target
3、 sga_max_size 系统全局区 最大值
4、sga_target 系统全局区 实际值 不能超过 sga_max_size
5、pag_aggregate_target 进程全局区)
如果memory_target=0 表示数据库不启用自动内存管理,那么sga_target(系统全局区) 跟pag_aggregate_target(进程全局区)
各自管理,互不干扰
如果memory_target 大于0 表示数据库启用自动内存管理,相当于sga_target(系统全局区) 跟pag_aggregate_target(进程全局区)
各自管理,互不干扰
如果 sga_target=0 表示数据库不使用 自动共享内存管理 那么
db_buffer_cache_size,java_pool shared_pool,large_pool,stream_pool 都需要手动设置一个值
如果 sga_target大于0 表示数据库使用 自动共享内存管理 那么
db_buffer_cache_size,java_pool shared_pool,large_pool,stream_pool 不需要设置值,数据库会自动分配,内存使用率高
下面来讨论 一下 memory_target 跟sga_target 组合
memory_target=0 && sga_target=0 不是自动共享内存管理
那么 db_buffer_cache_size,java_pool shared_pool,large_pool,
stream_pool pag_aggregate_target 都需要手动设置一个值
memory_target=0 && sga_target>0 是自动共享内存管理 那么
db_buffer_cache_size,java_pool shared_pool,large_pool,stream_pool 可以设置也可以不设置
pag_aggregate_target必须要设置一个值
sga_target=db_buffer_cache_size+java_pool+shared_pool+stream_pool
memory_target>0 && sga_target>0 是自动内存管理 那么 sga_target 跟pag_aggregate_target 不需要设定值,
若设定了某个值,也表示 数据库启动的时候sga_target 跟pag_aggregate_target 最小不能低于设定的某个值
如 memory_target=1024 sga_target=800M 表示数据库最少要分配800M 给SGA
memory_target=sga_target+max(pag_aggregate_target,MAXIMUM PGA ALLOCATED)
当使用 dbca 创建默认创建实例的时候 如果系统内存小于4G 那么AMM 启用 大余4G AMM禁用 ASMM 启用,所以一般选择 高级安装
使用大表缓存 并行查询 在 RAC 或者单实例环境
DB_BIG_TABLE_CACHE_PERCENT_TARGET >0 &&PARALLEL_DEGREE_POLICY=‘AUTO’ 或者PARALLEL_DEGREE_POLICY=‘ADAPTIVE’
使用大表缓存 窜行查询 只适用于单实例
DB_BIG_TABLE_CACHE_PERCENT_TARGET >0
监控 调优 内存管理, 就是说,内存管理设置那个值为最合理
自动内存管理值建议
select * from v$memory_target_advice order by memory_size;
MEMORY_SIZE_FACTOR=1 表示当前数据库的内存, 通过ESTD_DB_TIME 来判断设置多大最合适
SGA 设置内存大小是按 颗粒度的整数倍 分配
查看数据库的颗粒度
select * from v
s
g
a
i
n
f
o
自
动
共
享
内
存
管
理
值
建
议
s
e
l
e
c
t
∗
f
r
o
m
v
sgainfo 自动共享内存管理值建议 select * from v
sgainfo自动共享内存管理值建议select∗fromvsga_target_advice order by sga_size;