oracle 10g数据库自动内存管理分析.doc

oracle 10g数据库自动内存管理分析.doc

ID:61482815

大小:54.00 KB

页数:6页

时间:2021-02-04

oracle 10g数据库自动内存管理分析.doc_第1页
oracle 10g数据库自动内存管理分析.doc_第2页
oracle 10g数据库自动内存管理分析.doc_第3页
oracle 10g数据库自动内存管理分析.doc_第4页
oracle 10g数据库自动内存管理分析.doc_第5页
资源描述:

《oracle 10g数据库自动内存管理分析.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、Oracle10G数据库自动内存管理分析是不是很难准确地分配不同的池所需的内存数?自动共享内存管理特性使得自动将内存分配到最需要的地方去成为可能。无论您是一个刚入门的DBA还是一个经验丰富的DBA,您肯定至少看到过一次类似以下的错误:    ORA-04031:unabletoallocate2216bytesofsharedmemory("sharedpool"......  或者这种错误:  ORA-04031:unabletoallocateXXXXbytesofsharedmemory  ("largepoo

2、l","unknownobject","sessionheap","frame")  或者可能这种错误:  ORA-04031:unabletoallocatebytesofsharedmemory("sharedpool",  "unknownobject","joxlod:inith","JOX:ioc_allocate_pal")  第一种错误的原因很明显:分配给共享池的内存不足以满足用户请求。(在某些情况下,原因可能不是池本身的大小,而是未使用绑定变量导致的过多分析造成的碎片。)其它的错误分别来自大型池和Ja

3、va池的空间不足。您需要解决这些错误情况,而不作任何与应用程序相关的修改。那么有哪些方案可选呢?问题是如何在Oracle例程所需的所有池之间划分可用的内存。馅饼怎么分?正如您所了解的,一个Oracle例程的系统全局区域(SGA)包含几个内存区域(包括缓冲高速缓存、共享池、Java池、大型池和重做日志缓冲)。这些池在操作系统的内存空间中占据了固定的内存数;它们的大小由DBA在初始化参数文件中指定。这四个池(数据库块缓冲高速缓存、共享池、Java池和大型池)几乎占据了SGA中所有的空间。(与其它区域相比,重做日志缓冲没有

4、占据多少空间,对我们这里的讨论无关紧要。)作为DBA,您必须确保它们各自的内存分配是充足的。假定您决定了这些池的值分别是2GB、1GB、1GB和1GB。您将设置以下初始化参数来为数据库例程规定池的大小。  db_cache_size=2g  shared_pool_size=1g  large_pool_size=1g  java_pool_size=1g  现在,仔细看一下这些参数。坦白讲,这些值是否准确?我相信您一定会有疑虑。在实际中,没有人能够为这些池指定确切的内存数—它们太依赖于数据库内部的处理,而处理的特性

5、随时在变化。下面是一个示例场景。假定您有一个典型的、大部分属于OLTP的数据库,并且为缓冲高速缓存分配的专用内存比为纯OLTP数据库(现在已经很少见了)分配的要少。有一天,您的用户放开了一些非常大的全表扫描,以创建当天的结束报表。Oracle9i数据库为您提供了在线修改内存分配的功能,但由于提供的总物理内存有限,您决定从大型池和Java池中取出一些内存:  altersystemsetdb_cache_size=3gscope=memory;  altersystemsetlarge_pool_size=512msc

6、ope=memory;  altersystemsetjava_pool_size=512mscope=memory;  这个解决方案能够很好地工作一段时间,但是接着夜间的RMAN作业(它们使用大型池)开始了,大型池将立即出现内存不足。同样,您从数据库高速缓存中取出一些内存来补充大型池,以挽救这种局面。RMAN作业完成,然后启动一个广泛使用Java的批处理程序,接着您开始看到与Java池相关的错误。因此,您(再次)重新分配池,以满足Java池和数据库高速缓存上的内存需求:  altersystemsetdb_cach

7、e_size=2Gscope=memory;  altersystemsetlarge_pool_size=512Mscope=memory;  altersystemsetjava_pool_size=1.5Gscope=memory;  第二天早上,OLTP作业恢复在线,这个循环又完全重复!解决这种恶性循环的一种替代方法是永久设置每个池的最大需求。不过,这么做的话,您分配的总的SGA可能超出可用的内存—从而在为每个池分配的内存数不足时,将增加交换和分页的风险。人工重新分配的方法(虽然不实际)目前看起来很不错。另一

8、种替代方法是将值设为可接受的最小值。不过,当需求增长且内存不能完全满足时,性能将受到影响。注意在所有这些示例中,分配给SGA的总内存保持不变,而池之间的内存分配根据即时的需求进行修改。如果RDBMS将自动探测来自用户的需求并相应地重新分布内存分配,那不是很好吗?Oracle数据库10g中的自动共享内存管理特性正好能够实现这一目的。您可以决定SG

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。