検索
連載

パフォーマンス向上の最短コースを知るOracle SQLチューニング講座(1)(2/2 ページ)

本連載では、Oracleデータベースのパフォーマンス・チューニングの中から、特にSQLのチューニングに注目して、実践レベルの手法を解説する。読者はOracleデータベースのアーキテクチャを理解し、運用管理の実務経験を積んでいることが望ましい。対象とするバージョンは現状広く使われているOracle9iの機能を基本とするが、Oracle 10gで有効な情報も随時紹介していく。(編集局)

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

パフォーマンス・チューニングにおけるSQLチューニング

 それでは実際に、パフォーマンス・チューニングでのSQLチューニングの位置付けを見てみます。

 論理設計や物理設計の変更、Oracleインスタンスの初期化パラメータの変更などOracleデータベースのパフォーマンス・チューニング方法の中で、SQLチューニングは、最も効果が期待できる手段です。場合によっては、索引の使用の有無など、SQL文を最適化することによって、数倍から数百倍のパフォーマンス向上といった、そのほかの手段では実現不可能な結果をもたらすこともできます。

 SQLチューニングの処理は、Oracleインスタンスやハードウェア・リソースなどに密接にかかわっていて、パフォーマンス・チューニングの観点から見ると、これらのかかわり合いは、図3のような関係で表せます。この図の中で、SQLチューニングは最も下位に位置しています。下位の階層は、より上位の階層に対してパフォーマンスの影響を与えることを表しています。

図3 パフォーマンス・チューニング項目の相互影響度
図3 パフォーマンス・チューニング項目の相互影響度
  • OS(ハードウェア)リソースのチューニング
    CPUやメモリ、ディスク、ネットワークなど、OSリソースの最適化
  • Oracleインスタンス・チューニング
    SGA(システムグローバル領域)、PGA(プログラムグローバル領域)、各種バックグラウンド・プロセスなど初期化パラメータの調整
  • アプリケーションのチューニング
    プログラムロジックやアプリケーション・サーバの設定などのアプリケーションの最適化
  • オブジェクトのチューニング
    表や索引といったデータベース・オブジェクトの設定や設計の変更など
  • SQLチューニング
    SQL文のチューニング

 例えば、すでに稼働中のデータベース・システムでパフォーマンスが出ないケースを考えてみます。この場合、上層に当たるOracleデータベースの初期化パラメータを調整しても、最適な値を見つけるのは難しいでしょう。

 仮に非効率なSQLによって無駄なデータが数多くキャッシュにある場合などを考えてみてください。いくらキャッシュ関連の初期化パラメータを大きくしてもキャッシュの効果は少なく、メモリ・リソースを無駄にするだけで適切な対応とはいえません。そのため下位に当たるSQLに関して最適なチューニングを事前に実施して、それに合わせて初期化パラメータを調整することが、パフォーマンスを向上させる方法として望まれます。つまり、SQLチューニングを行うことが、そのほかすべてのパフォーマンス・チューニングの基礎となるのです。

SQLチューニングの手順

 SQLのチューニングを行うには、もちろんチューニングの対象となるSQLが決まっていなければなりません。しかし、実際のDBAに届くユーザーからの問い合わせの内容は、「使用しているアプリケーションなどの処理が遅い」といったように、具体的に何が遅いのかが判明しておらず、SQLの部分が遅いのかどうかが分からない、といったことが少なくありません。そこで、SQLチューニングを行うに当たって、実際に行うべき手順の概略が図4になります。

図4 SQLチューニングを行うまでの手順の概略
図4 SQLチューニングを行うまでの手順の概略

手順1

 最初に、パフォーマンスの問題に直面しているユーザーから、「何の処理を行っているのか」「処理にどのくらい時間がかかっているのか」などといった状況報告と、「システム形態やアプリケーションの種類」などといった環境を確認します。

手順2

 次にCPU負荷や過度のスワップ処理の発生、ネットワーク負荷などのシステム・リソースに問題がないか、アプリケーションに問題がないかなどを確認することで、問題点の切り分けを行います。これらシステムリソース全体に問題がない場合や、特定のOracleプロセスがシステムリソースを使用してるのが明確な場合などでは、SQLやインスタンスといったOracle側に問題があると判断できます。

手順3

 Oracle側の問題がSQLにあった場合、必ずSQLチューニングの目標を決定します。SQLチューニングは目標を定めないと終わりのない作業になってしまうため、「レスポンスタイムが何秒以下」といった明確なゴールを決めておきます。また、SQLチューニングの作業にかけられる時間は、スケジュールなどにより限られていることが多いため、チューニングを行うべきSQLの選択、例えばCPUに負荷をかけているSQL、物理アクセス量が多いSQLなどといった作業の優先順位付けも併せて決定しておきます。

手順4

 そして実際の処理の間に、SQLの詳細情報の取得を行います。また、先に説明したように、SQLのチューニングはOracleインスタンスやOSリソースの状況にもかかわってくるため、Oracleの稼働状況や、データベース・サーバのシステム・リソース情報も併せて取得します。

手順5〜7

 その後、情報を分析、適切なSQLチューニングを実施し、目標に達するまで情報取得とチューニングを繰り返します。


 今回はSQLチューニングの目的と意味、チューニングを行うまでの手順の概略を紹介しました。次回はSQLチューニングを行うに当たって必要な基礎知識として、データ・アクセス方法、オプティマイザに関して説明します。(次回に続く)


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る