前回(9/4)に引き続き、Oracle の性能問題に対する調査方法についてのセミナーに参加させていただきました。
- 「実習セミナー:DBにて発生しているスローダウンを調査しよう」 | oracletech.jp
今回のコンテンツは、DBのスローダウン(全体的に処理が遅延)のケースを扱います。よくあるケースですので、今回の調査を一度でも経験しておけば、実際の現場でも必ず役に立つものと思います。
- 前回までのレポート
講師は PS ソリューションズ 倉重さま。2年ほどの業務経験の中で、Oracle Master Platinum 11g や Database Certified Support Engineer を取得されたとのこと。
今回のお題は、ある時間帯に業務遅延(障害)が発生しました。手元にある正常時と障害時の statspack レポートと Active Session ログをもとに原因を調査しましょうというもの。 今までと同様、次の順番で演習が進みました。
- CPU 使用率を確認
statspack レポートのInstance Activity Stats
(システム統計情報)セクションのCPU used by this session
から次の式で算出。Oracle の CPU 使用率(%) = per Second の値 / CPU の core 数
ここでの数値は Oracle が使用した CPU の値であるため、OS 全体に対するものではないことに注意。それらは別途 vmstat などのコマンドで確認する必要があるとのこと。 - セッション数を確認
Active Session ログからアクティブなセッション数を確認。なお、最近のシステムはコネクションプーリングを使用しているので、接続総数ではなくアクティブなセッションの数に着目するとのこと。 - 負荷量と処理量を確認
statspack レポートのLoad Profile
(システムの負荷特性)セクションで大まかに確認できる。Executes
- SQL の全実行回数(=DML文)(execute count
)Transactions
- コミットとロールバックの回数(=更新の回数)(user commmits
+user rollbacks
)Redo size
- 生成された REDO ログのサイズ(=書込量)(redo size
)Logical reads
- 論理読み込みされたデータブロック数(=読込量) (session logical reads
)
- 待機イベントの発生状況を確認
statspack レポートのTop 5 Timed Events
(合計待機時間が長かった上位5つ) セクションで確認。障害発生時間帯は、正常時には見られない I/O 関連のイベントが見受けられました。 - REDO ログファイルへの書き込み時間を確認
statspack レポートのWait Events
(サーバプロセスの待機イベント)セクションで該当する I/O 待機イベントのTotal Wait Time
を確認。
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 read
と db file scattered read
の違いは図解で載っていますが、上記コラムを読んだ方がスッキリとするわたしは読解力が足りませんね。もっとマニュアル読みこなし力を上げなければと思います。
- パフォーマンス・ビューを使用したインスタンスのチューニング - Oracle Databaseパフォーマンス・チューニング・ガイド 11gリリース2(11.2)
- パフォーマンス・ビューを使用したインスタンスのチューニング - Oracle Database パフォーマンス・チューニング・ガイド 10gリリース2(10.2)
今回の演習は今までよりは難易度が低いとのことでしたが、結局私はすべての項目に自信を持って答えることが出来ず、まだまだだなと思いました。次回の演習は1月に開催予定とのことで、そこでまた勉強させて貰いつつ、それまでにはもう少し勉強していこうと思いました。
0 件のコメント:
コメントを投稿