我在 Windows XP 64 位桌面上安装了 Oracle 11g,基本都是默认选项。现在,当我启动数据库时,即使数据库未在使用中,内存使用量也会不断增加,每次增加几百 KB。目前,我正在查看 Windows 任务管理器,它显示 oracle.exe 占用了超过 1.4 G 的内存,并且还在增加。
发生了什么事?如何设置内存使用量的最大限制?
这是一台开发人员机器,大多数情况下数据库不会很大。即使数据库很大,并发用户数也很少。
答案1
您的 memory_target 设置为多少?如果设置得很高,那么随着时间的推移,它增长到最大大小也就不足为奇了。请查看此处了解有关新11g 中的 memory_target 参数。这将对 Oracle 尝试获取的内存量设置上限。
memory_target 参数将 Oracle 配置为自我管理过去需要单独关注的内存参数:
- 数据库缓存大小
- 共享池大小
- LARGE_POOL_SIZE
- JAVA_POOL_SIZE
- PGA_AGGREGATE_TARGET
需要注意的是,STATISTICS_LEVEL 必须设置为 TYPICAL。
这里实际上涉及两个参数:memory_max_target 和 memory_target。第一个设置 memory_target 的最大值,需要重启实例才能更改:
ALTER SYSTEM SET memory_max_target = 1500M SCOPE=SPFILE;
一旦到位,就可以动态设置memory_target参数,而无需重新启动实例:
ALTER SYSTEM SET memory_target = 1000M;
对于想要基本“设置后就忘掉”内存管理设置的人来说,这是一个非常好的功能。为 memory_max_target 设置您认为需要的最高值,然后调整 memory_target 的值以满足您的需求。让 Oracle 管理各个参数。Oracle 将使用实例统计信息来管理这些值,因此随着实例在使用模式方面的变化,Oracle 会考虑到这一点。
关于这些参数的另一个很好的参考资料可以在Oracle 常见问题解答 Oracle Wiki。