
Oracle SQLチューニング講座(4)
チューニングが必要なSQLを洗い出す Page 1
株式会社アゲハ
亀田 明裕
2004/9/22
本連載では、Oracleデータベースのパフォーマンス・チューニングの中から、特にSQLのチューニングに注目して、実践レベルの手法を解説する。読者はOracleデータベースのアーキテクチャを理解し、運用管理の実務経験を積んでいることが望ましい。対象とするバージョンは現状で広く使われているOracle9iの機能を基本とするが、Oracle 10gで有効な情報も随時紹介していく。(編集局)
| 主な内容 --Page 1--
--Page 2--
・合計実行時間の長いSQL --Page 3--
・バッファ読み込みブロック数が多いSQL・ディスク読み込みブロック数が多い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を洗い出す方法としては、以下の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トレースの違い | ||
![]() |
| 図1 V$SQLとSQLトレースの使い分け |
今回は、動的パフォーマンスビューを使用したSQLの洗い出し方法に焦点を絞り、対象SQLの具体的な洗い出しポイントや考慮点について、情報取得用SQLおよび取得結果例も含めて説明していきます。(次ページへ続く)
| 1/3 |
| Index | |
| 連載 Oracle SQLチューニング講座(4) チューニングが必要なSQLを洗い出す |
|
| Page 1 ・チューニング対象SQLの洗い出し ・対象SQLの洗い出し方法 |
|
| Page 2 ・動的パフォーマンスビューを使用したSQLの洗い出し −合計実行時間の長いSQL |
|
| Page 3 −バッファ読み込みブロック数が多いSQL −ディスク読み込みブロック数が多いSQL −実行回数の多いSQL ・SQL全文の取得方法 |
|
| 連載 Oracle SQLチューニング講座 |
TechTargetジャパン
- やはりSELECT文は永遠のテーマです (2012/2/7)
Database Expertフォーラムの2012年1月のアクセスランキングをお届けします。定番の記事を一気に追い抜いてあの記事が…… - SELECT文で取り出したデータを加工して表示する (2012/1/25)
SELECT文で取り出したデータを対象に四則演算する方法など、データを見やすくする方法を解説します - 2012年は私たちが勉強会を盛り上げる! (2012/1/23)
2011年12月、データベース業界初の女子会が発足しました。そこで、女子会を盛り上げていってくれそうな2人にお話を伺いました - 複数の条件を指定してSELECT文を実行する (2012/1/13)
複数の条件を指定してSELECT文を実行する方法と、条件指定に必要な論理演算子、比較演算子の役割を解説します
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -

