RAC環境におけるロックダウンに関する考察 その3
<RAC環境におけるロックダウンに関する考察 その3>
ペンネーム ちょびひげ
今回からOracle 10g のロックダウン統計を見ていきます。
■10g ではx$bh 表からx_to_null のカラムが廃止されています。
実際にSQL文を実行してみるとエラーとして返ってきます。
SQL> l 1 select count(*) cnt,lru_flag,sum(x_to_null) 2 from x$bh 3* group by lru_flag SQL> / select count(*) cnt,lru_flag,sum(x_to_null) * 行1でエラーが発生しました。: ORA-00904: "X_TO_NULL": 無効な識別子です。
■10g でのロックダウンの見方
それでは、10g の場合にはどのようにロックダウンの統計を見るのでしょうか。
実は9i release 2から以下の新しいパフォーマンスビューが追加されています。
v$segstat
v$segment_statistics
2つの違いはv$segment_statistics はv$segstatに、
・オーナ名
・オブジェクト名
・テーブルスペース名
が追加されている点で、基本的な内容に違いはありません。
■ロックダウンに関連する情報
実際に内容を見てみると以下のような統計情報が取得出来ます。
これらの情報はv$sysstat でも見ることが可能ですが、v$segstatではオブジ
ェクト単位に情報の参照が出来る部分がすごいところです。オブジェクト単
位に見られなければチューニングが出来ませんから全く無意味です。
SQL> l 1 select statistic_name , sum(value) 2 from v$segment_statistics 3* group by statistic_name SQL> / STATISTIC_NAME SUM(VALUE) --------------------------- ---------- ITL waits 0 buffer busy waits 3900 db block changes 1668608 gc buffer busy 180 gc cr blocks received 8711 gc current blocks received 12012 logical reads 7632208 physical reads 44455 physical reads direct 1 physical writes 42898 physical writes direct 108 row lock waits 310 segment scans 81 space allocated 7864320 space used 5272976
注意する点は、
この表にはインスタンス起動時からの全てのオブジェクトの統計情報が累積
値で格納されています。X$BH のX_TO_NULLはデータベースバッファに載って
からの累積値でした。
この中で、Write/Write の競合を表す統計情報は
“gc current blocks received”(カレントブロック受取り回数)です。
これは、文字通り他のインスタンスからカレント・モードでブロックを取得
した際にカウントアップされます。
???
ちょっと混乱して来た読者の方もいると思いますが、もう一度ロックダウン
とは何かを考えると、
(1)Write-Writeの競合が発生 (2)書き込みでロックを保持していたノードでロックダウン(ロック解放) (3)書き込みでブロックを要求しているノードにブロックを送信 (4)書き込みでブロックを要求したノードの"gc current blocks received" (カレントブロック受取り回数)がカウントアップ
つまり、”gc current blocks received”はロックダウンが発生した統計情報
ではなく、ロックダウンを発生させた数で、X_TO_NULL とは逆の意味となる
ので注意する必要があります。
■オブジェクト毎のロックダウンをさせた数
SQL> l 1 select object_name, statistic_name , value 2 from v$segment_statistics 3 where statistic_name like 'gc %' SQL> / OBJECT_NAME STATISTIC_NAME SUM(VALUE) -------------- ------------------------------ ---------- ITEM gc buffer busy 0 ITEM gc cr blocks received 0 ITEM gc current blocks received 81 TEST gc buffer busy 0 TEST gc cr blocks received 0 TEST gc current blocks received 0 STOCK gc buffer busy 1 STOCK gc cr blocks received 602 STOCK gc current blocks received 603 ORDERS gc buffer busy 8 ORDERS gc cr blocks received 1 ORDERS gc current blocks received 146 ・ ・ ・ ・
インスタンス起動時からの全てのオブジェクトの統計値が累積値として見る
ことが出来ます。ただし、環境によってはトンでもない量のレコードが検索
されるので、このビューにアクセスするにはちょっとした工夫が必要になり
ます。次回はちょっとした工夫を行ってv$segment_statisticsを見ていきま
す。
——
補足1
——
“gc cr blocks received”は読取一貫性ブロック、つまりCRブロックを取得し
ているので、Write/Read の競合になります。また、”gc buffer busy”に関し
ては別の機会に検証します。
——
補足2
——
今回出てきた”gc ~” のgc はglobal cacheの略ですが、
Oracle9iR2 のv$segment_statistics の統計情報は以下のように”gc”とは略さ
れずに”global cache” となっています。
・
global cache cr blocks served
global cache current blocks served
・
・
以上、つけまいがウィルスを蒔き散らす茅ヶ崎にて