This Domain(Admin5.com) is for Sale:

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

时间:2007-12-23  来源:不详  作者:迈克DB
我们继续把前面的问题展开一下.其实我们可以从数据库内部监控sharedpool的空间碎片情况.这涉及到一个内部视图x$ksmspX$KSMSP的名称含义为:[K]ernal[S]torage[M]emoryManagement[S]GAHea[P]其中每一行都代表着sharedpool中的一个chunk首先记录一下测试环境:

SQL>select*fromv$version;
BANNER
----------------------------------------------------------------
Oracle9iEnterpriseEditionRelease9.2.0.3.0-Production
PL/SQLRelease9.2.0.3.0-Production
CORE9.2.0.3.0Production
TNSforLinux:Version9.2.0.3.0-Production
NLSRTLVersion9.2.0.3.0-Production


我们看一下x$ksmsp的结构:


SQL>descx$ksmsp
NameNull?Type
-----------------------------------------------------------------------------
ADDRRAW(4)
INDXNUMBER
INST_IDNUMBER
KSMCHIDXNUMBER
KSMCHDURNUMBER
KSMCHCOMVARCHAR2(16)
KSMCHPTRRAW(4)
KSMCHSIZNUMBER
KSMCHCLSVARCHAR2(8)
KSMCHTYPNUMBER
KSMCHPARRAW(4)

我们关注以下几个字段:
KSMCHCOM是注释字段,每个内存块被分配以后,注释会添加在该字段中.
织梦好,好织梦

x$ksmsp.ksmchsiz代表块大小
x$ksmsp.ksmchcls列代表类型,主要有四类,说明如下:
free
Freechunks--不包含任何对象的chunk,可以不受限制的被分配.
recr
Recreatablechunks--包含可以被临时移出内存的对象,在需要的时候,这个对象可以
被重新创建.例如,许多存储共享sql代码的内存都是可以重建的.
freeabl
Freeablechunks--包含session周期或调用的对象,随后可以被释放.这部分内存有时候
可以全部或部分提前释放.但是注重,由于某些对象是中间过程产生的,这些对象不能
临时被移出内存(因为不可重建).
perm
Permanentmemorychunks--包含永久对象.通常不能独立释放.
我们可以通过查询x$ksmsp视图来考察sharedpool中存在的内存片的数量不过注重:Oracle的某些版本(如:10.1.0.2)在某些平台上(如:HP-UXPA-RISC64-bit)查询该视图可能导致过度的CPU耗用,这是由于bug引起的.我们看一下测试:

初始启动数据库,x$ksmsp中存在2259个chunk

SQL>selectcount(*)fromx$ksmsp;

COUNT(*)
----------
2259


执行查询:

SQL>selectcount(*)fromdba_objects;

COUNT(*)
----------

本文来自织梦


10491

此时sharedpool中的chunk数量增加

SQL>selectcount(*)fromx$ksmsp;

COUNT(*)
----------
2358

内容来自dedecms

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

文章评论

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

24小时热门信息