Oracleのパフォーマンスが落ちたときにやるべき3つのこと

Oracleに限りませんが、日々のデータ増加により徐々にデータベースのパフォーマンスがおちてくることがあります。アプローチとしては様々にありますが、「まずはコレ」という対処方法を3つ挙げます。

パフォーマンスが落ちてきた際に、まずはこの3つを試します。私の経験上、ほとんどコレで解決できます。コレで解決できない場合は、個別のケースになりますので次のステップになります。今回は「まずはコレ」というこのファーストステップをご紹介します。

pc1 (2)

 

1.SQLをチューニングする

まずはパフォーマンスが低下している原因を追求します。遅いのはどのSQLか?これを特定します。次に特定したSQLがインデックスを使用しているか確認します。パフォーマンスが低下したSQLはインデックススキャンかどうかがキーポイントです。インデックススキャンではなくフルスキャンの場合は当然遅くなります。インデックスを使用するようSQLをチューニングします。インデックススキャンかフルスキャンかの調べ方はこちらを参照下さい。さらりと書きましたがこのチューニングはそれなりのスキルが必要ですよ。どのようにすればインデックススキャンをするのか?これをわかっている必要があります。

2.インデックスを見直す

遅いのはデータベース設計に問題があるかもしれません。1で問題のSQLを特定した際、インデックススキャンをしていなかったらインデックススキャンするようインデックスを見直します。新たにインデックスが必要な場合は新しくインデックスを追加します。不要なインデックは削除します。データ更新により断片化しているかもしれないので場合によってはインデックスを再作成します。このインデックスの張り方がキーポイントです。データベースが探しやすいように索引をつけてあげましょう。

3.クライアントではなくサーバーで処理する

1でSQLを見直しますが、いくらSQL自体が速くても何度も発行していては本末転倒です。よくあるのが、クライアント側での多重ループ。ループ内でSQLを発行するとループの数だけ遅くなります。それが物理的に別の地区にあるサーバーへアクセスする場合などはなおさらです。どうしてもループ内でSQLを発行しなければならないようなケースはサーバー側で処理するように変えます。OracleでいうとPL/SQLで実現できます。サーバー側で処理すること

 

まとめます。データベースが遅い・・そんなときはツール使って分析したり手広く調査しがちですが、まずはシンプルに3つの対策を試みます。

  • SQLのチューニング
  • インデックスの見直し
  • サーバーで処理させる

これだけである程度のパフォーマンス改善が見込めます。「これだけ」とはいえ、もちろんこの中には細かなテクニックが多々あるのですが、それはまた別の機会にでも。

 

ティークリエイトブログのこの記事が読まれています