SQLが突然遅くなる原因と対応方法

ORACLE SQLが急に遅くなることがあります。

これにはいくつかの原因が存在します。
まずは慌てず、落ち着いて原因調査を行い対応していきましょう。

統計情報が古い

ORACLEがSQLを実行するとき、表の統計情報を元にどのようにしてデータを取得するか、実行計画という計画を作成します。

表の中のデータが増えたり減ったり、月末処理などで大量の更新がかかりデータの内容が大きく変わってしまったりすると表の統計情報が古くなっていることがあります。

そのとき、最適な実行計画が立てられず、SQLが突然遅くなることがあります。

そういった場合はSQLで参照している表の統計情報を取得してください。
そしてSQLを再度実行し直してください。実行中のSQLはどうにもできませんのでご注意ください。

OracleSQLの性能を左右する「統計情報」の中身

ORACLE表の統計情報の取得方法




実行計画が最適ではない

表の統計情報が最新の場合でも実行計画が最適ではない場合があります。

複雑なSQL、副問合せやネストが多いものはORACLEオプティマイザが作成した実行計画が最適でない場合があります。
ORACLEでも百発百中で最適な実行計画は立てられません。

こんなときは実行計画を最適なものに変更する必要があります。

SQLのチューニングをオススメします。

ただ、すぐにチューニングが出来ない場合にはORACLEチューニングアドバイザを使ってプロファイルを作ることや過去の実行計画を使うように設定するなど対処する必要があります。

OracleSQLに実装すべき3つのSQLヒント

Oracleのパフォーマンスを左右する待機イベント




リソース不足

本稼働後から数年経つとデータ量も増えていきます。

データの削除が適切に行われデータ量が一定に保たれているシステムをこれまで見たことはないです。
データ量が増えることにより、特にメモリ(SGA,PGA)の不足が発生します。

これによりSQLの実行が待ち行列を作り、突然遅くなることがあります。

この辺までくると、アプリをサクッと修正して完了とはいきません。
きちんとチューニングの知識を学んだ上で、リソースの増強を考えていきましょう。

>>おすすめのORACLE参考書まとめ

OracleDBのチューニング勉強方法

OracleMasterExpertパフォーマンス&チューニングに一ヵ月で合格した勉強方法




まとめ

業務アプリケーションで発生しがちな原因を列挙してみました。
ぜひこれを機会にORACLEの学習を進め、スキルアップしていきましょう!

【SQLでお困りの方にオススメ】
■SQLが遅くなる原因
・SQLが突然遅くなる原因と対応方法
・OracleSQLのレスポンスが遅い原因3つ
・JOINを使って表結合するとSQLが遅い!?
・SQLがパラレル実行されない原因

■SQLチューニングの基礎知識
・ORACLE SQLのヒントとは
・ORACLEのオプティマイザと実行計画について
・ORACLEのテーブルやインデックスの「統計情報」とは

■SQLチューニングの方法
・SLECT文が遅いときのインデックス作成によるチューニング方法
・Update文が遅いときのチューニング方法
・Delete文が遅いときのチューニング方法
・IN句をEXISTS句に置き換えするチューニング方法
・OR句の置き換えによるチューニング方法
・IN句の置き換えによるチューニング方法
・テーブルアクセスフルスキャンを無くしてチューニングする方法
・SQLでGROUP BYが遅いときのチューニング方法
・SQLのソート処理が遅い場合のチューニング方法

■表や索引の断片化対策
・プロが教えるORACLEの表や索引の断片化解消の見積り方法
・ORACLE表の断片化を解消する3つの方法

■SQLのチューニングの補足情報
・ORACLE SQLヒントの書き方
・SQLに複数のヒントの書き方
・OracleSQLに実装すべき3つのSQLヒント
・ORACLE表の統計情報取得日の確認方法
・「統計情報が古い」とはどういうことか
・ORACLE表の統計情報の取得方法

【自己学習したい方にオススメ】
・自宅で勉強用にORACLEデータベースを無償でダウンロードし構築する方法
・OracleMasterGold12cに一ヵ月で合格した勉強方法
・OracleMasterExpertパフォーマンス&チューニングに一ヵ月で合格した勉強方法
・手に職がない人はIT業界へ、オススメ資格と勉強方法
・OracleDBのチューニング勉強方法
・OraclePL/SQL勉強方法