2011/10/29

Oracle実習セミナー行ってきました(Part4)

前回(9/4)に引き続き、Oracle の性能問題に対する調査方法についてのセミナーに参加させていただきました。

講師は PS ソリューションズ 倉重さま。2年ほどの業務経験の中で、Oracle Master Platinum 11g や Database Certified Support Engineer を取得されたとのこと。

今回のお題は、ある時間帯に業務遅延(障害)が発生しました。手元にある正常時と障害時の statspack レポートと Active Session ログをもとに原因を調査しましょうというもの。 今までと同様、次の順番で演習が進みました。

  1. CPU 使用率を確認
    statspack レポートの Instance Activity Stats(システム統計情報)セクションの CPU used by this session から次の式で算出。
    Oracle の CPU 使用率(%) = per Second の値 / CPU の core 数
    ここでの数値は Oracle が使用した CPU の値であるため、OS 全体に対するものではないことに注意。それらは別途 vmstat などのコマンドで確認する必要があるとのこと。
  2. セッション数を確認
    Active Session ログからアクティブなセッション数を確認。なお、最近のシステムはコネクションプーリングを使用しているので、接続総数ではなくアクティブなセッションの数に着目するとのこと。
  3. 負荷量と処理量を確認
    statspack レポートの Load Profile (システムの負荷特性)セクションで大まかに確認できる。
    • Executes - SQL の全実行回数(=DML文)(execute count)
    • Transactions - コミットとロールバックの回数(=更新の回数)(user commmits + user rollbacks)
    • Redo size - 生成された REDO ログのサイズ(=書込量)(redo size)
    • Logical reads - 論理読み込みされたデータブロック数(=読込量) (session logical reads)
  4. 待機イベントの発生状況を確認
    statspack レポートの Top 5 Timed Events(合計待機時間が長かった上位5つ) セクションで確認。障害発生時間帯は、正常時には見られない I/O 関連のイベントが見受けられました。
  5. REDO ログファイルへの書き込み時間を確認
    statspack レポートの Wait Events(サーバプロセスの待機イベント)セクションで該当する I/O 待機イベントの Total Wait Time を確認。
以上の手順で調査した結果、障害時間帯には I/O 関連の待機イベントによる待機時間が大幅に増加していることがわかり、I/O 処理が遅延していることはわかりましたが、与えられている情報からは根本原因については不明とのこと。

statspack レポートをもう少し読み進めると、10g から Oracle に触れた私にとって初めて見かける Rollback Segment Stats セクションに正常時の倍近い数のロールバックセグメント情報が気にかかったので懇親会で講師に質問させていただいたところ、「UNDO セグメントへの大量書込があるならば、それと同じだけ REDO への書込もあるはずだけど、今回はそれは見受けられなかったから」と論破されてしまいました。。。まだまだ勉強不足です。

あと、普段ほとんど待機イベントを見ることが無いので、db file sequential read については、いつも一瞬迷います。全表操作の時だっけ?と。ここについては書籍『絵で見て分かる Oracle の仕組み』(p12)で次のようなコラムがありました。

「db file scattered read」は、シーケンシャル読込ですから、複数ブロックを読み込みます。Oracleはブロック単位でデータをメモリ上に配置します。複数のブロックは連続しない(分散した)箇所に置かれます。そのため、"scattered"と表示されています。それに対して「db file sequential read」は、単一ブロック読込なので、読み込んだデータ(1ブロック)は当然メモリ上で連続します。Oracleのメモリ上、連続しているので"sequential"と表示されています。
また、マニュアルにも db file sequential readdb file scattered read の違いは図解で載っていますが、上記コラムを読んだ方がスッキリとするわたしは読解力が足りませんね。もっとマニュアル読みこなし力を上げなければと思います。

今回の演習は今までよりは難易度が低いとのことでしたが、結局私はすべての項目に自信を持って答えることが出来ず、まだまだだなと思いました。次回の演習は1月に開催予定とのことで、そこでまた勉強させて貰いつつ、それまでにはもう少し勉強していこうと思いました。

0 件のコメント:

コメントを投稿