AMM调整为ASMM命令(关闭memory_target自动管理方式)
客户生产系统,AIX oracle 11.2.0.4 数据库版本,2节点RAC。
操作系统内存,均为125G,调整前,使用oracle memory_target自动调整分配方式,memory_max_target大小80G大小,但是shared pool大小为21G。
客户之前存在内存不够用(由于客户应用问题,导致几乎所有的SQL都需要重新硬解析,最终导致oracle shared pool大小不断变大、异常增长),导致数据库shutdown的情况,因此客户想调整oracle内存的分配方式。
本次采用治标方法:将oracle内存限制,从memory_target自动管理分配方式,进行降级使用oracle automatic shared memory management,及sga/pga分别自动管理。
一、从AMM调整为ASMM
1)查询操作系统内存大小
# svmon -G -O unit=GB Unit: GB ------------------------------------------------------------------------------- size inuse free pin virtual available memory 125.22 18.2 107.06 5.74 17.4 107.05 pg space 16.0 0.05 work pers clnt other pin 2.04 0 0.13 3.57 in use 17.4 0 0.73 # svmon -G -O unit=GB Unit: GB ------------------------------------------------------------------------------- size inuse free pin virtual available memory 125.00 102.58 22.4 19.7 77.9 43.0 pg space 16.0 0.21 work pers clnt other pin 16.0 0 0.13 3.57 in use 77.9 0 24.7 根据操作系统内存大小,进行比例分配。本次采用sga=64 /pga=24G不变大小,操作系统预留37G
2)关闭memory_target,使用oracle sga/pga分别自动管理 alter system set memory_max_target=0 scope=spfile; alter system set memory_target=0 scope=spfile; alter system set sga_max_size=64G scope=spfile; alter system set sga_target=64G scope=spfile; pga_aggregate_target big integer 24G
3)发现一个问题,关闭节点2所在数据库,重启节点1所在数据库报错
ORA-00843: Parameter not taking MEMORY_MAX_TARGET into account
ORA-00849: SGA_TARGET 10737418240 cannot be set to more than MEMORY_MAX_TARGET 0.
本次采用的方式是一种较危险的操作,如果不熟悉oracle 参数文件管理方式,
建议使用文档后续学习的mos建议,blog链接方法
4)创建pfile参数文件,手工注释memory这两个oracle内存参数
#备份 create pfile='/tmp/20190125_node2.ora' from memory; create pfile='/tmp/20190125_spfile_node2.ora' from spfile; #拷贝编辑 cp /tmp/20190125_spfile_node2.ora /tmp/new_pfile.ora 注释new_pfile文件中的两个memory_target内存参数 SQL> show parameter pfile NAME VALUE ------------------------------------ ----------- ------------------------------ spfile +DATANEWDG/dbcnr/parameterfile/spfile.ora
5)根据之前查询到的内容,重新覆盖生成最新的pfile文件,启动数据库即可(rac环境,使用所有的参数需要指明路径,以免出错)
create spfile='+DATANEWDG/dbcnr/parameterfile/spfile.ora' from pfile='/tmp/new_pfile.ora';
二、学习mos/blog搜索学习
MOS
ORA-00843, ORA-00849 When Trying To Change SGA_TARGET With MEMORY_MAX_TARGET=0 Being Active (文档 ID 1397761.1) Oracle Database - Enterprise Edition - Version 11.1.0.6 and later SYMPTOMS When trying to set SGA_TARGET using an ALTER SYSTEM command, the following errors are raised: ORA-00843: Parameter not taking MEMORY_MAX_TARGET into account ORA-00849: SGA_TARGET 10737418240 cannot be set to more than MEMORY_MAX_TARGET 0. CHANGES MEMORY_MAX_TARGET was set to 0. CAUSE The problem is caused by the MEMORY_MAX_TARGET parameter explicitly being set to 0. In case AMM should not be used, MEMORY_MAX_TARGET should not be set at all. SOLUTION The solutions to the problem are: 1.0 本次使用的是方法1 create a PFILE from the SPFILE being used and remove the MEMORY_MAX_TARGET=0 and MEMORY_TARGET=0 lines. After that, use the modified PFILE to create a new SPFILE and start the instance with this new setup.
2.0 另一种方式是通过参数rest重置清空参数(如果是隐含参数,使用reset将恢复默认值(待验证)) should the instance be running, then use the following commands to remove the explicit setting of MEMORY_TARGET=0 and MEMORY_MAX_TARGET=0: alter system reset memory_target; alter system reset memory_max_target;
BLOG
http://www.dbsnake.net/how-to-disable-asm-instance-amm.html --参考 特别注意的是——如果要禁掉ASM实例的AMM,就一定不要同时reset memory_target和memory_max_target,
而是应该将memory_target设为0并只reset memory_max_target,但很恶心的是基本上所有的MOS文档都在说要同时reset memory_target和memory_max_target,
所以如果你没有注意到这一点,你会发现你怎么也禁不掉ASM实例的AMM。 未验证(如果是我下一次操作,可能会进行测试,这种影响较小,操作简便)