1 内存管理概览
dba必须将内存管理视为其工作的关键部分,因为:
可用内存是有限的
分配更多的内存来服务某些类型的函数可以提高整体性能
自动调优内存分配通常是常规的配置,但具体环境甚至短期条件可能需要进一步关注
由于数据库服务器上的可用内存是有限的,因此在Oracle数据库实例上,必须注意内存是如何分配的。如果一个不需要内存的特定区域允许使用太多内存,那么其他区域可能会因为内存不足而无法正常工作。有了为自动确定和维护内存分配的能力,任务大大简化了。但是,即使是自动调优的内存也需要监视以进行优化,并且在某种程度上可能需要手动配置。
2 内存管理方式
- 自动内存管理(AMM)允许指定分配给实例的总内存(包括SGA和PGA)
- 自动共享内存管理(ASMM)
允许通过一个初始化参数指定总的SGA内存
使Oracle服务器能够管理分配给共享池、Java池、缓冲区缓存、流池和大池的内存量
手动设置共享内存管理:
通过多个初始化参数确定组件的大小
使用适当的内存顾问来提出建议
Oracle数据库允许指定分配给实例的总内存。内存将根据需要在系统全局区域(SGA)和程序全局区域(PGA)之间动态重新分配。这种方法称为自动内存管理(AMM),仅在那些支持动态释放内存的平台上可用。这简化了内存管理任务。
内存顾问可以帮助在不同级别上设置初始化参数。advisor可用取决于指定内存参数的级别。如果启用AMM,则只有 Memory Size Advisor 可用。
自动共享内存管理(ASMM)使能够作为一个整体来管理SGA。SGA由几个组件组成。这些组件的大小在初始化参数的限制范围内动态调整以获得最佳性能。当AMM被启用时,ASMM被自动启用。如果启用了ASMM,但没有启用AMM,则可以使用SGA Size Advisor。
可以通过设置每个组件的初始化参数来手动管理各个组件的大小。如果Oracle服务器通知了和SGA或PGA组件的大小有关的性能问题,可以使用该组件的内存顾问来确定适当的新设置。Memory Advisor可以对参数更改的影响进行建模。
3 有效使用内存
优化内存的最有效使用
减少总体物理I/O
减少总的内存需求
3.1 最好将SGA放入物理内存中
如果可能,最好将SGA放入物理内存中,这样可以提供最快的访问。尽管操作系统可能提供额外的虚拟内存,但从本质上讲,这些内存通常可以被交换到磁盘上。在某些平台上,可以使用LOCK_SGA初始化参数将SGA锁定到物理内存中。此参数不能与AMM或ASMM一起使用。
当SQL语句执行时,将请求数据块进行读写操作,或者同时进行读写操作。这被认为是一个逻辑I/O。当请求块时,就检查块,看它是否已经存在于内存中。如果它不在内存中,则从磁盘中读取它,这称为物理I/O。当在内存中找到该块时,其开销比从磁盘读取该块的开销小几个数量级。SGA组件的大小与工作负载的组合对物理读取的数量有很大的影响简单地看,这意味着应该尽可能地增加SGA组件的内存。一个更大的SGA并不总是更好。有一个点,增加更多的内存产生递减的收益。这个原则适用于缓冲区缓存、共享池和其他SGA组件。在实践中,会发现将内存从一个SGA组件转移到另一个组件可能会提高总体性能,而不会根据工作负载的特征改变提供给SGA的内存总量。
3.2 内存在所有当前机器中都有一个上限
内存在所有当前机器中都有一个上限。这种限制可能是由硬件、操作系统或内存成本造成的。内存调优的目标是最有效地使用现有内存。当工作负载经常变化时,SGA组件之间最有效的内存分配将发生变化。还有分配给SGA和PGA的内存数量。与数据仓库(DW)或决策支持系统(DSS)相比,在线事务处理(OLTP)系统通常只使用很少的PGA内存。
Enterprise Manager Cloud Control和Enterprise Manager Database Express都提供内存顾问。这些工具监视SGA组件和PGA的内存使用情况,并预测在增加和减少内存分配方面的效率差异。这些预测使用当前的工作负载。它们可以帮助根据特定数据库中的活动确定SGA的大小。当自动内存管理被禁用时,顾问将为手动设置提供大小建议。这些相同的顾问为自动内存管理提供输入,以确定最有效的组件大小。




