Oracle Databaseの性能を分析する上で、Statspackは非常に有用なツールです。
特に、「spreport.sql」 を使って出力されるレポートは、どの処理がボトルネックかを可視化するための強力な材料になります。
この記事では、Statspackでスナップショットを取得済みであることを前提に、レポート作成の方法と実行例、確認すべきポイントまでを解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
✅ 記事で解説する内容
spreport.sqlの実行方法- スナップショットIDの調べ方
- レポートの出力先と保存形式
- よく見る項目の紹介
🧾 1. spreport.sql とは?
spreport.sql は、2つのスナップショット(開始と終了)を指定して、その期間のOracleインスタンスの統計情報を比較・分析レポートとして出力するSQLスクリプトです。
$ORACLE_HOME/rdbms/admin/spreport.sql
このスクリプトをSQL*Plusで実行することで、Statspackレポート(プレーンテキスト形式)が作成されます。
🔍 2. スナップショットID(snap_id)の確認方法
まず、レポート作成の対象となるスナップショットIDを確認しましょう。stats$snapshot 表に記録されています。
SELECT snap_id,
TO_CHAR(snap_time, 'YYYY-MM-DD HH24:MI') AS snap_time
FROM stats$snapshot
ORDER BY snap_id DESC;
📌 出力例:
| SNAP_ID | SNAP_TIME |
|---|---|
| 120 | 2025-04-04 10:00 |
| 119 | 2025-04-04 09:00 |
| 118 | 2025-04-04 08:00 |
🖥️ 3. spreport.sql の実行方法
📌 手順
- SQL*Plus で
PERFSTATユーザーまたはSYSDBAでログイン
sqlplus perfstat/perfstat
- スクリプトを実行
@?/rdbms/admin/spreport.sql
- 以下のように 開始と終了のスナップショットID を尋ねられます。
Enter value for begin_snap: 119
Enter value for end_snap: 120
- レポートファイルの出力ファイル名を入力(またはEnterでデフォルト)
Enter report name: report_119_120.lst
- レポート生成完了!
Report written to report_119_120.lst
SQL> conn perfstat/perfstat
接続されました。
SQL> SELECT snap_id,
2 TO_CHAR(snap_time, 'YYYY-MM-DD HH24:MI') AS snap_time
3 FROM stats$snapshot
4 ORDER BY snap_id DESC;
SNAP_ID SNAP_TIME
---------- ------------------------------------------------
6 2025-04-06 18:00
5 2025-04-06 17:00
4 2025-04-06 16:00
3 2025-04-06 15:00
2 2025-04-06 14:00
1 2025-04-06 13:00
6行が選択されました。
SQL> @?/rdbms/admin/spreport.sql ★
SQL> Rem
SQL> Rem $Header: rdbms/admin/spreport.sql /main/14 2017/05/28 22:46:11 stanaya Exp $
SQL> Rem
SQL> Rem spreport.sql
:
SQL> set echo off feedback off pagesize 60 newpage 1 recsep off;
Instances in this Statspack schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB Id Inst Num DB Name Instance Host
----------- -------- ------------ ------------ ------------
2960846808 1 V19 v19 restart
Using 2960846808 for database Id
Using 1 for instance number
Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed. Pressing <return> without
specifying a number lists all completed snapshots.
Listing all Completed Snapshots
Snap
Instance DB Name Snap Id Snap Started Level Comment
------------ ------------ --------- ----------------- ----- --------------------
v19 V19 1 06 4月 2025 13:0 5
0
2 06 4月 2025 14:0 5
0
3 06 4月 2025 15:0 5
0
4 06 4月 2025 16:0 5
0
5 06 4月 2025 17:0 5
0
6 06 4月 2025 18:0 5
0
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
begin_snapに値を入力してください: 3 ★開始位置を指定
Begin Snapshot Id specified: 3
end_snapに値を入力してください: 4 ★終了位置を指定
End Snapshot Id specified: 4
Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is sp_3_4. To use this name,
press <return> to continue, otherwise enter an alternative.
report_nameに値を入力してください: sp01.txt ★レポート名を指定
Using the report name sp01.txt
:
init.ora Parameters DB/Inst: V19/v19 Snaps: 3-4
End value
Parameter Name Begin value (if different)
----------------------------- --------------------------------- --------------
audit_file_dest /u01/app/oracle/admin/v19/adump
audit_trail DB
compatible 19.0.0
control_files +DATA/V19/CONTROLFILE/current.261
.1157469593
db_block_size 8192
db_create_file_dest +DATA
db_name v19
diagnostic_dest /u01/app/oracle
dispatchers (PROTOCOL=TCP) (SERVICE=v19XDB)
local_listener LISTENER_V19
nls_language JAPANESE
nls_territory JAPAN
open_cursors 300
pga_aggregate_target 382730240
processes 300
remote_login_passwordfile EXCLUSIVE
sga_target 1157627904
undo_tablespace UNDOTBS1
-------------------------------------------------------------
End of Report ( sp01.txt )
SQL> exit
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0との接続が切断されました。
[oracle@restart ~]$ ls
sp01.txt ★カレントディレクトリに出力
[oracle@restart ~]$
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
📂 4. レポートファイルの保存先と形式
- 保存形式:プレーンテキスト(
.lst) - 保存場所:SQL*Plusを起動したカレントディレクトリ
- 例:Linuxなら
~/, WindowsならC:\app\oracle\product\...\BINなど
- 例:Linuxなら
📌 ファイルはテキストエディタでそのまま閲覧可能です。
👀 5. レポートの見どころ(ざっくり)
Statspackレポートは情報量が非常に多いですが、特に以下の項目を最初に確認するとよいでしょう。
| セクション名 | 内容 | チェックポイント |
|---|---|---|
| Top 5 Timed Events | 時間がかかった上位5つのイベント | CPUやI/O待ちの多さを確認 |
| Instance Efficiency Percentages | キャッシュの効率など | ライブラリキャッシュやバッファキャッシュの命中率 |
| SQL ordered by Gets/Reads/Executions | 負荷の高いSQL文 | 調査対象のSQL文があるかどうか |
| Load Profile | 平均処理量など | Redo生成量、物理読み取り数など |
📘 テキスト図:spreport.sqlの流れ
【spreport.sql 実行イメージ】
┌────────────────────┐
│ stats$snapshot表のsnap_id確認 │
└────────┬──────────┘
▼
┌────────────────────┐
│ SQL*Plusでspreport.sql実行 │
└────────┬──────────┘
▼
┌────────────────────┐
│ 開始・終了snap_idを指定 │
└────────┬──────────┘
▼
┌────────────────────┐
│ レポートファイル(.lst)出力 │
└────────────────────┘
✅ まとめ
| ポイント | 内容 |
|---|---|
spreport.sql はスナップショット差分の性能レポートを生成するスクリプト | |
| 必要なのは「開始」と「終了」の snap_id | |
| 出力はプレーンテキストで、すぐに開いて確認可能 | |
| 最初は「Top 5 Timed Events」や「SQLの統計情報」に注目するとよい |
[参考]
Oracle® Databaseパフォーマンス・チューニング・ガイド 19c




コメント