チューニングが必要なSQLを洗い出す:Oracle SQLチューニング講座(4)(1/3 ページ)
本連載では、Oracleデータベースのパフォーマンス・チューニングの中から、特にSQLのチューニングに注目して、実践レベルの手法を解説する。読者はOracleデータベースのアーキテクチャを理解し、運用管理の実務経験を積んでいることが望ましい。対象とするバージョンは現状で広く使われているOracle9iの機能を基本とするが、Oracle 10gで有効な情報も随時紹介していく。(編集局)
前回までの記事でSQLチューニングを行うために必要な基礎知識を説明しました。今回は、チューニング対象とすべきSQLを、どのような観点から、どのように洗い出していくのかを説明していきます。
チューニング対象SQLの洗い出し
通常、アプリケーションでは多くのSQLが実行されています。SQLチューニングのステップは、実行されている多くのSQLの中から、チューニングの目標に合わせて、対象とするSQLを洗い出すことから始まります。
一般的に、表1の条件を1つ以上満たしているSQLは、チューニングによる改善が可能かどうかを検討する対象となります。まずは、これらのSQLを洗い出し、チューニングの最終目標を考慮して、対象とするSQLを決定していきます。
例えば、特定アプリケーションの処理速度の改善が目標の場合には、該当アプリケーション中で処理に時間のかかっているSQLに着目します。また、システム全体のスループット向上やシステム負荷(CPU、ディスクI/Oなど)の低減を目標とする場合には、多くのリソースを使用しているSQLや実行回数の多いSQLに着目します。
1実行当たりの実行時間が長いSQL | |
---|---|
ディスク読み取りブロック数が多いSQL | |
バッファの読み取り数が極端に多いSQL | |
実行回数が極端に多いSQL | |
表1 チューニング対象として洗い出すSQL |
対象SQLの洗い出し方法
チューニング対象とすべきSQLを洗い出す方法としては、以下の2つがあります。
- 動的パフォーマンスビューからSQLを抽出する方法
- アプリケーションのSQLトレースを取得する方法
アプリケーションが特定できている場合は、各SQLの解析時間、実行時間、実行計画などの情報を簡単に得ることができるSQLトレースの取得が最も有効です。取得したトレースファイルをフォーマットし、SQLを「処理時間」「読み取りブロック数」「実行回数」などの任意の順番に並べ替えることで、チューニング対象とするSQLを簡単に絞り込むことができます。
ただし、SQLトレースの取得は比較的負荷が高く、アプリケーションの処理速度に影響を与えることがあります。SQLトレースのオーバーヘッドが心配な場合や、アプリケーションが特定できていない場合には、動的パフォーマンスビュー(V$表)を使用する方法を検討してください。動的パフォーマンスビューでも、各SQLがインスタンス全体でどの程度リソースを使用していたかを確認することができます。
表2はそれぞれの方法の主な特徴とメリット/デメリットをまとめたものです。どちらの方法を使用するかは、チューニングの目的、取得する環境に合わせて選択するようにしてください。
動的パフォーマンスビュー | SQLトレース | |
---|---|---|
調査可能なSQL | ・ 現在共有SQL領域にキャッシュされているSQL ・ 使用するV$表 - V$SQL - V$SQL_TEXT - V$SQL_PLAN |
・セッションで実行されたすべてのSQL ・初期化パラメータSQL_TRACE=TRUEにすることで、起動後確立したすべてのセッションのSQL ・DBMS_SYSTEMパッケージを使用し、指定した別セッションのSQL |
主に確認できる項目 | - SQL - 累積CPU時間 - 累積処理時間 - バッファからの累積読み込みブロック数 - ディスクからの累積読み込みブロック数 - このSQLが実行された累積回数 - 実行計画 |
- SQL - CPU時間 - 処理時間 - バッファからの読み込みブロック数 - ディスクからの読み込みブロック数 - 実行計画 |
メリット | ・アプリケーションの処理速度に対する影響が少ない ・SQLで簡単に確認可能 |
・アプリケーション中で実行されている各SQLに関して、詳細な情報を取得可能 ・アプリケーションの処理速度がRDBMS側にあるか否かの切り分けに使用可能 |
デメリット | ・1回当たりの実行時間などは平均値しか取得できない ・メモリ上にキャッシュされているSQLの情報しか確認できない |
・トレースの取得、ファイルへの書き込みに伴うオーバーヘッドがある ・トレースファイル取得のためのディスク領域が必要 |
表2 動的パフォーマンスビューとSQLトレースの違い |
今回は、動的パフォーマンスビューを使用したSQLの洗い出し方法に焦点を絞り、対象SQLの具体的な洗い出しポイントや考慮点について、情報取得用SQLおよび取得結果例も含めて説明していきます。
Copyright © ITmedia, Inc. All Rights Reserved.