Oracle 10G 数据库自动内存管理分析 是不是很难准确地分配不同的池所需的内存数
自动共享内存管理特性使得自动将内存分配到最需要的地方去成为可能
无论您是一个刚入门的 DBA 还是一个经验丰富的 DBA,您肯定至少看到过一次类似以下的错误: ORA-04031:unable to allocate 2216 bytes of shared memory ("shared pool"
或者这种错误: ORA-04031:unable to allocate XXXX bytes of shared memory ("large pool","unknown object","session heap","frame") 或者可能这种错误: ORA-04031:unable to allocate bytes of shared memory ("shared pool", "unknown object","joxlod:init h", "JOX:ioc_allocate_pal") 第一种错误的原因很明显:分配给共享池的内存不足以满足用户请求
(在某些情况下,原因可能不是池本身的大小,而是未使用绑定变量导致的过多分析造成的碎片
)其它的错误分别来自大型池和 Java 池的空间不足
您需要解决这些错误情况,而不作任何与应用程序相关的修改
那么有哪些方案可选呢
问题是如何在 Oracle 例程所需的所有池之间划分可用的内存
正如您所了解的,一个 Oracle 例程的系统全局区域 (SGA) 包含几个内存区域(包括缓冲高速缓存、共享池、Java 池、大型池和重做日志缓冲)
这些池在操作系统的内存空间中占据了固定的内存数;它们的大小由 DBA 在初始化参数文件中指定
这四个池(数据库块缓冲高速缓存、共享池、Java 池和大型池)几乎占据了