« 実録ネコ裁判 | メイン | まったりモード »

2005年09月17日

神の啓示

ネ申は私に試練を与えたもう。
その御心をひとつの殉教者に託し、
あまねく状況が状況を創る、
その御声に導かれるよう導かれるよう、
辿り着くべき場所へ辿り着く。




チューニングが必要なレベルで挙動が変わるのいい加減やめてくれませんか、マジで。
このDBには、南米ではばたいた蝶を見てNYの天気を予想するばりの洞察力が要る。
ブラックボックスの中身を把握でもしないと勝てそうもない。



リリース前に行っていた確認の一つ。
別段、心配するような確認ではなく、ちょっとデータを検索してファイルに書き出すだけの確認だった。
旧サーバでは問題なく動いているPerlスクリプトで、特別修正を行ってはいない。
平和に帰れるはずだった



突如ログファイに記録されるエラーが
「ORA-01652: 一時セグメントを拡張できません(128分、表領域TEMP01)」
マジかでもまぁ、追加すれば済む話か……多量のソートも掛かっているから、仕方ないのかも。


SQL> alter database add tempfile '/opt/oracle~' size 1024M;
と。

1Gほど追加して再度実行。
「ORA-01652: 一時セグメントを拡張できません(128分、表領域TEMP01)」
マジか。ていうか足りない分が全然変化してなくない?




ちょっとドタマにきたので「好きなだけもってけやゴルァ!」
って気分になる。
HDD容量には余裕があったので、どれくらい必要なのか見てみようということに。

SQL> alter database datafile '/opt/oracle~' autoextend on size unlimited;

一時表領域を無限に拡張可。
これで足りないと云うことはあるまい。物理的に食いつぶすまで。




そして三度、処理開始。
数分経過。データファイルのサイズは思った通りどんどん膨らむ。
2GB突破……ふむ、これくらいは。
3GB突破……少々多いか。
4GB突破…………そろそろ……
5GB突破……いやいや。検索結果は数百件程度だし
6GB突破……………………
7GB突破……マジで?



7GB食いつぶしておいて足りないなんてありえない。
処理を停めてパフォーマンスチェックに入る。木曜日はここでタイムアウト。


翌日、実行計画をチェックしてチェックして……愕然とする。
実行計画が微妙にかわってやがるいやそれはまぁ、いいんですけどバージョンの差異で、
どうして旧サーバの400倍近くデータ読み込んでるん?




そりゃ遅いよ。
一時表領域だって喰うさ。
SQLは同じでデータも同じ、Oracleのバージョンのみが違う。
どうすればいいんだ、これ




ふざけているのか?




全くどこをいじっていいのかわからない。
とりあえず実行計画の差異を埋めるためにSQL文にヒント(※Oracleオプティマイザの実行計画を矯正する機能)を埋め込み、
旧で使用されていたインデックスを使用するようにしてみる。




治った。




なんで?




疲れ果てたので進捗報告書いておうちかえりました。
_| ̄|○

投稿者 kagerou : 2005年09月17日 02:42

Twitter

この記事をTwitterでつぶやく

トラックバック

このエントリーのトラックバックURL:
http://scriptlife.hacca.jp/cgi-bin/MT/mt-tb.cgi/184

コメント

コメントしてください




保存しますか?