Oracle上でトラブルになっているかどうか、カッコよく切り分けるためのテクニック データベースコンサルタントのノウハウちょい見せ

Oracle RDBMSなどのオラクル製品や各種インフラ技術(OS、ストレージ、ネットワーク)といった話題を取り上げます。著者は小田圭二、「門外不出のOracle現場ワザ」、「絵で見てわかるOracleの仕組み」、「絵で見てわかるOS/ストレージ/ネットワーク」などの著作もあります

ホーム > スポンサー広告 > Oracle上でトラブルになっているかどうか、カッコよく切り分けるためのテクニックホーム > DBA > Oracle上でトラブルになっているかどうか、カッコよく切り分けるためのテクニック

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ --/--/-- --:-- ] スポンサー広告 | トラックバック(-) | コメント(-)

Oracle上でトラブルになっているかどうか、カッコよく切り分けるためのテクニック

今回は主にOLTP系で使える、Oracleのトラブル切り分けテクニックの紹介です。

以後の説明に必要なため、まず、Oracleのアーキテクチャを説明します。Oracleには、接続処理用のリスナープロセスがあり、そのリスナープロセスが通信を受け付けて、その後サーバープロセスに引き渡します。サーバープロセスは、SQLを処理するプロセスです。SQLが処理されている間は、ずっと接続状態になっています。通常の設定(専用サーバー構成と言います)の場合、クライアント側の接続が切れない限り、対応するサーバープロセスも存在することになります。

トラブルには、大きくいくつかのパターンがあります。「接続できない」、「接続できたけどエラーでSQL処理できない」「ハングになった」「スローダウンした」「そしてトラブルはDBではない」の5つです。
「接続できない」場合、listener.logというファイルを探しましょう。リスナープロセスと通信はできたものの、結果的に接続できなかったのであれば、このファイルにエラーが書いてあるはずです(パラメータでログをオフにしていない限り)

つぎに、「接続できたけどエラーでSQL処理できない」場合です。この場合は、alert.logファイルに書いてあるはずです。ただし、一部のメッセージは書かれていないかもしれません。念のため、アプリケーション側のエラーも確認しましょう。

「ハングになった」「スローダウンした」の判定は、非常にやっかいです。まず、一般ユーザーでDBMSにログインできるかどうか確認しましょう(特権ユーザーはログインできてしまうことがあるためです)。

次に、v$sysstatでSQL実行数を見てみましょう
SELECT to_char(sysdate, 'MMDDHH24MISS')||','||NAME||','||VALUE
FROM V$SYSSTAT
WHERE NAME = 'execute count';
これで起動してからの累積値が見られます。私の場合、これを数秒から数十秒おきに数回叩きます。この値の増加が30秒で数回や十数回程度であれば、処理が来ていないか、処理されていない可能性が高いと言えます(DBMSが自分で実行するSQLもあるため、多少は発生します)。なお、「処理されていない」と言い切るためには、普段の負荷を把握しておきましょう。

次は、処理中(ハング含む)かどうかです。次のSQLを実行します。
SELECT to_char(sysdate, 'MMDDHH24MISS')||','||COUNT(*)
FROM V$SESSION
WHERE TYPE!='BACKGROUND' and STATUS='ACTIVE';
STATUSが'ACTIVE'なサーバープロセスが多数居る場合、サーバープロセスまで処理が届いたけど、その後、結果が返っていない。つまり、「DBサーバーより先のどこかに問題があるらしい」ということです。

なお、このSQLを実行しているサーバープロセス自身もactiveとしてカウントされますので、値は最低でも1以上です。これがずっと1であれば、処理されていないか、処理されていても一瞬で終わっているということです。

上記2つのSQLの結果(実行数とアクティブ)の関係はつぎのようにマトリックスで考えるとよいでしょう。
        アクティブが少ない   アクティブが多い
SQL数 少ない 単にSQLがきていない  おそらく詰まっている(ハング or スローダウン)
SQL数 多い   うまく処理できている  おそらく処理量が多いだけ(※)


※:普段よりSQL実行数が多い場合、限界を超えて、ボトルネックになっている可能性があります。ただし、普段どおりのSQL実行数でもアクティブが多い場合には、何か問題ありでしょう。

私は、「トラブルだ! 切り分けろ!」となったとき、上記の情報をすぐに確認して、「DB問題ありません」もしくは「DBまで処理が来ていません」もしくは「DBかDBより先に問題があるようです」とすぐに答えるようにしていました。効果的なのは実証済みです。これが現場ではものすごく重宝されます。応用すると、処理が再開されたときも「処理数上がってます。DBまで処理が届きました!」とか、いろいろな場面で活用できます。皆さんが、トラブルシューティングにおいて、ヒーローになれるかもしれません♪

