71
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

STATSPACKの取得方法について

71
Last updated at Posted at 2025-12-16

はじめに

本記事をご覧くださりありがとうございます。

今回は、STATSPACKのレポートを取得する方法について解説していきます。

STATSPACKとは

STATSPACKとは、Oracleデータベースの性能問題を調査・分析する為のツールです。

通常レポートと詳細レポートが存在しており、それぞれ下記の特徴があります。

・通常レポート
spreport.sqlを使用して取得する。
主な目的は、システム全体のパフォーマンス把握。
インスタンス統計、待機イベント、Top SQLなどの情報が得られる。

・詳細レポート
sprepsql.sqlを使用して取得する。
主な目的は、特定SQLの詳細分析。
SQLテキスト、実行統計、実行計画、リソース使用状況などの情報が得られる。

性能問題を調査する場合、どのSQLが原因なのか確認するために、詳細レポートの取得を行うことが有効です。
しかし詳細レポートを取得するためには、SQLの識別子である「OLD_HASH_VALUE」の情報が必要になります。
この情報は通常レポートで確認することができるため、まずは通常レポートの採取を行います。

通常レポートを取得する

通常レポートを取得するには、対象のサーバに接続し、「spreport.sql」を実行します。
実行すると、下記に沿ってコマンドが進んでいきます。
①取得したスナップショットの一覧が表示される
②「begin_snapに値を入力してください:」と表示される
③「end_snapに値を入力してください:」と表示される
④「report_nameに値を入力してください」と表示される

②と③で、「いつからいつまでの通常レポートを取得するのか」を決定するため、
まず①で表示された一覧の中で、「Snap Started」と「Snap Id」の記載を確認します。
「Snap Started」の列にはスナップショットの日時が記載されており、
同じ行の「Snap Id」にはスナップショットのIDが記載されています。

今回は例として、2025/10/5の12:00~13:00の調査を行いたい場合を説明します。
「spreport.sql」を実行して、一覧の一部が下記だったとします。

Snap Id Snap Started
10000 2025/10/5 11:30
10001 2025/10/5 11:45
10002 2025/10/5 12:00
10003 2025/10/5 12:15
10004 2025/10/5 12:30
10005 2025/10/5 12:45
10006 2025/10/5 13:00
10006 2025/10/5 13:15

この場合、12:00のSnapIdは10002となるため、
②「begin_snapに値を入力してください:」には10002を入力します。

13:00のSnapIdは10006となるため、
③「end_snapに値を入力してください:」には10003を入力します。
※②と③の値はこの後詳細レポートを取得する際にも使用するため、メモなどに控えておきましょう。

④では通常レポートの名前を入力します。
具体的に決まりはありませんが、日時を名前に含めておくと後で確認する際に楽になります。
今回はEドライブ直下に保存すると仮定して、「E:\spreport_20251005_1200_1300.txt」と入力します。

これで通常レポートの取得は完了です。

通常レポートからOLD_HASH_VALUEを選ぶ

次に、取得した通常レポートからOLD_HASH_VALUEを選びます。
※OLD_HASH_VALUEは10桁の数字で記載されています

その際に見る箇所としておすすめなのは下記3つです。

・SQL ordered by CPU
このセクションは、CPU使用時間が多い順にSQL文を並べたものです。
CPUリソースを多く消費しているSQLを特定する際に役立ちます。

・SQL ordered by Elapsed Time for DB
このセクションは、SQLの実行にかかった経過時間(Elapsed Time)が多い順にSQL文を並べたものです。
実行時間が長いSQLを特定することで、ユーザー体感の遅延やバッチ処置の遅延の原因を探るのに役立ちます。

・SQL ordered by Gets
このセクションは、論理読み取り(Buffer Gets)が多い順にSQL文を並べたものです。
メモリ上のデータアクセスが多いSQLを特定する際に役立ちます。

この3つの項目でそれぞれ上位に表示されているSQLのOLD_HASH_VALUEを使用することで、性能問題の調査に役立つ詳細レポートを取得できる可能性が高まります。

詳細レポートを取得する

OLD_HASH_VALUEも選んだところで、いよいよ詳細レポートを取得します。

詳細レポートを取得するには、対象のサーバに接続し、「sprepsql.sql」を実行します。
①取得したスナップショットの一覧が表示される
②「begin_snapに値を入力してください:」と表示される
③「end_snapに値を入力してください:」と表示される
④「hash_valueに値を入力してください:」と表示される
⑤「report_nameに値を入力してください」と表示される

見ての通り、④のhash_valueを入力する手順が増えているくらいで、
それ以外は通常レポートを取得する手順と同じです。

②③の値は、通常レポートを取得した時と同じSnapIdを入力すればOKです。
④は先程調査した「OLD_HASH_VALUE」の中から1つを入力します。
「OLD_HASH_VALUE」1つごとに詳細レポートを取得することになるので、
「OLD_HASH_VALUE」の数だけ「sprepsql.sql」を実行する必要があります。

⑤の名称には、「E:\sprepsql_20251005_1200_1300_1234567890.txt」のように、通常レポートの名称の付け方に「OLD_HASH_VALUE」の値を付け足した名称にするのがおすすめです。

これで詳細レポートを取得することができました。

おわりに

今回はStatsPackのレポート取得について解説しました。
Oracleデータベースの性能問題調査に役立てて頂ければ幸いです。

ご覧頂きありがとうございました。

71
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
71
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?