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