なお、例外はバッチ処理などの、少数のプロセスが長々と処理をするシステムです。その場合は、そのサーバープロセスを詳細に分析しないと何とも判断できません。
スポンサーサイト
[ 2008/08/28 03:44 ] DBA | TB(0) | CM(0)
コメントの投稿













管理者にだけ表示を許可する
プロフィール

odakeiji

Author:odakeiji
小田圭二 日本オラクルのテクノロジーソリューションコンサルティング統括本部においてデータベースのコンサルタントをしている。今までのキャリアでは、社内教育部隊で、データベースやOS、ネットワークを教える経験を5年ほど積んだり、コンサル部門で主にDB(インフラ含む)のコンサルを10年程度経験した。また、コンサルタントとして、主に大規模ミッションクリティカルシステムを担当。社内では”火消し”とも呼ばれ、システムトラブルの火消しをいくつも担当していたこともある。
ポリシーは、「OracleもOS上で動くアプリケーションにすぎない。だから、OS、ストレージ、ネットワークを学ぶべき。アーキテクチャから考えろ」。
スキル面の興味は、アーキテクチャ、DBA、インフラ技術、教育、コンサル手法など。
本ブログのポリシーは「週に1回、DBAやインフラ担当者の役に立つ記事を書きたい」です(守れるだけ、守りたい・・・・)
なお、本ブログにおいて示されている見解は、私自身の見解であって、オラクルの見解を必ずしも反映したものではありません。ご了承ください。

私の主な著書の紹介です。もしよかったら、お役立てください。他にもオライリーなどがあります

●「絵で見てわかるOS/ストレージ/ネットワーク データベースはこう使っている」小田圭二 著
私のポリシーである”DBMSもOSの動くアプリケーションに過ぎない”に基づいて、OSとDBMSの関係、ストレージとDBMSの関係、ネットワークとDBMSの関係、を解説した珍しい書籍です。DBを学んでひと段落したら、DB使いもインフラ全体を意識しなければなりませんが、そのような人にお勧めです。企業ユーザー向けのIT本としては、2008年度翔泳社No1だとか(最後は出版社談)。

●「絵で見てわかるOracleの仕組み」 小田圭二 著
教育に携わる者としての私の思い「丸暗記するな。アーキテクチャを知るべき。絵で説明すべき」を具体化した、Oracleの入門書です。Oracle初心者向きですが、Oracleの基礎となる部分の動きを解説しているため、バージョンに依存せずに何年先でも使えます。逆に、本書の内容を理解せずに、ひたすら丸暗記すると応用力が身につきません。この本を読むだけで何かできるようになるわけではありませんが、アーキテクチャを身につけて、本当の技術力を身につける第一歩として欲しいと思っています。

●「44のアンチパターンに学ぶDBシステム」 小田圭二 著
本書は、企業のDBシステムの設計/構築から運用管理、プロジェクト管理までの各フェーズにおけるトラブル(失敗)事例について、アンチパターン(べからず集)とその回避策/防止策として解説するものです。チェックリストとして使っていただいても構いません。分かっていてもアンチパターンは避けられないことも多いものです(政治とか)。そういう方には、同じ仲間は多いのだなと再認識していただくための一服の清涼剤としていただければと思います。

●「門外不出のOracle現場ワザ」 小田圭二 他 著
一番最初に出た本です。結構とがった内容を扱っています。
・パフォーマンス分析の考え方(私の担当)
・性能テストや障害テストの仕方、設計の注意点(主に私が執筆)
・コストベースオプティマイザ(10gベース)のアーキテクチャ
・コネクションプーリング
最新のOracleの内容は含んでいませんが、今でも性能の考え方やオプティマイザの考え方は使えるはずです。オプティマイザをここまで解説している本を私は知りません。

●「続・門外不出のOracle現場ワザ」 小田圭二 他 著
「続」の名前の通り、次に出た本です。ちょっと尖り過ぎたかもしれません^^; でも本当に使う内容を選んだつもりです。一流になりたい・他の人と差をつけたい人にお勧めでしょうか。
・性能の良いSQLの書き方
・文字化けの仕組み
・障害(特に性能やハング)の分析・対応方法(私が執筆)
・障害をリアルタイムに分析・対処する方法(私が執筆)
・オプティマイザの使い方ノウハウ
・アップグレードのノウハウ

●「データベース」小田圭二 他 著
私にしては堅い本です。なんせ、共同執筆者が大御所の國友義久先生です。階層型DBMS、ネットワーク型DBMS、リレーショナル型DBMS、XMLDBMS、OO(オブジェクト指向)DBMS、DBMSの持つ機能、DBMSのセキュリティ、データベースの著作権、監査、モデリング、正規化といった内容を網羅しており、深い記述は無いものの、DB技術全体を抑えるのに向いている一冊です。ある程度技術力がついたエンジニアの方が、DB全体を振り返りたい(勉強したい)というときの最初の1冊としてお勧めです。



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。