ページ)本連載では、Oracleデータベースのパフォーマンス・チューニングの中から、特にSQLのチューニングに注目して、実践レベルの手法を解説する。読者はOracleデータベースのアーキテクチャを理解し、運用管理の実務経験を積んでいることが望ましい。10gで有効な情報も随時紹介していく。前回「チューニングが必要なSQLを洗い出す」では、動的パフォーマンスビューを使用してチューニング対象となり得るSQLを洗い出す方法を説明しましたが、チューニングを行うためには、SQLの実行計画など、より詳細な情報が必要となります。今回は、これらの情報を取得する方法、また収集した情報の分析方法について説明していきます。SQL詳細情報の取得SQLチューニングを行う際に重要となる情報としては、SQLの実行計画や実行時のパフォーマンスに関する統計情報があります。これまでに説明してきたように、SQLの実行速度は、その実行計画によって大幅に異なってきます。そのため、SQL実行時の実行計画やSQLが使用するリソースなどを調査し、その実行計画が適切なものであるかを評価する必要があります。SQLチューニングに必要な情報を取得するにはいくつかの方法がありますが、代表的な以下の3つに関して説明します。表1は、各方法の特徴をまとめたものです。使用目的に応じて、適切な取得方法を選択してください。チューニングの効果をより正確に測るためには、該当アプリケーション、もしくはSQLのSQLトレースを取得します。SQLの実行計画を簡単に確認したい場合には、SQL*PlusのAUTOTRACE機能を使用するのが効率的でしょう。V$SQLなどで調査したSQLなど、過去に実行されたSQLの実行計画を調べるためには動的パフォーマンスビューを使用します。それでは、それぞれの方法について説明していきます。SQLトレース、TKPROFユーティリティの使用方法SQLトレースは、実行されたSQLの実行計画やパフォーマンス統計情報などをテキストファイルに出力する機能で、特定のセッション、もしくはインスタンスの全セッションの情報を取得できます。SQLトレースの出力結果は、そのままでは非常に分かりにくいため、TKPROFユーティリティを使用してファイルの内容を見やすい書式に整形します。SQLトレース、TKPROFユーティリティの実行手順それでは実際にSQLトレース、TKPROFユーティリティを使用して、SQLの詳細情報を取得する手順を説明します。下記手順はSQL*Plusからの実行例ですが、同様の文をアプリケーション中に埋め込むことで、アプリケーションで実行されるSQLのトレースを取得することも可能です。Net経由にてSQLトレースを取得する場合には、接続方法(専用サーバ接続、共有サーバ接続)によってトレースファイルの作成ディレクトリが異なりますので注意が必要です。TIMED_STATISTICS=TRUE;Oracle9i以降では、STATISTICS_LEVELパラメータの設定値が「ALL」または「TYPICAL(デフォルト値)」の場合には、TIMED_STATISTICSパラメータは「TRUE」に設定されるため、明示的な設定は必要ありません。SQL_TRACE=TRUE;セッションが終了、もしくは明示的にSQLトレースの取得を終了するまで、該当セッションで実行されるすべてのSQLに関してトレースが取得されます。AND⇒O_ORDERSTATUS='O';(注:⇒記号は表示の都合で折り返していることを表します)一度に大量のSQLを実行してSQLトレースを取得する場合には、その分のトレースファイルが出力できるだけの十分なディスク容量があることを確認してください。R8.1.6以降からMAX_DUMP_FILE_SIZEのデフォルト値はUNLIMITEDです)。sort=fchela(注:⇒記号は表示の都合で折り返していることを表します)トレースファイルの出力先ディレクトリに移動し、作成されたトレースファイルを整形します(対象となるトレースファイルは、SQLトレースを取得した時刻を基に特定してください)。TKPROFユーティリティは、トレースファイルを見やすいように整形する際に、さまざまなオプションを指定できます。大量のSQLがトレースファイルに含まれている場合には、オプションを指定することで、より効率よくチューニング作業を進めることができます。排除、そして「SORT」オプションでフェッチ時の経過時間順にSQLを並べ替えるというようにトレースファイルを整形しています。注1:リカーシブコールSQL文を処理するために、内部的に発行されるSQL文を指します。表の存在や権限のチェックなどを行うためのSQLなどがあります。表2に便利なオプションをまとめましたが、そのほかのオプションについては、マニュアル「データベース・パフォーマンス・チューニング・ガイドおよびリファレンス」を参照してください。説明EXPLAINTKPROFユーティリティ実行時の実行計画を出力するためのユーザー名/パスワードを指定するAGGREGATEDEFAULT:YESYESを指定した場合、同一のSQLは集計されて、1回だけ出力されるNOを指定した場合、SQL単位の集計は行われず、実行された回数分出力される。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。