連載
» 2004年09月22日 00時00分 公開

Oracle SQLチューニング講座(4):チューニングが必要なSQLを洗い出す (1/3)

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

[亀田明裕,株式会社アゲハ]
「連載:Oracle SQLチューニング講座」のインデックス

連載目次

 前回までの記事で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つがあります。

  1. 動的パフォーマンスビューからSQLを抽出する方法
  2. アプリケーションの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トレースの違い

図1 V$SQLとSQLトレースの使い分け 図1 V$SQLとSQLトレースの使い分け

 今回は、動的パフォーマンスビューを使用したSQLの洗い出し方法に焦点を絞り、対象SQLの具体的な洗い出しポイントや考慮点について、情報取得用SQLおよび取得結果例も含めて説明していきます。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。