oracle memory_target 跟 sga_target 的区别

memory_max_target/memory_target//sga_max_size/sga_target 




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$sgainfo 
  自动共享内存管理值建议
  select * from v$sga_target_advice order by sga_size;
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误是在使用 Oracle 数据库时出现的,它表示你尝试将 SGA_MAX_SIZE 参数设置为比 MEMORY_TARGET 参数更大的值,这是不允许的。SGA_MAX_SIZE 是指定 SGA(System Global Area)最大大小的参数,而 MEMORY_TARGET 是指定 SGA 和 PGA(Process Global Area)总大小的参数。 在 Oracle 11g 及更高版本中,Oracle 推荐使用 MEMORY_TARGET 参数来管理 SGA 和 PGA 的大小,而不是手动设置 SGA_MAX_SIZE 和 PGA_AGGREGATE_TARGET 参数。这是因为使用 MEMORY_TARGET 可以更好地优化内存使用,提高系统性能。 因此,要解决这个错误,你需要调整 SGA_MAX_SIZE 和 MEMORY_TARGET 参数的值,使它们保持一致或者 MEMORY_TARGET 的值更大。你可以通过修改 Oracle 数据库的参数文件(init.ora 或 spfile)来更改这些参数的值。具体操作步骤如下: 1. 使用 SQLPLUS 连接到 Oracle 数据库,以 SYSDBA 用户身份登录: ``` sqlplus / as sysdba ``` 2. 查看当前 SGA 和 PGA 的大小: ``` SHOW SGA; SHOW PARAMETER PGA_AGGREGATE_TARGET; ``` 3. 关闭数据库实例: ``` SHUTDOWN IMMEDIATE; ``` 4. 编辑参数文件(init.ora 或 spfile),将 MEMORY_TARGETSGA_MAX_SIZE 参数设置为相同的值,或者 MEMORY_TARGET 的值更大。例如: ``` MEMORY_TARGET=3G SGA_MAX_SIZE=3G ``` 5. 启动数据库实例: ``` STARTUP ``` 6. 再次查看 SGA 和 PGA 的大小,确认修改成功: ``` SHOW SGA; SHOW PARAMETER PGA_AGGREGATE_TARGET; ``` 这样就可以避免 SGA_MAX_SIZE 和 MEMORY_TARGET 值不一致的错误了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值