motogp fun

motogp ファンによる、モトgp 結果、モトgp日程を報告するブログ、ガジェットネタも

Oracleのパフォーマンスチューニングにヒント句

Windows Server 2003の延長サボートが終わるので、サーバーをWindows Server 2008R2に移行しました。
(何故か2012じゃない)
一緒にDBもOracle10gからOracle11gR2に変更。

バージョンが変わると問題が色々発生しますが、大きな障害は無く無事切替完了。
ところが、移行から1週間後。
ある業務の検索が異常に遅いとクレーム。

Access+Oracleのクラサバシステム)

元々条件次第で10~20秒ほど必要な処理なので、サーバーが混雑しているだけでは?と当初は回答。(現に早朝や夜間はチョット遅いかな~ぐらいのレスポンス)

とは言え、実際に確認すると、これが本当に遅い。
1分~2分は普通で、もっと遅い事も。


オラクルのパフォーマンスチューニング記事をググって試しても、改善できず。
悩んでいたら、お客様に、以前別のシステムでヒント句使って対処したって情報を教えてもらい試すことに。

ヒントって何だよ、と思いつつも、発行しているSQLにコメント記載。

 strSQL = "SELECT /*+ OPTIMIZER_FEATURES_ENABLE('10.2.0.3') */" '--

コメントでバージョン10gのルール適用してね?とDBエンジンに教えるそうな。
この記述で見事、改善。
解決したからいいけど、なんだかしっくりこない、新しく作るテーブルの検索にわざわざ10g指定はしないと思うし・・・
f:id:motagp:20150605074429j:plain

 

他にもPL/SQLで書いている夜間処理が4時間かかってたので、ヒント句連発で対処。2分に短縮(嘘でしょ)

この時は、沢山あるSELECT文に片っ端からヒント句追加したけど改善できず、最終ステップのINSERT文にヒント入れたら改善しました。
一個だけで良かったみたい。

 

バージョンアップって大変ですね。

 

 
[追加]
2か月後、早くなった筈のバッチ(ストアド)が2時間半に拡大。
今度は片っ端からコメント入れたヒント句をInsertの場所だけ残して削除。
結果は30分に短縮。
Oracle10gの時もこの程度の時間だったので、改善しています。
11gって学習するのか?

 以上