Oracle Statspack 使い方:26ai Free (PDB) 環境でのインストールと自動取得設定

26ai

Oracle Statspack は、Standard Edition (SE2) や最新の Oracle Database 26ai Free 環境において、パフォーマンス分析を行うための強力な無料ツールです。 AWR (Automatic Workload Repository) が使えないライセンス環境でも、Statspack を使えばデータベースの稼働状況を時系列で可視化できます。

本記事では、Oracle Database 26ai Free 環境を使用し、CDB/PDB 構成における Statspack のインストール手順、1時間ごとのスナップショット自動取得設定、そして基本的なレポート作成方法を解説します。

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

結論:26ai Free でも Statspack は使える

先に結論と要点をまとめます。

  • 利用可否:Oracle Database 26ai Free でも過去バージョン同様に問題なく動作します。
  • 注意点CDB$ROOT へのインストールは非サポートです。必ず PDB (プラガブル・データベース) に接続してインストールする必要があります。
  • 最短手順
    1. 対象の PDB へ接続 (alter session set container = ...)
    2. 専用表領域を作成 (PERFSTAT 用)
    3. @?/rdbms/admin/spcreate を実行
    4. @?/rdbms/admin/spauto で自動取得を有効化

この記事を読めば、最新の 26ai 環境でもコストをかけずにプロフェッショナルな DB 性能分析基盤を構築できるようになります。

Statspack とは? AWR との違い

初心者向けに簡単に解説します。

Statspack の概要

Oracle 8i 時代から存在する、パフォーマンス統計情報を取得・蓄積するツールです。 特定の時点(スナップショット)間の差分を計算し、「どの SQL が重いか」「どの待機イベントが発生しているか」をレポート化します。

AWR との違い(重要)

Enterprise Edition (EE) で使える AWR は非常に便利ですが、Diagnostics Pack という有償オプションが必要です。 一方、Statspack は Standard Edition や Free 版でも追加費用なしで利用可能です。 ※ 26ai Free は開発者向けライセンスですが、Statspack の使用制限はありません。

手順1:事前準備と PDB への接続

マルチテナント環境 (CDB/PDB) では、Statspack は PDB 単位 でインストールします。 CDB$ROOT (コンテナ・ルート) にインストールしようとするとエラーになるか、正しく動作しません。

まずは対象の PDB を確認し、接続を切り替えます。

-- 現在のコンテナを確認
SHOW CON_NAME

-- PDBの一覧を確認 (26ai FreeのデフォルトPDB名を確認してください。例: FREEPDB1)
SHOW PDBS

-- PDBへ切り替え (重要!)
ALTER SESSION SET CONTAINER = FREEPDB1;

-- 切り替わったことを再確認
SHOW CON_NAME

PERFSTAT ユーザー用表領域の作成

インストールスクリプト内でデフォルト表領域を聞かれます。SYSAUX を使うことも可能ですが、データ肥大化を防ぐため、専用の表領域を作成することを強く推奨します。

-- 表領域の作成例 (パスは環境に合わせて変更してください)
-- OMF(Oracle Managed Files)有効環境なら datafile 指定は省略可
CREATE TABLESPACE perfstat_ts
  DATAFILE SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE 2G;

-- 一時表領域の確認 (通常は TEMP が存在します)
SELECT tablespace_name FROM dba_temp_files;

手順2:Statspack のインストール (spcreate)

PDB に接続した状態で、インストールスクリプト spcreate.sql を実行します。

-- sysdba権限で実行
CONN / AS SYSDBA
-- 再度 PDB に接続されているか確認 (再接続でCDB$ROOTに戻る場合があるため)
ALTER SESSION SET CONTAINER = FREEPDB1;

-- インストールスクリプト実行
@?/rdbms/admin/spcreate

実行中に以下の 3点 を対話形式で入力します。

  1. PERFSTAT ユーザーのパスワード: 任意のパスワードを入力 (例: perfstat)
  2. デフォルト表領域: 先ほど作成した perfstat_ts を入力
  3. 一時表領域: temp を入力

