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的操作虽然简单,但需要注意一些细节问题。希望本文对您有所帮助。


数据运维技术 » Oracle关闭AMM大步说拜拜(oracle 关闭amm)