原文轉自:http://www.eygle.com/archives/2005/01/oracleaexiieaee_1.html
引用位址:http://blog.csdn.net/changyanmanman/article/details/7482763 http://blog.csdn.net/changyanmanman/article/details/7611758
1、X$KSMSP的名稱含義
[K]ernal [S]torage [M]emory Management [S]GA Hea[P]
其中每一行都代表着shared pool中的一個chunk
我們看一下x$ksmsp的結構:
我們關注以下幾個字段:
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引起的.
在x$ksmsp.ksmchcls的分類中,還有兩外幾個分類,這幾個分類是R-free/R-freea/R-perm:
Connected to: Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production With the Partitioning option JServer Release 9.2.0.4.0 - Production
SQL> select count(*) from x$ksmsp; COUNT(*) ---------- 37138
可以知道shared pool裡面有chuck數量是:37138
SQL> select KSMCHCLS,sum(KSMCHSIZ) from x$ksmsp group by ksmchcls;
各個版本都不一樣,我在10g r1中查詢結果如下:
SQL> select KSMCHCLS,sum(KSMCHSIZ) FROM x$ksmsp group by ksmchcls;
已選擇6行。
沒有R-perm 類型的。
在10g r2中的結果如下:
7 rows selected.
這裡的R指的是reserved,也就是說這些Heap的資訊是和shared_pool_reserved_size相關的。
至于free/freeable/perm就無需解釋了。
2、V$SHARED_POOL_RESERVED
shared_pool_reserved_size的另外一個視圖展現是V$SHARED_POOL_RESERVED.
我們可以從這個視圖中獲得關于shared pool reserverd的資訊:
SQL> desc v$shared_pool_reserved
查詢總共有幾條記錄:
SQL> select count(*) from v$shared_pool_reserved ;
1
SQL> select *from v$shared_pool_reserved;
關于這些資訊的另外一個來源是X$KSMSPR内部表:
SQL> select ksmchcom,ksmchcls,sum(ksmchsiz) from x$ksmspr group by ksmchcom,ksmchcls;
這部分資訊和x$ksmsp視圖記錄的Reserved資訊是完全一緻的:
SQL> select KSMCHCOM,KSMCHCLS,sum(KSMCHSIZ) from x$ksmsp where KSMCHCLS like 'R%' group by ksmchcom,ksmchcls;
-The End-