社内SEの徒然なる日記

SQL遅延で夜間処理が異常終了!

<不吉なメール>

勤め先の環境は、以前に書いた通り(夜間バッチ処理エラーで緊急出動!)でして、夜間処理で何かがあれば、メールが飛んでくる仕組みです。

そして、今日も飛んできました。
...見なかったことに出来ないかなぁ。

勤め先は3月決算で、今日は年に一度の処理が実行される日だったりします。なので、もしかすると何かあるかなぁとは思っていたのですが、案の定出てしまいました。

悪い予感ほど、よく当たりますよね。

<調査開始!>

見なかったことにするのは責任感が許さない(社内に対応できるエンジニアが私しかいないので、どうせやらないといけないし)ので、諦めて出勤して原因調査を開始します。

すると、ある処理で10分以内には終わるはずの処理(SQL)が、3時間経過しても終了していません。
その結果、この処理の終了を前提とした別の処理が異常終了してしまい、障害連絡メールが飛んできたようです。

さて、どうしたものでしょうかね。

<原因究明>

とりあえず遅延が発生しているSQLの実行計画がどうなっているのか調べてみます。
調べ方は、いろいろあるとは思うのですが、今回は、プログラムからSQLを引っこ抜いて、Oracle SQL Developerで調べることにしました。

こんな感じですね。
SQLDeveloper.jpg

いろいろツールを使っているのですが、実行計画の確認ではこいつが一番のお気に入りです。

実行計画を確認したところ、PrimaryKeyでアクセスして欲しいところが、別のインデックスでアクセスされています。どうやら、これが原因のようです。

<対応開始>

とりあえず、終わる気配のないSQLを終了させます。

終了方法は、OBject Browserで実行中のセッションを切断する方法にします。
ジョブの殺し方もいろいろ考えられるでしょうが、結局は、Oracleで実行されているSQLを異常終了させるのが、最も手っ取り早いからです。

んで、問題のSQLにヒント句を追加して、実行計画を固定して、リランを実行。

後は、待つだけです。
実際には、関連するシステムが動作しないようにするとか、ユーザーからの問い合わせに対応するとか、いろいろありますけどね。

<復旧完了>

そんなこんなで、無事に復旧完了です。サービス開始時間から1時間程度足が出ましたが、まぁ、悪くない結果だと思います。

どっかでコーヒーでも飲んで、ゆっくりしてから帰りますかね。

<後書き>

Oracleに関連するソフトやツールって、Enterprise Manager、SQL Developer、Object Browserなど様々なものがあるのですが、正直、まともに使いこなせていません。

この記事だけでも、SQL Developerで実行計画の確認、セッションを殺すのにObject Browserと使い分けています。
この手の操作、全部ひとつのツールで出来るんでしょうけど、今一つ使い方が分っていません。使いこなすことが出来れば、もっと面白いことが出来ると思っているんですけど、憶えなくても仕事は出来てしまうとなると、なかなか手を出す気にならないんですよね。

もったいない話です。

スポンサードリンク

PageTop

コメント


管理者にだけ表示を許可する