共有プール領域に関する検証 その4
<共有プールに関する検証 その4> ペンネーム ダーリン
– V$SQLAREA と 親カーソル --
前回までは、V$SQLAREA表を使ってSQLの情報を取得してみたが、ではその
V$SQLAREA表自体はどのような構成になっているのだろうか。
今回はV$SQLAREA表を詳しく見てみよう。
V$SQLAREA表は共有プールに存在するSQLについての統計情報を見ることの出来
るビューで、ひとつのSQLにつき1レコードが存在する。
ではその内訳は、というと、、、何のことかお分かりだろうか。
そう、カーソル。
V$SQLAREA表は1SQLで使用するカーソルの情報を集計して表現するが、内部的
には1つのSQL(HASH_VALUEの単位で)に複数のカーソルが存在する。
これらは、親カーソル1つとその子カーソルという形で表現され、カーソルが
ひとつしか存在しない場合でも、最低1つずつの親カーソルと子カーソルが存
在している。
この(子)カーソル単位で統計情報を現しているビューはV$SQL表だ。
このビューでは、子カーソル単位でSQL情報を見ることが出来る。
実は、これら親カーソル/子カーソルの関連をメモリ上で垣間見ることが出
来る。
ちょっとメモリ情報を取得してみよう。
まず、メモリ上で追いかける対象のSQL文を発行しておく。
SQL> connect scott/tiger SQL> select * from emp;
続いて、以下のコマンドを発行し、初期化パラメータ”user_dump_dest”で指
定されたディレクトリに作成されるダンプファイルを見てみよう。
SQL> alter session set events 'immediate trace name library_cache level 4';
以下は、出力されたダンプファイルの抜粋である。
************************************************************************* LIBRARY OBJECT HANDLE: handle=821e121c <------(※2) name=select * from emp <------------(※1) hash=b382f8a6 timestamp=08-06-2002 09:41:20 <------(※3) namespace=CRSR flags=RON/KGHP/TIM/PN0/SML/[12010000] kkkk-dddd-llll=0000-0001-0001 lock=N pin=0 latch=0 lwt=821e1234[821e1234,821e1234] ltm=821e123c[821e123c,821e123c] pwt=821e124c[821e124c,821e124c] ptm=821e12a4[821e12a4,821e12a4] ref=821e1224[821e1224, 821e1224] lnd=821e12b0[821e12b0,821e12b0] LOCK OWNERS: lock user session count mode flags -------- -------- -------- ----- ---- ------------------------ 82451088 82c9e4dc 82c9e4dc 1 N [00] LIBRARY OBJECT: object=809b8cf4 type=CRSR flags=EXS[0001] pflags= [00] status=VALD load=0 CHILDREN: size=16 child# table reference handle ------ -------- --------- -------- 0 809b8e88 8079344c 819443ec DATA BLOCKS: data# heap pointer status pins change alloc(K) size(K) ----- -------- -------- ------ ---- ------ -------- -------- 0 81851570 809b8d78 I/P/A 0 NONE 0.80 1.05 *************************************************************************
“name”と示された部分にSQL文が表示してあり、先ほど発行したSQL文が確認
できる。(※1)
今回は簡単なSQL文を発行したため、間違えることはないと思うが、SQL文を特
定したい場合はV$SQLAREAの”ADDRESS”や、”HASH_VALUE”の値を使用して検索す
るとすぐに見つけることが出来る。
“ADDRESS”の値で検索する場合は、上記の”handle”(※2)の値に、また、
“HASH_VALUE”の値で検索する場合は、16進数に変換した値が”hash”(※3)に、
それぞれヒットする。
また、ここで検索された情報は、”namespace=CRSR”や、”type=CRSR”となって
いることから、カーソル情報であることがわかる。
では、この情報は親カーソルか子カーソルか?
結論から言うと、親カーソルである。子カーソルの情報と並べてみればなんと
なく違いはわかるが、簡単な見分け方は、handle(※2)を検索してみる方法
だ。親カーソルの場合は他に存在しない。
では、子カーソルの情報はどうやって見つけるか。
同じダンプファイル内に出力されているので、皆さん探してみてください。
もっとも意表をついた探し方を教えてくれた読者の方には、素敵なグッズが用
意されているかも。
それは次回のお楽しみ。
以上 帰省渋滞をどうやって避けようか頭がいたい 茅ヶ崎にて