パフォーマンス向上の最短コースを知る:Oracle SQLチューニング講座(1)(1/2 ページ)
本連載では、Oracleデータベースのパフォーマンス・チューニングの中から、特にSQLのチューニングに注目して、実践レベルの手法を解説する。読者はOracleデータベースのアーキテクチャを理解し、運用管理の実務経験を積んでいることが望ましい。対象とするバージョンは現状広く使われているOracle9iの機能を基本とするが、Oracle 10gで有効な情報も随時紹介していく。(編集局)
パフォーマンス・チューニング概要
「パフォーマンス・チューニング」という言葉を聞いて、頭を抱えるデータベース管理者(以下、DBA)や開発者の方は多いのではないでしょうか。「難しそうで、あまり深い知識はない」あるいは「つらくて、大変な作業」というイメージを持っている方もいると思います。
しかし、一方では「特にパフォーマンス・チューニングを意識していない」という意見も聞かれます。これは、近年の目覚ましいハードウェア技術の進歩によるものが大きいといえます。今日のハードウェアの性能は、高性能なCPU、大量なキャッシュを積んだ大容量ストレージや大量のメモリなど、一昔前のスーパーコンピュータ並みとなってきています。その強大なマシンパワーによって、以前ほど処理効率を気にしなくともそこそこのパフォーマンスが得られるようになったためか、効率が悪い処理が存在していることに気付かずに運用しているシステムも多いようです。実際、パフォーマンスが問題となったシステムを調査してみると、効率の悪い処理が山ほど見つかるケースも少なくありません。
もちろん、多少処理効率が悪かろうと、現行のパフォーマンス要件を満たしており、今後も負荷が増加しないシステムであれば、まったく問題ないでしょう。しかし、多くのシステムは年々データ量、ユーザー数が増加していく傾向にあります。例えば、インターネット・ショッピングを考えてみてください。このようなシステムでは「8秒ルール」や「3秒ルール」といったレスポンス時間が常に求められます。
効率化されていない処理が多く潜んでいるシステムの場合、当初は問題がなくても、取り扱い商品、顧客数が増えるにつれ、パフォーマンス要件を満たせなくなる可能性が非常に高くなってきます。レスポンス時間の遅延は、多くのユーザーの不満につながり、最悪の場合大事な顧客を失うことになりかねません。このようなシステムでは、パフォーマンスの良しあしが非常に重要です(図1)。
そこで本連載では、代表的なRDBMSであるOracleデータベースを使用して、パフォーマンス改善を最も期待できるSQLチューニング方法について、前提の知識や取得すべき情報とその解説とともに、遭遇する可能性の高いケース・スタディによる分析、対応手順を紹介していきます。
パフォーマンス・チューニングの目的とは?
具体的なSQLチューニングの話を始める前に、何を目的にしてパフォーマンス・チューニングを行っていくべきかを考えてみます。
データベースのシステム環境の多くは、データの変更やデータ量の増加、利用者数の増加、新しい機能の追加などによって、データベースの状態や使用状況は常に同じということはありません。そのため、以前は問題のなかった処理が、ユーザー数やデータ量の増加によって、求められるパフォーマンスをまったく満たさなくなってしまうということがよくあります。
そして、このような問題は、ハードウェアの増強、例えば高性能のCPUに載せ換えたり、CPU数、メモリを増やすことだけでは改善できない場合が多いのです。例えば、パフォーマンスの劣化原因が、非常に大きな表へのアクセスで索引が使用されず余分なアクセスが大量に発生している場合や、多くの利用者が同じデータにアクセスしてしまうような競合が発生している場合などが、それに当たります。
これでは、せっかくハードウェアの増強を行っても、まったく問題を解決できず、無駄な費用だけが発生したことになってしまいます。実際にパフォーマンスが悪化しているケースでも、予算などの問題で容易にハードウェアの増強ができる環境は非常に少ないものです。そこでまず、現在のシステム構成でパフォーマンス・チューニングを行わなければならないことがほとんどでしょう。
このような状況下では、現状を分析することで問題点を整理し、効果が最も大きなパフォーマンス・チューニング手法を選択して実施することが、最善の手段として挙げられます。適切なパフォーマンス・チューニングを行うことができれば、新たなハードウェアの増強の必要もなく、もしくは最小限の増強のみで、パフォーマンスの多くの問題に対処することが可能になります(図2)。つまりパフォーマンス・チューニングは、新たな投資の必要なく問題を解決できる、投資対効果の非常に高い手段であることを意味しています。
そこで、最終的なデータベースのパフォーマンス・チューニングの目的は、「限られたシステム・リソースの中で、最大限のパフォーマンス効果を出すこと」となります。
それでは次ページで、パフォーマンス・チューニングにおけるSQLチューニングの位置付け、SQLチューニングの手順について、実践的な見地から検討してみましょう。(次ページへ続く)
Copyright © ITmedia, Inc. All Rights Reserved.