利用自动内存管理功能改进内存管理

本教程将向您介绍如何使用自动内存管理来尽可能避免出现“内存不足”的错误。

大约 15 分钟

主题

本教程包括下列主题:

将光标置于此图标上可以加载和查看本教程的所有屏幕截图。 (警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)

注:此外,您还可以在下列步骤中将光标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。可以通过单击各个屏幕截图将其隐藏。

概述

通过自动内存管理,Oracle Database 11g 可根据您的工作负载自动调整 PGA 和 SGA 组件的大小。管理内存最简单的方法是允许数据库对内存进行自动管理和调优。为此(在大多数平台上),您必须设置一个目标内存大小初始化参数 (MEMORY_TARGET) 和一个最大内存大小初始化参数 (MEMORY_MAX_TARGET)。因为目标内存初始化参数是动态的,所以您可以随时更改目标内存大小,无需重新启动数据库。由于最大内存大小充当上限,因此您不能随意地将目标内存大小设置得过高。此外,由于某些 SGA 组件不会轻易缩小或必须保持最小大小,因此数据库还会阻止您将目标内存大小设置得过低。

返回主题列表

开始本教程之前,您应该:

1.

安装 Oracle Database 11g。

2.

下载 msamigrate.zip 文件并将其解压缩到您的工作目录中。

返回主题列表

自动内存管理根据使用需求动态调节内存分配。

执行以下步骤,了解自动内存管理的用法:

1.

以用户 oracle 的身份打开一个终端窗口。转到 /home/oracle/wkdir/amm 目录。执行 amm_setup.sh 脚本该脚本将创建本 OBE 需要的所有对象。它还将启用自动内存管理,并确保本 OBE 中运行的并行查询将使用大型池内存,以便稍后在 Enterprise Manager 中获得更好的显示效果。注:请勿在您的生产环境中运行该脚本!

./amm_setup.sh

该脚本的最后一步是以如下的 SGA 大小来重启数据库:

2.

打开您的浏览器窗口,以用户 SYS 的身份登录 Enterprise Manager。进入 Home 页面后,单击 Server 选项卡。在 Server 子页面中,单击 Memory Advisors 链接。

3.

在 Memory Advisors 页面中,确认已启用 Automatic Memory Management。您可以通过该页面启用/禁用自动内存管理功能。

4.

在终端会话中,以 amm 用户身份(口令为 amm)启动 SQL*Plus 连接,然后执行 query1.sql 脚本。此脚本以并行度设置 20 启动一个并行查询。数据库的已有配置使得此语句将会占用大型池中的大量内存。

5.

在同一终端会话中,执行 query2.sql 脚本。此脚本以并行度设置 21 启动同一个并行查询。此语句将会需要更多的大型池内存。

6.

在同一终端会话中,执行 query3.sql 脚本。该脚本将调用一个在内存中构建大数组的 PL/SQL 过程。执行该过程时将需要更大的共享池。注意,该过程的执行时间至少为 5 分钟。

7.

返回 Enterprise Manager 会话,单击 Memory Advisors 页面顶部的 Refresh 按钮。您会观察到这三个执行对内存的影响。由于执行前两个查询语句时使用了大量的大型池内存,其他内存区域相应地动态减少以适应这种情况。由于第三个执行需要更大的共享内存,系统动态地重新分配了内存。所有这些都是自动完成的,不会生成“内存不足”的错误。

8.

退出 SQL*Plus。然后执行 amm_cleanup.sh 脚本。此脚本将您的数据库重置回到本 OBE 之前的设置。

./amm_cleanup.sh

返回主题列表

在本教程中,您学习了如何使用自动内存管理功能。

返回主题列表

将光标置于该图标上可以隐藏所有的屏幕截图。