本教程将向您介绍如何使用自动内存管理来尽可能避免出现“内存不足”的错误。
大约 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
|
|
在本教程中,您学习了如何使用自动内存管理功能。