
Oracle Dump - 日本エクセム株式会社 Oracle 技術情報
SQLチューニングのためには、そのSQLがどのように動いていて、データベースにどのように影響しているのか、を把握する必要があります。『MaxGauge』があれば簡単に状況が把握でき、適切なSQLチューニングができるようになります。
『MaxGauge』の資料はこちらから。
インデックスツリーダンプ
インデックスのツリー構造を取得します。
上記のDump内容の項目の意味は次の通りです。
・Node Type:branch/ leafノードかどうか
・DBA:ブロックアドレス。0x8405de2 138436066(16進数、10進数)
・Relative Position:親ノードからの相対的な位置(-1,0,1,2、…)
・Entry数:row = 全Entry(Deleted Entryを含む)、row = Real Entry(Deleted Entryを除く)
DBAをRelative File NumberとBlock Numberに変換する方法は以下の通りです。
インデックスツリーダンプを実行するプロシジャーを次のように作成して使用すると便利です。
Partitioned Indexの場合には、次のように特定のPartitionを指定することもできます。
ヒープダンプ
ヒープ構造を取得します。ヒープに関する障害(バグ)をトラブルシューティングするとき多く使用されます。
Level値の意味は以下の通りです。
・Level = 1: Top PGA
・Level = 2: Top SGA
・Level = 3: Top UGA
・Level = 8: Current Call
・Level = 16: User Call
・Level = 32: Large Pool
上のレベルの値には、次のようなLevel Bitを追加すると、最大5つのサブヒープまでDumpを実行します。
・0×10000000:最大5つのサブヒープを共にダンプ
・0x20000000:最大5つのサブヒープについて子サブヒープまでダンプ(Recursive)
つまり、次のようにヒープダンプを実行すると、
Top SGAと最大5つのサブヒープについて再帰的にヒープダンプを出力してくれます。ただし、サブダンプまでダンプを実行すると、ダンプファイルのサイズが非常に大きくなることがあることに注意してください。しかし、ほとんどのメモリリークの問題は、サブヒープレベルで発生するためサブヒープまでダンプを実行することを推奨します。
ヒープダンプは、次のような形式になります。
ヒープダンプの結果のうち、以下のようにds(Heap Descriptor)の値を持つ場合は、そのチャンク(chunk)がサブヒープを指すことを意味します。
サブヒープをダンプするためには次のような命令を使用します。
SYS@ukja10> oradebug dump heapdump_addr 1 0xa067600
Levelは、次のような意味を持ちます。
・Level=1:Data構造のみ出力
・Level=2:Data内容まで出力
Level2は非常に多くのデータを出力するので、パフォーマンスに大きな悪影響を与える可能性があるため、必要な場合にのみ使用します。ほとんどの場合、Level1だけで必要な結果を得ることができます。
ライブラリキャッシュダンプ
ライブラリキャッシュ構造を取得します。SQL カーソルParent/ Child)の構造を把握しようとするとき多く使用されます。
ハング分析
Oracle ハングが発生した場合, ハング分析に必要な情報を取得します。使用方法は、以下のようになります。
Levelによる出力については、以下の通りです。
・10 – すべてのプロセスをダンプします。(IGN状態)
・5 – レベル4 +待機チェーンに含まれるすべてのプロセスをダンプします。(NLEAF状態)
・4 – レベル3 +待機チェーン(LEAF、LEAF_NW、IGN_DMP状態)のリーフノード(ブロッカー)をダンプします。
・3 – レベル2 +ハング状態にあると考えられるプロセスのみをダンプします。(IN_HANG状態)
・1-2 – ハング分析出力のみ、プロセスダンプは全くありません。
RACで他の インスタンスとの連関された内容まで分析するためには次のような命令文を使わなければなりません。
ハング分析で生成されたダンプファイルの例は以下のようになります。
システム/プロセス状態ダンプ
システムやプロセスの現在の状況を取得します。 使用法は以下の通りです。
または
エラースタックダンプ
プロセスのエラースタックダンプを実行します。 スタックの情報加えて、PL / SQL、SQLなどの情報出力されます。
あるいは
出力結果は、以下のようになります。
ASHダンプ
SGAのASH(Active Session History)情報を取得します。
Levelは過去数分間の履歴を取得するかを指定します。もしlevel10に指定すると、過去10分間の情報を取得することになります。ASH情報はアクティブセッションのリストを保存するため、Oracle ハングのような現象が発生したとき、事後分析用途に有用です。
トレースファイルに記録されているダンプの内容の例は、以下のようになります。
SQLチューニングのためには、そのSQLがどのように動いていて、データベースにどのように影響しているのか、を把握する必要があります。『MaxGauge』があれば簡単に状況が把握でき、適切なSQLチューニングができるようになります。
『MaxGauge』の資料はこちらから。