天天看點

Oracle的X$表系列介紹之X$KSMSP

X$KSMSP的名稱含義為: 

[K]ernal [S]torage [M]emory Management [S]GA Hea[P]

其中每一行都代表着shared pool中的一個chunk

我們看一下x$ksmsp的結構:

SQL> desc x$ksmsp
 Name              Null?    Type
 ---------       -------- ----------------
 ADDR                       RAW(4)
 INDX                       NUMBER
 INST_ID                    NUMBER
 KSMCHIDX                   NUMBER
 KSMCHDUR                   NUMBER
 KSMCHCOM                   VARCHAR2(16)
 KSMCHPTR                   RAW(4)
 KSMCHSIZ                   NUMBER
 KSMCHCLS                   VARCHAR2(8)
 KSMCHTYP                   NUMBER
 KSMCHPAR                   RAW(4)      

我們關注以下幾個字段:

KSMCHCOM是注釋字段,每個記憶體塊被配置設定以後,注釋會添加在該字段中.

x$ksmsp.ksmchsiz代表塊大小

x$ksmsp.ksmchcls列代表類型,主要有四類,說明如下:

free

Free chunks--不包含任何對象的chunk,可以不受限制的被配置設定.

recr

Recreatable chunks--包含可以被臨時移出記憶體的對象,在需要的時候,這個對象可以

被重新建立.例如,許多存儲共享sql代碼的記憶體都是可以重建的.

freeabl

Freeable chunks--包含session周期或調用的對象,随後可以被釋放.這部分記憶體有時候

可以全部或部分提前釋放.但是注意,由于某些對象是中間過程産生的,這些對象不能

臨時被移出記憶體(因為不可重建).

perm

Permanent memory chunks--包含永久對象.通常不能獨立釋放.

我們可以通過查詢x$ksmsp視圖來考察shared pool中存在的記憶體片的數量

不過注意:Oracle的某些版本(如:10.1.0.2)在某些平台上(如:HP-UX PA-RISC 64-bit)查

詢該視圖可能導緻過度的CPU耗用,這是由于bug引起的.

引自:http://www.eygle.com/archives/2005/01/oracleaexiieaee_1.html