これらが完了すると、自動的に spcusr.sql (ユーザー作成), spctab.sql (テーブル作成), spcpkg.sql (パッケージ作成) が呼ばれ、インストールが完了します。 最後に「No errors」と表示されれば成功です。

補足:もしインストールに失敗した場合は、@?/rdbms/admin/spdrop で削除してから再実行してください。

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

手順3:スナップショットの自動取得設定 (1時間ごと)

Statspack は「点」と「点」の差分を見るツールなので、定期的にスナップショットを取得する必要があります。 Oracle が提供している spauto.sql を使えば、1時間ごと に取得するジョブ (DBMS_JOB) を簡単に登録できます。

-- PERFSTAT ユーザーで接続
CONN perfstat/perfstat@localhost:1521/freepdb1

-- 自動取得用スクリプトの実行
@?/rdbms/admin/spauto

-- 登録されたジョブの確認
SELECT job, next_date, next_sec, interval, what FROM user_jobs;

JOB_QUEUE_PROCESSES の確認

DBMS_JOB を動かすには、初期化パラメータ job_queue_processes が 0 より大きい必要があります。

SHOW PARAMETER job_queue_processes
-- 0 の場合は設定変更 (例: 4)
ALTER SYSTEM SET job_queue_processes = 4 SCOPE=BOTH;

手順4:取得データの確認とレポート作成

スナップショット取得状況の確認

データが蓄積されているか確認するには STATS$SNAPSHOT ビューを見ます。

-- 取得済みのスナップショット一覧
SELECT snap_id, snap_time, snap_level 
FROM stats$snapshot  ORDER BY snap_id;

実行例

SQL> alter session set nls_date_format='YYYY/MM/DD HH24:MI:SS';
SQL> SELECT snap_id, snap_time, snap_level
2 FROM stats$snapshot ORDER BY snap_id;

Snap Id SNAP_TIME SNAP_LEVEL
--------- ------------------- ----------
1 2026/01/20 22:54:15 5
2 2026/01/20 23:00:00 5
3 2026/01/21 00:00:00 5
4 2026/01/21 01:00:02 5
11 2026/01/21 02:00:02 5
12 2026/01/21 03:00:00 5
13 2026/01/21 04:00:00 5
14 2026/01/21 05:00:01 5
15 2026/01/21 06:00:00 5
16 2026/01/21 07:00:00 5
17 2026/01/21 08:00:00 5
18 2026/01/21 09:00:00 5
19 2026/01/21 10:00:00 5
20 2026/01/21 11:00:00 5
21 2026/01/21 12:00:00 5

手動で今すぐスナップショットを取りたい場合は以下を実行します。

EXEC statspack.snap;

パフォーマンス・レポートの作成

問題が発生した時間帯の Begin Snap IDEnd Snap ID を指定してレポートを出力します。

-- PERFSTAT ユーザーで実行
@?/rdbms/admin/spreport
  1. Begin Snapshot Id: 開始時点の ID を入力
  2. End Snapshot Id: 終了時点の ID を入力
  3. Report Name: 出力ファイル名 (デフォルトでOK)

出力された .lis ファイル (テキストファイル) をエディタで開けば、待機イベントや高負荷 SQL を確認できます。

取得したstatspack

[oracle@26ai-single admin]$ cat sp01.lst

STATSPACK report for

Database DB Id Instance Inst Num Startup Time Release RAC
~~~~~~~~ ----------- ------------ -------- --------------- ----------- ---
1491844267 FREE 1 20-Jan-26 21:12 23.0.0.0.0 NO

Host Name Platform CPUs Cores Sockets Memory (G)
~~~~ ---------------- ---------------------- ----- ----- ------- ------------
26ai-single Linux x86 64-bit 1 1 1 3.5

