Oracle关闭AMM大步说拜拜(oracle 关闭amm)
Oracle关闭AMM:大步说拜拜
Oracle数据库是企业级数据库的典范,而自从Oracle 11g起,AMM(自动内存管理)功能成为了默认内存管理方式。然而,近年来越来越多的用户开始反对AMM的使用,并倾向于关闭这一功能。在本文中,我们将讨论一下为什么会有这种趋势,并给出关闭AMM的相关操作和代码示例。
为什么有用户反对AMM?
AMM虽然是一种自动化的资源管理技术,但一旦开始使用,就会将所有的内存分配都交给Oracle进行管理。从这个角度来看,虽然AMM带来了一定的方便性,但也将用户对内存的掌控力降到了最低。而且,对于一些对性能要求较高的用户来说,AMM的自动化管理方式也会对应用程序的性能带来一定的影响,从而引发一些问题。
比如,当用户访问的内存经常变化时,AMM可能会频繁地分配和回收内存。这些操作虽然是自动的,但也会对数据处理的效率产生一定的影响。此外,在使用AMM的情况下,Oracle会将所有的内存分配都放在同一个大池子里面进行管理,从而可能导致内存的泄漏或者需要较高的内存管理成本。
当这些问题达到一定的程度时,用户便会开始考虑关闭AMM。接下来,我们将介绍一下如何关闭AMM。
如何关闭AMM
AMM的开启是通过设置以下参数实现的:
MEMORY_TARGET=xx
MEMORY_MAX_TARGET=yyyyy
一旦开启了AMM,Oracle会自动对系统内存进行管理。关闭AMM,就需要将这两个参数设为0。具体的操作步骤如下:
1. 修改ORACLE_SID环境变量,将其修改为要关闭AMM的实例名。
2. 停止Oracle数据库实例:
$ sqlplus / as sysdba
SQL> shutdown immediate;
3. 修改initXXXX.ora文件,找到以下两行参数,并将其值修改为0,然后保存退出。
MEMORY_TARGET=0
MEMORY_MAX_TARGET=0
4. 启动Oracle数据库实例:
$ sqlplus / as sysdba
SQL> startup;
5. 确认内存管理方式已经更改:
SQL> show parameter memory_target #此时应该输出为0
SQL> show parameter memory_max_target #此时应该输出为0
代码示例:
下面是一个用Python实现关闭AMM的示例代码,其中,os.environ是Python中的环境变量模块,将其赋值给变量 ora_sid。execute_sql函数用于调用sqlplus执行数据库操作:
# -*- coding: utf-8 -*-
import os
def execute_sql(sql):
os.system(f”echo exit| sqlplus -S / as sysdba /dev/null {sql}\nEOF”)
def mn():
ora_sid = os.environ[‘ORACLE_SID’]
execute_sql(‘shutdown immediate;’)
execute_sql(f’echo “memory_target=0” > $ORACLE_HOME/dbs/init{ora_sid}.ora’)
execute_sql(f’echo “memory_max_target=0” >> $ORACLE_HOME/dbs/init{ora_sid}.ora’)
execute_sql(‘startup;’)
execute_sql(‘show parameter memory_target;’)
execute_sql(‘show parameter memory_max_target;’)
if __name__ == ‘__mn__’:
mn()
总结
AMM是Oracle自动内存管理机制之一,虽然方便,但在一些情况下会影响应用程序性能。因此,很多用户开始考虑关闭AMM,以达到更好的性能。关闭AMM的操作虽然简单,但需要注意一些细节问题。希望本文对您有所帮助。