本节提供有关 Oracle 数据库的自动内存管理功能的背景信息, 并包含有关启用此功能的说明. 涵盖以下主题:
关于自动内存管理
启用自动内存管理
监视和调整自动内存管理
关于自动内存管理
管理实例内存的最简单方法是让 Oracle 数据库实例为您自动管理和调整它. 为此 (在大多数平台上), 只设置一个目标内存大小初始化参数(MEMORY_TARGET) 和一个最大内存大小初始化参数 (MEMORY_MAX_TARGET). 实例使用的内存总量基于 MEMORY_TARGET 的值保持相对恒定, 并且实例在系统全局区域(SGA) 和实例程序全局区域 (实例 PGA) 之间自动分配内存. 随着内存需求的变化, 实例动态地在 SGA 和实例 PGA 之间重新分配内存.
如果未启用自动内存管理, 则必须手动调整 SGA 和实例 PGA 的大小.
因为 MEMORY_TARGET 初始化参数是动态的, 所以您可以随时更改 MEMORY_TARGET, 而无需重新启动数据库. MEMORY_MAX_TARGET(不是动态的)用作上限, 因此您不会意外地将 MEMORY_TARGET 设置得太高, 并且为了在将来希望增加实例内存总量的情况下为数据库实例留出足够的内存. 由于某些 SGA 组件无法轻易缩小或必须保持最小大小, 因此该实例也会阻止您将 MEMORY_TARGET 设置得太低.
如果使用数据库配置助手 (DBCA) 创建数据库并选择基本安装选项, 则会启用自动内存管理. 如果选择高级安装, 则数据库配置助手 (DBCA) 使您能够选择自动内存管理.
如果 LOCK_SGA 初始化参数为 TRUE, 则不能启用自动内存管理. 有关此参数的信息, 请参阅 Oracle 数据库参考 https://docs.oracle.com/cd/E11882_01/server.112/e40402/toc.htm .
支持自动内存管理的平台 https://docs.oracle.com/cd/E11882_01/server.112/e25494/memory.htm#BGBCHEIC
启用自动内存管理
如果您在创建数据库时未启用自动内存管理(通过选择 DBCA 中的适当选项或通过为 CREATE DATABASE SQL 语句设置适当的初始化参数), 可以稍后启用它. 启用自动内存管理包括关闭和重新启动数据库.
启用自动内存管理
启动 SQL * Plus 并以 SYSDBA 身份连接到数据库.
计算 MEMORY_TARGET 的最小值如下:
a, 通过输入以下 SQL * Plus 命令来确定 SGA_TARGET 和 PGA_AGGREGATE_TARGET 的当前大小:
SHOW PARAMETER TARGET
SQL * Plus 会在参数名称中显示所有初始化参数的值和字符串 TARGET.
- NAME TYPE VALUE
- ------------------------------------ ----------- ----------------
- archive_lag_target integer 0
db_flashback_retention_target integer 1440
- fast_start_io_target integer 0
- fast_start_mttr_target integer 0
- memory_max_target big integer 0
- memory_target big integer 0
- parallel_servers_target integer 16
pga_aggregate_target big integer 90M
sga_target big integer 272M
b, 运行以下查询以确定自数据库启动以来分配的最大实例 PGA:
select value from v$pgastat where name='maximum PGA allocated';
c, 计算步骤 b 的查询结果和 PGA_AGGREGATE_TARGET 之间的最大值. 将 SGA_TARGET 添加到此值.
memory_target = sga_target + max(pga_aggregate_target, maximum PGA allocated)
例如, 如果 SGA_TARGET 是 272M 并且 PGA_AGGREGATE_TARGET 是 90M, 如上所示, 并且如果分配的最大 PGA 被确定为 120M, 则 MEMORY_TARGET 应该至少为 392M(272M + 120M).
3, 选择您要使用的 MEMORY_TARGET 的值
这可以是您在步骤 2 中计算出的最小值, 或者如果有足够的物理内存可用, 则可以选择使用较大的值.
4, 对于 MEMORY_MAX_TARGET 初始化参数, 决定在可预见的将来您想要分配给数据库的最大内存量. 也就是说, 确定 SGA 和实例 PGA 大小之和的最大值. 该数字可能大于或等于您在上一步中选择的 MEMORY_TARGET 值.
5, 执行以下操作之一:
如果使用服务器参数文件启动 Oracle 数据库实例 (如果使用数据库配置助手(DBCA) 创建数据库时为缺省值), 请输入以下命令:
ALTER SYSTEM SET MEMORY_MAX_TARGET = nM SCOPE = SPFILE;
其中 n 是您在步骤 4 中计算的值.
SCOPE = SPFILE 子句仅在服务器参数文件中设置该值, 而不是针对正在运行的实例. 您必须包含此 SCOPE 子句, 因为 MEMORY_MAX_TARGET 不是动态初始化参数.
如果您使用文本初始化参数文件启动实例, 请手动编辑文件以使其包含以下语句:
- memory_max_target = nM
- memory_target = mM
其中 n 是您在步骤 4 中确定的值, m 是您在步骤 3 中确定的值.
在文本初始化参数文件中, 如果省略 MEMORY_MAX_TARGET 的行并包含 MEMORY_TARGET 的值, 则数据库会自动将 MEMORY_MAX_TARGET 设置为 MEMORY_TARGET 的值. 如果省略 MEMORY_TARGET 的行并包含 MEMORY_MAX_TARGET 的值, 则 MEMORY_TARGET 参数默认为零. 启动后, 您可以动态地将 MEMORY_TARGET 更改为非零值, 前提是它不超过 MEMORY_MAX_TARGET 的值.
6, 关闭并重新启动数据库.
7, 如果您使用服务器参数文件启动 Oracle 数据库实例, 请输入以下命令:
- ALTER SYSTEM SET MEMORY_TARGET = nM;
- ALTER SYSTEM SET SGA_TARGET = 0;
- ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 0;
其中 n 是您在步骤 3 中确定的值.
前面的步骤指示您将 SGA_TARGET 和 PGA_AGGREGATE_TARGET 设置为零, 以便 SGA 和实例 PGA 的大小根据需要上下调整, 不受限制. 您可以省略将这些参数值设置为零的语句, 并将其中一个或两个值都设置为正数. 在这种情况下, 这些值将作为 SGA 或实例 PGA 大小的最小值.
监视和调整自动内存管理
动态性能视图 V $ MEMORY_DYNAMIC_COMPONENTS 显示所有动态调优的内存组件的当前大小, 包括 SGA 和实例 PGA 的总大小.
视图 V $ MEMORY_TARGET_ADVICE 为 MEMORY_TARGET 初始化参数提供调整建议.
SQL> select * from v$memory_target_advice order by memory_size;
MEMORY_SIZE MEMORY_SIZE_FACTOR ESTD_DB_TIME ESTD_DB_TIME_FACTOR VERSION
- ----------- ------------------ ------------ ------------------- ----------
- 180 .5 458 1.344 0
- 270 .75 367 1.0761 0
- 360 1 341 1 0
- 450 1.25 335 .9817 0
- 540 1.5 335 .9817 0
- 630 1.75 335 .9817 0
- 720 2 335 .9817 0
MEMORY_SIZE_FACTOR 为 1 的行显示由 MEMORY_TARGET 初始化参数设置的当前内存大小以及完成当前工作负载所需的 DB 时间量. 在之前和之后的行中, 结果显示了几种可选的 MEMORY_TARGET 大小. 对于每个备选大小, 如果将 MEMORY_TARGET 参数更改为备用大小, 数据库将显示大小因子 (当前大小的倍数) 以及完成当前工作负载的估计 DB 时间. 请注意, 对于小于当前 MEMORY_TARGET 大小的总内存大小, 估计的 DB 时间会增加. 还要注意, 在这个例子中, 通过增加总内存大小超过 450MB 没有什么可以获得的. 但是, 如果尚未运行完整的工作负载, 则这种情况可能会发生变化.
Enterprise Manager 提供了一个易于使用的图形内存顾问程序, 可帮助您为 MEMORY_TARGET 选择最佳大小. 有关详细信息, 请参阅 Oracle Database 2 Day DBA
参考资料
https://docs.oracle.com/cd/E11882_01/server.112/e25494/memory.htm#ADMIN11199
来源: https://www.cnblogs.com/sorliran/p/9055221.html