This Domain(Admin5.com) is for Sale:

关于shared pool的深入探讨(一)

时间:2007-12-23  来源:不详  作者:迈克DB
关于sharedpool的设置一直是一个争议较多的内容.
很多文章上说,sharedpool设置过大会带来额外的治理上的负担,从而在某些条件下会导致性能的下降.
那么这个治理上的负担指的是什么内容呢?
本文对这个内容作一定的深入探讨.
本文只涉及一个方面,后续的文章将从其他方面继续讨论.
基础知识:
我们可以通过如下命令转储sharedpool共享内存的内容:
SQL>altersessionsetevents’immediatetracenameheapdumplevel2’;
Sessionaltered.
本测试中引用的两个trace文件:
9i:
SQL>@gettrcname
TRACE_FILE_NAME
--------------------------------------------------------------------------------
/opt/oracle/admin/hsjf/udump/hsjf_ora_24983.trc
8i:
SQL>@gettrcname
TRACE_FILE_NAME
--------------------------------------------------------------------------------
/usr/oracle8/admin/guess/udump/guess_ora_22038.trc
SharedPool通过freelist治理free块,FreeList按不同size划分Bucket
在Oracle8i中,不同bucket的size范围如下所示(size显示的是下边界):
oracle:/usr/oracle8/admin/guess/udump>catguess_ora_22038.trc|grepBucket
织梦好,好织梦

Bucket0size=44
Bucket1size=76
Bucket2size=140
Bucket3size=268
Bucket4size=524
Bucket5size=1036
Bucket6size=2060
Bucket7size=4108
Bucket8size=8204
Bucket9size=16396
Bucket10size=32780

我们注重,在这里,小于76的块都位于Bucket0上;大于32780的块,都在Bucket10上
初始的,数据库启动以后,sharedpool多数是连续内存块
当空间分配使用以后,内存块开始被分割,碎片开始出现,Bucket列表开始变长
Oracle请求sharedpool空间时,首先进入相应的Bucket进行查找
假如找不到,则转向下一个非空的bucket,获取第一个chunk
分割这个chunk,剩余部分会进入相应的Bucket,进一步增加碎片
最终的结果是,Bucket0上的内存块会越来越多,越来越碎小
(在我这个测试的小型的数据库上,Bucket0上的碎片已经达到9030个
而shared_pool_size设置仅为150M)
通常假如每个Bucket上的chunk多余2000个,就被认为是sharepool碎片过多
而在大多数情况下,我们请求的都是相对小的chunk,这样搜索Bucket0往往消耗了大量的时间以及资源
这可能导致sharepoolLatch被长时间的持有,导致更多的sharepool竞争
所以在Oracle9i之前,假如盲目的增大shared_pool_size或设置过大的shared_pool_size,往往会适得其反

copyright dedecms



我们看一下Oracle9i中的处理方式:
[oracle@jumperoracle]$sqlplus"/assysdba"
SQL*Plus:Release9.2.0.3.0-ProductiononWedAug1822:13:072004
Copyright(c)1982,2002,OracleCorporation.Allrightsreserved.

Connectedto:
Oracle9iEnterpriseEditionRelease9.2.0.3.0-Production
WiththePartitioning,OLAPandOracleDataMiningoptions
JServerRelease9.2.0.3.0-Production
SQL>altersessionsetevents’immediatetracenameheapdumplevel2’;
Sessionaltered.
SQL>@gettrcname
TRACE_FILE_NAME
--------------------------------------------------------------------------------
/opt/oracle/admin/hsjf/udump/hsjf_ora_24983.trc
SQL>
SQL>!
[oracle@jumperoracle]$cd$admin
[oracle@jumperudump]$cathsjf_ora_24983.trc|grepBucket
Bucket0size=16
Bucket1size=20
Bucket2size=24
Bucket3size=28
Bucket4size=32
Bucket5size=36
Bucket6size=40
Bucket7size=44

看完这篇,您有何感觉呢?

文章评论

共有位Admini5网友发表了评论 查看完整内容

24小时热门信息