検索
連載

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

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

PC用表示 関連情報
Share
Tweet
LINE
Hatena

動的パフォーマンスビューを使用したSQLの洗い出し

 SQLの洗い出しのために使用する動的パフォーマンスビューは、主にV$SQL、V$SQL_TEXT、V$SQL_PLANの3つで、これらは共有SQL領域に保持されているSQLの情報を表示します。この共有SQL領域は、SQLを再利用するための情報がキャッシュされる領域となります。実行されたSQLの情報は必ずこの領域にキャッシュされますが、空き領域が不足した場合、新しいSQLのために、実行頻度が低いSQLの情報が追い出されてしまいます。そのため、この方法は、これまで実行されたすべてのSQLの情報を取得できるわけではない点に注意してください。

 必要な情報は、直接SELECT文で確認することもできますし、また、一部の情報は、Oracleが標準で提供しているSTATSPACKユーティリティを使用することでも取得可能です。STATSPACK自体の説明については、別の機会に譲ります。

 表3は、SQL調査に使用するV$表の列名、意味となります。ここで紹介したV$SQL_PLANは実行計画を確認するビューとなりますので、次回説明します。

ビュー名 主な格納情報 主な列名 列値の意味
V$SQL ・SQLの先頭1000bytes
・SQLの累積リソース使用状況
SQL_TEXT SQLの先頭1000bytes
SORTS SORTの回数
FETCHES FETCHの回数
EXECUTIONS 実行回数
USERS_EXECUTING 現在実行中のユーザー数
PARSE_CALLS 解析コールの回数
DISK_READS ディスク読み込み数
BUFFER_GETS バッファ読み込み数
ROWS_PROCESSED SQLが戻す行数
CPU_TIME 処理に使用したCPU時間(マイクロ秒)
ELAPSED_TIME 処理に使用した経過時間(マイクロ秒)
ADDRESS ほかのViewとの結合に使用
HASH_VALUE ほかのViewとの結合に使用
V$SQL_TEXT ・SQLの全文 SQL_TEXT 64bytes単位で分割されたSQL
PIECE 分割されたSQLの断片番号
ADDRESS ほかのViewとの結合に使用
HASH_VALUE ほかのViewとの結合に使用
V$SQL_PLAN ・SQLの実行計画 OBJECT_NAME 実行計画中の表、索引名
OPERATION 実行計画オペレーション
OPTIONS 実行計画オペレーションのオプション
OPTIMIZER オプティマイザのモード
DEPTH 実行計画のTreeの深さ
ADDRESS ほかのViewとの結合に使用
HASH_VALUE ほかのViewとの結合に使用
表3 SQLの調査に使用する主なV$表

合計実行時間の長いSQL

 V$SQLを参照して、対象となるSQLを洗い出すには、リスト1に示したSQLを実行します。ORDER BY句の条件を変更することで、目的に合わせて、洗い出し条件を変更できます。合計実行時間が長いSQLを洗い出す場合には、ORDER BY句の条件に“elapsed_time”を指定します。なお、例ではトップ10を表示していますが、最終行のrownumの指定を変更することで、出力する件数を変更することが可能です。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 出力例を見ると、ELAPSED_TIME列の値が「186.913533秒」であることを確認できます。このSQLはEXECUTIONSが「3」となっているため、1回の実行当たり「約62秒」(≒186.91353/3)かかっていると推測されます。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る