5.4.2 Enabling Automatic Memory Management
如果您在安装和配置数据库时没有启用自动内存管理,那么Oracle建议您在安装之后启用自动内存管理,除非您是有经验的DBA,并且有特定的理由手动优化内存大小。通过自动内存管理,Oracle实例动态调优所有内存组件,以便在工作负载更改时优化性能。
To enable automatic memory management:
-
启动SQL*Plus并作为SYSDBA连接到数据库。
-
计算MEMORY_TARGET的最小值如下:
-
输入以下SQL*Plus命令,确定SGA_TARGET和PGA_AGGREGATE_TARGET的当前大小:
SHOW PARAMETER TARGET
SQL*Plus显示所有初始化参数的值,参数名中包含字符串目标。
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 32 pga_aggregate_target big integer 29M sga_target big integer 356M
或者,在Oracle Enterprise Manager Database Express (EM Express)的初始化参数页面上,您可以在搜索字段中输入“TARGET”,以显示参数名称中带有字符串目标的所有初始化参数的值,如“查看和修改初始化参数”所述。
-
运行以下查询来确定自数据库启动以来分配的最大实例程序全局区域(PGA):
SQL> select value from v$pgastat where name='maximum PGA allocated'; VALUE ---------- 246844416
246844416 bytes is approximately 235M.
-
计算第2步查询结果之间的最大值。b和PGA_AGGREGATE_TARGET。将SGA_TARGET添加到该值。
memory_target = sga_target + max(pga_aggregate_target, maximum PGA allocated)
例如,如果SGA_TARGET为356M, PGA_AGGREGATE_TARGET为29M,如上所示,如果分配的最大PGA被确定为235M,那么MEMORY_TARGET至少应该是591M (356M + 235M)。
-
-
为您想要使用的MEMORY_TARGET选择值。
这可以是您在步骤2中计算的最小值,或者如果您有足够的物理内存可用,您可以选择使用更大的值。 -
对于MEMORY_MAX_TARGET初始化参数,决定在可预见的将来希望分配给数据库的最大内存量。也就是说,确定系统全局区域(SGA)和实例PGA大小之和的最大值。这个数字可以大于或与您在前一步中选择的MEMORY_TARGET值相同。
-
做下列其中一项:
-
如果您使用服务器参数文件启动Oracle数据库实例(如果您使用数据库配置助手(DBCA)创建数据库,则默认文件为服务器参数文件),请输入以下SQL*Plus命令:
ALTER SYSTEM SET MEMORY_MAX_TARGET =
n
M SCOPE = SPFILE;where n is the value that you computed in step 4.
SCOPE = SPFILE子句仅在服务器参数文件中设置值,而不为正在运行的实例设置值。必须包含这个作用域子句,因为MEMORY_MAX_TARGET不是一个动态初始化参数。
或者,您也可以在EM Express的初始化参数页面上选择MEMORY_MAX_TARGET初始化参数,单击Set,指定SPFile的作用域,并设置一个新值,如“查看和修改初始化参数”中所述。 -
如果您使用文本初始化参数文件启动实例,请手动编辑该文件,使其包含以下语句:
memory_max_target =
n
M (650M for this example) memory_target =m
M (591M for this example)其中n是步骤4中确定的值,m是步骤3中确定的值。
Note:
在文本初始化参数文件中,如果省略MEMORY_MAX_TARGET的行并包含MEMORY_TARGET的值,数据库将自动将MEMORY_MAX_TARGET设置为MEMORY_TARGET的值。如果省略MEMORY_TARGET的行,并包含MEMORY_MAX_TARGET的值,则MEMORY_TARGET参数默认为0。启动之后,您可以动态地将MEMORY_TARGET更改为一个非零值,前提是它不超过MEMORY_MAX_TARGET的值。
-
-
Shut down and restart the database.
-
在EM Express中,从Configuration菜单中选择Memory。
出现内存管理页面。在内存设置部分,内存管理值是自动的。这表明数据库启用了自动内存管理。页面上显示的初始化参数值是除MEMORY_MAX_TARGET之外指定的值。 -
如果您使用服务器参数文件启动Oracle数据库实例,请更改以下初始化参数值:
MEMORY_TARGET =
n
M; (591M for this example) SGA_TARGET = 0; PGA_AGGREGATE_TARGET = 0;还可以使用EM Express中的初始化参数页设置这些初始化参数值,指定SPFile的作用域。有关更多信息,请参见“查看和修改初始化参数”。
Note:
前面的步骤指示您将SGA_TARGET和PGA_AGGREGATE_TARGET设置为0,以便根据需要上下调整SGA和实例PGA的大小,不受限制。您可以忽略将这些参数值设置为0的语句,并将其中一个或两个值保留为正数。在这种情况下,这些值充当SGA或实例PGA大小的最小值。
See Also:
5.4.3 Modifying Memory Settings – Automatic Memory Management
在修改用于自动内存管理的内存设置之前,请使用Oracle Enterprise Manager Database Express (EM Express)中的memory Advisor图来预测使用不同目标内存大小设置节省的时间百分比。涉及的步骤要求您必须首先启用自动内存管理。参见“启用自动内存管理”。
预测不同目标内存大小节省的时间百分比:
-
在EM Express中,从Configuration菜单中选择Memory。
出现内存管理页面。在内存设置部分,内存管理值是自动的。这表明数据库启用了自动内存管理。
使用Memory Advisor图(出现在Memory Settings部分右侧)预测潜在目标内存大小节省的时间百分比。
Description of the illustration memory_advisor_graph.gif在Memory Advisor图中:
-
MEMORY_TARGET初始化参数的潜在值(单位为MB)在图的横轴上表示。MEMORY_TARGET初始化参数的当前设置由一个蓝点表示。
-
节省的时间值在图的纵轴上表示。绘制的值表示为相对于MEMORY_TARGET初始化参数的当前设置的百分比。
负值表示时间消耗增加的百分比(分配给Oracle的内存小于当前设置时),正值表示时间消耗减少的百分比(分配给Oracle的内存大于当前设置时)。
图上的一条橙色线表示可以为MEMORY_TARGET初始化参数指定的不同值。单击橙色直线上的任意一个点,可以看到由该点表示的MEMORY_TARGET的时间消耗减少的预测。
在这个图中,Memory Advisor图表明,增加MEMORY_TARGET初始化参数的当前值不会减少节省的时间百分比。
-
-
要更改MEMORY_TARGET初始化参数的值:
-
在内存管理页面上单击“配置内存”。
将出现初始化参数页。 -
选择MEMORY_TARGET初始化参数并单击Set。
出现Set初始化参数页。 -
在Scope字段中,输入此更改的范围。
有关指定内存范围、SPFile或两者的更多信息,请参见“查看和修改初始化参数”。 -
在Value字段中,输入MEMORY_TARGET初始化参数的新值。
-
Click OK.
A confirmation message appears.
-
See Also:
-
Oracle Database Performance Tuning Guide for more information about memory management methods