4.4 实例的内存结构管理

内存结构管理主要涉及对SGA中的各种缓冲区进行最佳设置,使实例对内存的利用率达到最高,从而提高数据库的性能。从Oracle 11g开始,可以对SGA和PGA进行完全的自动管理,也就是说,只要分别指定SGA和PGA的最大大小,实例将自动确定每种缓冲区的大小,以及每个服务器进程的PGA大小,随着数据库服务器的运行,实例可以根据需要随时调整这些内存区域的大小。

有三种方法可以对实例的内存结构进行管理:

·自动内存管理。

·自动共享内存管理。

·手工共享内存管理。

4.4.1 自动内存管理

这是一种完全自动的内存管理方式,只要通过初始化参数MEMORY_TARGET和MEMORY_MAX_TARGET指定实例可用的最大内存大小,实例就可以自动确定SGA和PGA的大小,SGA中的每种缓冲区大小也根据需要自动确定。随着数据库服务器的运行,实例将根据需要,在指定的范围内自动调整SGA和PGA的大小。

MEMORY_TARGET参数可以动态修改,管理员可以随时修改这个参数的值,而不用重新启动实例。MEMORY_MAX_TARGET是不能动态修改的,它的作用是为实例指定了可用内存的上限,也就是说,指定了MEMORY_TARGET参数的最大可取值。设置初始化参数MEMORY_MAX_TARGET的目的是防止管理员将MEMORY_TARGET参数设置过大,从而给操作系统留下太少的内存。

为了使用自动内存管理方法,需要对以下初始化参数进行适当的设置:


SGA_TARGET 应该设置为0

PGA_AGGREGATE_TARGET 应该设置为0;

LOCK_SGA 应该设置为false


如果希望了解SGA和PGA目前的实际大小,以及SGA中每种缓冲区的实际大小,可以查询动态性能视图v$memory_dynamic_components。例如,下面的SQL语句用于查看PGA以及SGA中每种缓冲区目前的大小、以及可以调整的范围:


SQL>SELECT component, current_size, min_size, max_size

FROM v$memory_dynamic_components;