Snapshot Snap Id Snap Time Sessions Curs/Sess Comment
~~~~~~~~ ---------- ------------------ -------- --------- ------------------
Begin Snap: 2 20-Jan-26 23:00:00 2 8.5
End Snap: 3 21-Jan-26 00:00:00 2 8.5
Elapsed: 60.00 (mins) Av Act Sess: 0.0
DB time: 0.06 (mins) DB CPU: 0.05 (mins)

Cache Sizes Begin End
~~~~~~~~~~~ ---------- ----------
Buffer Cache: 496M 480M Std Block Size: 8K
Shared Pool: 496M 512M Log Buffer: 4,192K

Load Profile Per Second Per Transaction Per Exec Per Call
~~~~~~~~~~~~ ------------------ ----------------- ----------- -----------
DB time(s): 0.0 0.8 0.00 0.37
DB CPU(s): 0.0 0.6 0.00 0.29
Redo size: 2,522.3 1,816,055.2
Logical reads: 14.4 10,381.0
Block changes: 2.9 2,075.0
Physical reads: 0.0 0.0
Physical writes: 0.2 131.2
User calls: 0.0 2.0
Parses: 0.8 575.6
Hard parses: 0.1 36.4
W/A MB processed: 0.0 7.6
Logons: 0.0 2.0
Executes: 1.5 1,094.6
Rollbacks: 0.0 0.0
Transactions: 0.0

Instance Efficiency Indicators
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Buffer Nowait %: 100.00 Redo NoWait %: 100.00
Buffer Hit %: 100.00 Optimal W/A Exec %: 100.00
Library Hit %: 94.67 Soft Parse %: 93.68
Execute to Parse %: 47.41 Latch Hit %: 100.00
Parse CPU to Parse Elapsd %: 93.02 % Non-Parse CPU: 71.12

Shared Pool Statistics Begin End
------ ------
Memory Usage %: 90.97 91.14
% SQL with executions>1: 66.87 63.73
% Memory for SQL w/exec>1: 69.86 65.00

Top 5 Timed Events Avg %Total
~~~~~~~~~~~~~~~~~~ wait Call
Event Waits Time (s) (ms) Time
----------------------------------------- ------------ ----------- ------ ------
resmgr:cpu quantum 75 5 70 58.6
CPU time 3 30.7
direct path write 46 1 18 9.3
latch: shared pool 3 0 19 .6
local write wait 4 0 4 .2
-------------------------------------------------------------

Host CPU (CPUs: 1 Cores: 1 Sockets: 1)
~~~~~~~~ Load Average
Begin End User System Idle WIO WCPU
------- ------- ------- ------- ------- ------- --------
0.36 0.74 1.10 0.27 90.13 0.47

Instance CPU
~~~~~~~~~~~~ % Time (seconds)
-------- --------------
Host: Total time (s): 3,501.5
Host: Busy CPU time (s): 345.7
% of time Host is Busy: 9.9
Instance: Total CPU time (s): 2.9
% of Busy CPU used for Instance: 0.8
Instance: Total Database time (s): 3.7
%DB time waiting for CPU (Resource Mgr): 0.0

Virtual Memory Paging
~~~~~~~~~~~~~~~~~~~~~
KB paged out per sec: 1.9
KB paged in per sec: .2

Memory Statistics Begin End
~~~~~~~~~~~~~~~~~ ------------ ------------
Host Mem (MB): 3,628.7 3,628.7
SGA use (MB): 1,081.1 1,081.1
PGA use (MB): 16.3 21.1
% Host Mem used for SGA+PGA: 30.2 30.4
-------------------------------------------------------------

Time Model System Stats DB/Inst: FREE/FREE Snaps: 2-3
-> Ordered by % of DB time desc, Statistic name

Statistic Time (s) % DB time
----------------------------------- -------------------- ---------
sql execute elapsed time 3.5 94.6
DB CPU 2.9 76.6
parse time elapsed 1.6 43.4
hard parse elapsed time 1.6 42.3
PL/SQL execution elapsed time 0.1 2.8
hard parse (sharing criteria) elaps 0.1 1.4
PL/SQL compilation elapsed time 0.0 .9
repeated bind elapsed time 0.0 .1
DB time 3.7
-------------------------------------------------------------

