Oracle 自动内存管理 - SGA_MAX_SIZE

inv*_*igo 5 oracle oracle-11g-r2 memory

使用自动内存管理时,SGA_MAX_SIZE 应该是什么值?应该是0吗?这些是我当前的设置,我不确定是保留 SGA_MAX_SIZE 还是将其设置为 0。

memory_max_target     2147483648
memory_target         2147483648
pga_aggregate_target  0
sga_max_size          1610612736
sga_target            0
Run Code Online (Sandbox Code Playgroud)

甲骨文 11gR2

Mat*_*Mat 5

文档sga_max_size说:

在 64 位平台和非 Windows 32 位平台上,当指定MEMORY_TARGET或时MEMORY_MAX_TARGET,默认值SGA_MAX_SIZE设置为两个参数中较大的一个。

根据 Oracle 文档Automatic Memory Management (AMM) on 11g (Doc ID 443746.1),如果您同时拥有sga_target和未pga_aggregate_target设置,则:

如果两者都没有设置,它们将在没有任何最小值或默认值的情况下自动调整。我们将有一个策略,即在初始化期间将 MEMORY_TARGET 参数设置的总内存以固定比例分配给 SGA 和 PGA。政策是在启动时将 60% 给 SGA,40% 给 PGA。

因此,如果您希望 Oracle 完全控制 SGA,最简单的做法是重置它并让默认值生效:

SQL> alter system reset sga_max_size scope=spfile;
Run Code Online (Sandbox Code Playgroud)

(然后重新启动。)

如果您想要 AMM 但想要 SGA 或 PGA(或两者)的最小值,请通过设置相应的_target参数来实现:

前面的步骤 [设置 AMM ] 指导您设置SGA_TARGETPGA_AGGREGATE_TARGET归零,以便根据需要上下调整 SGA 和实例 PGA 的大小,不受限制。您可以省略将这些参数值设置为零的语句,并将其中一个或两个值保留为正数。在这种情况下,这些值充当 SGA 或实例 PGA 大小的最小值。

无论您做什么,都不要将 PGA 或 SGA 目标或最大大小设置为大于内存目标。这会阻止实例启动。