AWR スナップショット + Oracle R Enterprise を組み合わせて、Oracle DB に関する障害(主にパフォーマンス系)の予兆検知ができないかを模索してみる予定です。
Oracle R Enterprise は、DB に格納されているデータを透過的に扱うことができますので、DB との親和性が高く、また、DB から取り出して集計したデータを再度 DB に格納することもできます。なお、統計の知識が浅いのでアドバイスやコメントをいただけると嬉しいです。
動機付け
Oracle DB を運用していく上で、
-
障害を事前に検知したい
- 異常なほど急激な待機時間の増減が見られないか?
-
システムの成長率を予測したい
-
待機時間は増加傾向にあるか?
-
限界はいつ頃訪れるか?
-
といった要望があると想定しています。
基本的なアプローチ
定期的(デフォルトでは 1 時間毎)に取得されている AWR スナップショットの情報をベースに、主に DB CPU や待機時間から外れ値の検出や今後の成長率を予測していきます。
予兆検知を考慮する上で、以下を前提条件とします。
-
RAC 環境の場合、各インスタンスには負荷が均等に掛かっている(アプリケーションパーティショニングなどで、インスタンス毎の負荷傾向が異なる場合は、各インスタンス毎に分析する必要があります。ここでは議論を簡略化するため、全インスタンスに均等に負荷が掛かっているとします。)
-
処理の負荷傾向は 24 時間を通してほぼ同じ傾向を示している(OLTP 系のシステムでは、1 日の特定の時間帯に負荷が集中する傾向があり、その傾向が大きく変化しないことを前提としています。)
アプローチ(1)
昨日までの AWR スナップショットから DB CPU を抽出して、箱ひげ図を出力します。出力された箱ひげ図と本日の DB CPU の傾向を比較し、外れ値になっていないかを確認します。連続して外れ値が現れた場合には、これまでと傾向が異なる状態と判断し、DBA に予兆検知を通知します。
このシステムでは、
-
18:00-19:00 に負荷のピークが来る傾向にある
-
4:00-5:00 が最も負荷が低い
といった傾向を把握できます。この結果と本日の DB CPU を照らし合わせることで、通常時と同様な傾向かを把握することができます。
Oracle Enterprise Manager を使用することで、リアルタイムに処理状況を把握することはできますが、過去の傾向からの比較は行いませんので、予兆検知は困難です。
アプローチ(2)
引き続き検討中...