共有プール領域に関する検証 その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)を差し引いた量よりさらに少ないため、こ
の他にも要因があると考えています。今後の検証テーマとさせてください。)

次回は、ご質問いただいた共有プールのフラグメントの見積もりについて。。

以上 相模川にタマちゃんはこないのだろうか 茅ヶ崎にて