今週唯一のトラブルシューティング

久しぶりのトラブル。処理遅延。


テストの時は1時間くらいで終わった処理が2時間経っても終わらず、
いつ終わるかもわからないので、プロセスをkillして、
他の処理を流しています、と。


センターに駆けつけて、SQLの実行計画をみてみる。悪くなさそう。
IO待ちとか?
STATSPACKが見れればいいんだけど、権限がない。
権限持ってるお客さんも今日はいない、と。
(RDBMSはOracle9iでコストベースオプティマイザ)


テーブルとインデックスのLAST ANALYZEDを見ても、
テストの時と変わっていない。


仕方がないので、12多重になっている処理の多重度を32に上げて実行。


確かに遅い。とにかく遅い。
SQLトレースを見ると、フェッチにすごい時間がかかっていて
経過時間とCPU時間がほぼ一緒。
物理IOもほぼ発生していない。


やりようがない。。
フェッチのサイズがデフォルトの10のままなので、
ALTER SESSION文でもう少しでかくしてあげれば
ちっとは早くなると思うけど、
以前早かったものが遅くなった理由にはならない。


30分くらい実行したところで、処理時間(フェッチした行数)から
算数したら、2時間半くらいで処理が終了しそうなので、
2時間半くらいなら運用的にも問題なさそうなので、
この処理はとりあえずこのまま終わらせて、
後続の他の似たような処理が動くまで待つ事に。


後続処理は早い。全然違う。CPU時間だけ。。
1行あたりに取得するブロック数もほぼ同じ。


さて、どうしたもんかなぁと思いつつ、
その処理自体はあと2〜3回動いて捨ててしまうプログラムらしいので、
まぁ、いいか、なんていう。


でも、気になる。
なんでなんだろう。


とりあえず、来月もウォッチだなぁ。