Foreground Wait Events DB/Inst: FREE/FREE Snaps: 2-3
-> Only events with Total Wait Time (s) >= .001 are shown
-> ordered by Total Wait Time desc, Waits desc (idle events last)

Avg %Total
%Tim Total Wait wait Waits Call
Event Waits out Time (s) (ms) /txn Time
---------------------------- ------------ ---- ---------- ------ -------- ------
direct path write 32 0 1 18 6.4 6.4
resmgr:cpu quantum 3 0 0 11 0.6 .4
library cache lock 1 0 0 15 0.2 .2
Allocate UGA memory from OS 130 0 0 0 26.0 .0
Allocate CGA memory from OS 55 0 0 0 11.0 .0
control file sequential read 91 0 0 0 18.2 .0
Allocate PGA memory from OS 98 0 0 0 19.6 .0
Disk file operations I/O 14 0 0 0 2.8 .0
-------------------------------------------------------------

Background Wait Events DB/Inst: FREE/FREE Snaps: 2-3
-> Only events with Total Wait Time (s) >= .001 are shown
-> ordered by Total Wait Time desc, Waits desc (idle events last)

Avg %Total
%Tim Total Wait wait Waits Call
Event Waits out Time (s) (ms) /txn Time
---------------------------- ------------ ---- ---------- ------ -------- ------
resmgr:cpu quantum 72 0 5 73 14.4 58.2
direct path write 14 0 0 19 2.8 2.9
latch: shared pool 3 0 0 19 0.6 .6
local write wait 4 0 0 4 0.8 .2
reliable message 37 0 0 0 7.4 .1
db file sequential read 13 0 0 1 2.6 .1
Allocate UGA memory from OS 66 0 0 0 13.2 .0
control file sequential read 78 0 0 0 15.6 .0
Allocate CGA memory from OS 52 0 0 0 10.4 .0
-------------------------------------------------------------

:

トラブルシューティング:よくあるエラー

Q. ORA-65049: NO_PDB_CHECK モードではローカル・ユーザーまたはロールを作成できません

原因: CDB$ROOT (コンテナ・ルート) に接続したまま spcreate を実行しています。 対処: alter session set container = <PDB名>; を実行して PDB に切り替えてからインストールしてください。

Q. ジョブが動かない (スナップショットが増えない)

原因: job_queue_processes が 0 になっている、または PDB が OPEN していない可能性があります。 対処: パラメータを確認し、PDB が READ WRITE モードで開いているか確認してください。

運用・監視上の注意点

  • ディスク容量の監視: Statspack はデータを削除しない限り蓄積し続けます。定期的に不要なデータを削除 (sppurge.sql または sptrunc.sql) してください。
  • スナップショット・レベル: デフォルトは「レベル5」です。SQL の実行計画まで詳細に取りたい場合は「レベル6」以上にしますが、負荷が高まるため通常は 5 で十分です。
  • 影響: スナップショット取得時は一瞬負荷がかかります。分単位などの過度な頻度での取得は避けてください。

まとめ

  1. 26ai Free でも Statspack は現役 で利用可能。
  2. 必ず PDB に接続 してからインストールする。
  3. spauto.sql を使えば 1時間ごとの自動取得が即座に開始できる。
  4. Standard Edition 運用や学習環境での性能分析に必須のスキル。

まずはご自身の検証環境 (26ai Free) にインストールして、レポートを眺めてみることから始めましょう。

[参考]
Get Started with Performance Tuning

本記事は Oracle Database 26ai Free を対象に解説します。本記事の実機確認はFree版で行っているため、正式版(Enterprise Edition等)がリリースされた際には仕様や既定値が若干異なる可能性があります。

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

コメント

タイトルとURLをコピーしました