Oracle 数据库10g:自动共享内存管理

王朝oracle·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

是不是很难准确地分配

配到最需要的地方去成为可

不同的池所需的内存数?自动共

能。

享内存治理特性使得自动将内存分

无论您是一个刚入门的

的错误:

DBA 还是一个经验丰富的 DBA

,您肯定至少看到过一次类似以下

ORA-04031:unable to

allocate 2216 bytes of share

d memory ("shared pool"...

...

或者这种错误:

ORA-04031:unable to allocate

XXX

X bytes of shared memory

("large pool","unknown

object","

session heap","frame")

或者可能这种错误:

ORA-04031:unable to

allocate bytes of shared mem

ory ("shared

pool",

"unknown object","joxlod:init

h"

,

"JOX:ioc_allocate_pal")

第一种错误的原因很明

原因可能不是池本身的大小

的一个主题;但目前让我们

池的空间不足。

显:分配给共享池的内存不足以

,而是未使用绑定变量导致的过

把重点放在手头的问题上。)其

满足用户请求。(在某些情况下,

多分析造成的碎片,这是我很喜欢

它的错误分别来自大型池和 Java

您需要解决这些错误情

问题是如何在 Oracle

例程

况,而不作任何与应用程序相关

所需的所有池之间划分可用的内

的修改。那么有哪些方案可选呢?

存。

馅饼怎么分?

正如您所了解的,一个

冲高速缓存、共享池、Java

占据了固定的内存数;它们

Oracle 例程的系统全局区域

(

池、大型池和重做日志缓冲)

的大小由 DBA 在初始化参数文

SGA)

包含几个内存区域(包括缓

。这些池在操作系统的内存空间中

件中指定。

这四个池(数据库块缓冲高速缓存、

的空间。(与其它区域相比,重做日志缓

)作为

DBA,您必须确保它们各自的内存

共享池、Java 池和大型池)几乎占据了 SGA

中所有

冲没有占据多少空间,对我们这里的讨论无关紧要。

分配是充足的。

假定您决定了这些池的值分别是 2GB

数据库例程规定池的大小。

、1GB、1GB 和

1GB。您将设置以下初始化参数来为

db_cache_size =

2g

shared_pool_size =

1g

large_pool_size =

1g

java_pool_size =

1g

现在,仔细看一下这些参数。坦白讲,这些值是否准确?

我相信您一定会有疑虑

赖于数据库内部的处理,而

。在实际中,没有人能够为这些

处理的特性随时在变化。

池指定确切的内存数 —

它们太依

下面是一个示例场景。

速缓存分配的专用内存比为

用户放开了一些非常大的全

线修改内存分配的功能,但

些内存:

假定您有一个典型的、大部分属

纯 OLTP

数据库(现在已经很少

表扫描,以创建当天的结束报表

由于提供的总物理内存有限,您

于 OLTP

的数据库,并且为缓冲高

见了)分配的要少。有一天,您的

。Oracle9i

数据库为您提供了在

决定从大型池和 Java 池中取出一

alter system set db_cache_size

=

3g

scope=memory;

alter system set lar

ge_pool_size = 512m scope=me

mory;

alter system set jav

a_pool_size = 512m scope=mem

ory;

这个解决方案能够很好地工作一段时

开始了,大型池将立即出现内存不足。同

池,以拯救这种局面。

间,但是接着夜间的 RMAN

作业

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航