共有プール領域に関する検証 その8
<共有プールに関する検証 その8> ペンネーム ダーリン
– 続・X$KSMSPについて --
前回取得した、X$KSMSP表の面白い見方をご紹介しよう。
前回”KSMCHPAR”カラムのデータを取得したが、今回はこれを利用する。
ここでは前々回まで使用していたダンプデータを使用するのでこれも用意しよ
う。
これまで、ダンプデータから、カーソルや、関連オブジェクトの情報を見てき
たが、これらのデータ内に “DATA BLOCKS:” で示される部分があったのを覚え
ているだろうか。
<抜粋> ********************************************************************* (子カーソル) DATA BLOCKS: data# heap pointer status pins change alloc(K) size(K) ----- -------- -------- ------ ---- ------ -------- -------- 0 81068d60 81c83fb8 I/P/A 0 NONE 1.06 1.64 6 814f8704 8108f3c4 I/-/A 0 NONE 4.36 5.13 ↑(※1) *********************************************************************
これらは、”DATA BLOCKS”という名のとおり、それぞれのデータの格納場所を
示しているように見える。そこで、前回使用したX$KSMSP表の”KSMCHPAR”
(※2)カラムのデータと、ダンプデータの”heap”(※1)をぶつけてみると、
以下のような結果となる。
********************************************************************* ↓(※2) KSMCHCOM KSMCHSIZ KSMCHCLS KSMCHPAR ---------------- ---------- -------- -------- library cache 560 freeabl 81068D60 library cache 560 recr 81068D60 library cache 560 freeabl 81068D60 sql area 252 freeabl 814F8704 sql area 436 freeabl 814F8704 sql area 256 freeabl 814F8704 sql area 256 freeabl 814F8704 sql area 252 freeabl 814F8704 sql area 256 freeabl 814F8704 sql area 412 recr 814F8704 sql area 256 freeabl 814F8704 sql area 256 freeabl 814F8704 sql area 252 freeabl 814F8704 sql area 292 freeabl 814F8704 sql area 252 freeabl 814F8704 sql area 252 freeabl 814F8704 sql area 256 freeabl 814F8704 sql area 256 freeabl 814F8704 sql area 256 freeabl 814F8704 sql area 252 freeabl 814F8704 sql area 296 freeabl 814F8704 sql area 256 freeabl 814F8704 *********************************************************************
さて、これは何を表しているのだろうか。
実は(上記の例では)カーソル情報が共有プールのどのエリアに存在している
のか、一目瞭然となったと見ることが出来る。
さらに、このカーソルについては、上記のように複数のチャンクに分割された
状態で共有プール上に存在することもわかる。
親カーソルや、関連オブジェクトについてはどうだろうか。
同様に見てみよう。
********************************************************************* (親カーソル) DATA BLOCKS: data# heap pointer status pins change alloc(K) size(K) ----- -------- -------- ------ ---- ------ -------- -------- 0 81851570 809b8d78 I/-/A 0 NONE 0.80 1.05 KSMCHCOM KSMCHSIZ KSMCHCLS KSMCHTYP KSMCHPAR ---------------- ---------- -------- ---------- -------- library cache 560 freeabl 0 81851570 library cache 520 recr 4095 81851570 *********************************************************************
********************************************************************* (関連オブジェクト) DATA BLOCKS: ↓(※5) data# heap pointer status pins change alloc(K) size(K) ----- -------- -------- ------ ---- ------ -------- -------- 0 81bffdb8 81bffc34 I/-/A 0 NONE 0.73 1.09 8 810961d0 81b1b1d8 I/-/A 0 NONE 1.67 1.70 10 81096274 80bd9cfc I/-/A 0 NONE 4.44 4.51 ↑(※4) KSMCHCOM KSMCHSIZ KSMCHCLS KSMCHTYP KSMCHPAR ---------------- ---------- -------- ---------- -------- library cache 560 freeabl 0 81BFFDB8 library cache 560 recr 4095 81BFFDB8 KGLS heap 1744 recr 4095 810961D0 KGLS heap 156 recr 4095 81096274 KGLS heap 2232 freeabl 0 81096274 KGLS heap 2232 freeabl 0 81096274 ↑(※3) *********************************************************************
上記のとおり、親カーソルと、関連オブジェクトに関しても共有プール上での
存在エリアを確認することが出来た。
それぞれの占有サイズは、”KSMCHSIZ”(※3)に示される、チャンクのサイズ
を合計することで求めることが出来る。これらの合計は、ダンプデータの
“size(K)”(※4)で現される部分の値と合致するはずだ。
ちなみに、”size(K)”の右となりにある”alloc(K)”(※5)も同様にデータサイ
ズを現しているようだが、”size(K)”との違いはなんだろうか。
これは、各チャンクには管理用のヘッダ部分(16byte)があり、これを除いた、
実際にデータとして利用できるサイズを表しているものと思われる。
(実際には、このサイズ(16byte)を差し引いた量よりさらに少ないため、こ
の他にも要因があると考えています。今後の検証テーマとさせてください。)
次回は、ご質問いただいた共有プールのフラグメントの見積もりについて。。
以上 相模川にタマちゃんはこないのだろうか 茅ヶ崎にて