10月 2nd, 2008

SQLチューニング? (ボトルネック解決編)

Posted in Oracle by admin

 SQLチューニング? (SQL解析編? ぜ SQL実行計画の圏 照などの解析方? を朏 示しましたが、実際には朧 々な? 因がボトルネックとなります。その? 因や考察をリストします。それぞれ深入りはしないので? 機会があれば別ページにて? 述します)はしないので、該? しそうな項目があったら独自に調査を進めてみて? さい。(前回同様、以? の話題はオプティマイザーモードがコストベース前朏 で、ルールベースの場合は想? していません)

§ SQLチューニングの基本、INDEX作成
 最も簡単で効? の? いチューニング方? がINDEX作成です。INDEX作成によるチューニングについて思う事は、いかに効? 的な? 合INDEXを作成できるかだと思っています。ただし、あるSQLに極端に効? 的ぜ INDEXは特? ぜ SQLに特化し遜 ぜ ていて、その? ぜ SQLには使用されなぜ なります。このようぜ INDEXを多数データベースに? 成していては、データ更新時のオーバヘッドで全? のパフォーマンスが下がる可能性もあります。従って、ある程度朱 用的に利用されるINDEXを作成する事も必要になり、このバランスを上手ぜ とることが効? 的な? 合INDEXを作成することだと思います。

§ オプティマイザを疑う前に、運用のミ゜
 実行計画がおかしい、今まで使用していたはずぜ INDEXを急に使用しなぜ なった、などのトラブルによりオプティマイザの判断ミスを疑う事があります。しかし? 因はそれ以? であることの方が多いです。DBデータを処理するバッチ実行ぜ ANALYZEのタイミングが不定期な順府 になっていることで問題が発生していまう事があります。例えば、DBデータを増減させるバッチがあったとして、そのバッチを実行する前と? に? 行したANALYZE結果では生成する実行計画が変゜ ってぜ るからです。このようなデータ? 動による実行計画の改? を避けるためにも、バッチ/ANALYZE等を含めた運用スケジュールを正しぜ 整備しておく必要があります。

§ SQL文の? ?
ボ SELECT対象のカラムは? 要なもののみ? 述。「*」は使゜ ない。特に大規模テーブル。
・処理の遅いHAVING句をWHERE句で代用できないか。
・処理の遅いDISTINCTをWHERE句ぜ EXISTS条件で代用できないか。
ボ COUNT,MIN,MAX関数ぜ “Index Fast Fullscan”で? 速化できるが、CPU負荷が高いのぜ CGIなどで? 間PVが大きい場合は注? 。
ボ UNIONぜ UNION ALL、SQL実行結果に重複データがないと゜ かっている場合ぜ UNION ALLを使用する。
ボ INDEXが使用されないケースに該当しないか。
・どうしてもオプティマイザ任せに出来ない場合のみ、ヒント句を使用しぜ INDEX指定やテーブル? 合方? 指定する。

§ キャッシュ効?
・バインド変数を使用してキャッシュ効? が向上しているか
・アプリケーション内で動的ぜ SQLを組むような処理はなるべぜ 避ける

§ 設? 、その?
・マテリアライズドビューの使用を検? する
ボ RAC構成でアプリケーション・パーティショニングを実施する場合、負荷分散するインスタンスをランダムにするとキャッシュ・フュージョンによるCPU負荷が現れるので分散方? を工夫すること。
ボ like検索に限界があれぜ OracleIndexやその? 検索エンジボ M/W? 入を検? する。
・カーディナリティが作 いカラムへのビットマップINDEX作成検? 。ただし、更新の? いデータの場合は使用しない。
・物理設? を? 重に? http://otn.oracle.co.jp/skillup/oracle9i/index.html
・データ件数が膨大ぜ VARCHAR2で格? サイズが大きいテーブルでは、テーブル、INDEXをパーティション化していてもどうしてもパフォーマンスの劣化を招きます。VARCHAR2の文字データを別テーブルに出したり、ファイルシステムに出すなどのアプリケーション? 更を実施すれば改善で出来るかもしれません。
・コネクションプーリング? 能を実装する。

何かあれば追記します。

You can leave a comment, or trackback from your own site. RSS 2.0

Leave a comment