首页 > 代码库 > Oracle 自动内存参数依赖性

Oracle 自动内存参数依赖性

图例:在该图中使用了以下参数名称缩写:

MT = MEMORY_TARGET
MMT = MEMORY_MAX_TARGET
ST = SGA_TARGET
PAT = PGA_AGGREGATE_TARGET
SMS = SGA_MAX_SIZE


MEMORY_TARGET 设置为非零值时:

如果设置了 SGA_TARGET 和 PGA_AGGREGATE_TARGET,则会分别将它们当作 SGA 大小和 PGA 大小的下限值。MEMORY_TARGET 可以采用从 SGA_TARGET + PGA_AGGREGATE_TARGET 到 MEMORY_MAX_SIZE 的值。

如果设置了 SGA_TARGET 但未设置 PGA_AGGREGATE_TARGET,则仍会自动优化这两个参数。PGA_AGGREGATE_TARGET 将初始化为 (MEMORY_TARGET-SGA_TARGET) 的值。

如果设置了 PGA_AGGREGATE_TARGET 但未设置 SGA_TARGET,则仍会自动优化这两个参数。SGA_TARGET 将初始化为 MEMORY_TARGET-PGA_AGGREGATE_TARGET 和 SGA_MAX_SIZE(如果用户设置了该参数)中的最小值,并自动优化子组件。

如果未设置任何参数,则无需任何下限值或默认值即可自动优化这两个参数。会在初始化过程中,将服务器的总内存以固定的比率分配给 SGA 和 PGA。根据该策略,将在启动时为 SGA 分配 60% 的内存,为 PGA 分配 40% 的内存。 

如果未设置 MEMORY_TARGET 或者将其显式设置为 0(默认值为 0):

如果设置了 SGA_TARGET,则数据库将仅自动优化 SGA 的子组件的大小。PGA 的自动优化与是否显式设置 PAG 无关。但是,不会自动优化整个 SGA (SGA_TARGET) 和 PGA (PGA_AGGREGATE_TARGET),即不自动增长或收缩。如果 SGA_TARGET 和 PGA_AGGREGATE_TARGET 都未设置,则将采用当前使用的策略;自动优化 PGA,不自动优化 SGA,需要显式设置某些子组件的参数 (SGA_TARGET)。

如果仅设置了 MEMORY_MAX_TARGET,则使用初始化文本文件进行手动设置时,MEMORY_TARGET 默认为 0。SGA 和 PGA 的自动优化行为默认为 10g R2 的行为。

如果用户未设置 SGA_MAX_SIZE,则当用户设置了 MEMORY_MAX_TARGET 时,会在内部将 SGA_MAX_SIZE 设置为 MEMORY_MAX_TARGET(与用户是否设置了 SGA_TARGET 无关)。
在初始化参数文本文件中,如果省略了 MEMORY_MAX_TARGET 行,并包含了 MEMORY_TARGET 的值,则数据库会自动将 MEMORY_MAX_TARGET 设置为 MEMORY_TARGET 的值。如果省略 MEMORY_TARGET 行,并包含 MEMORY_MAX_TARGET 的值,则 MEMORY_TARGET 参数默认为 0。启动后,如果 MEMORY_TARGET 未超过 MEMORY_MAX_TARGET 值,则可以将其动态更改为非零值。

Oracle 自动内存参数依赖性