Statspack 是 Oracle 官方輕量級效能診斷工具,適合無 AWR 授權或 10g 以前版本。本文整理從安裝、快照收集到報告分析的完整流程。
-- 1. 確認 JOB_QUEUE_PROCESSES > 0(自動快照需求)
SHOW PARAMETER job_queue_processes;
-- 2. 確認 TIMED_STATISTICS = TRUE
SHOW PARAMETER timed_statistics;
CREATE TABLESPACE perfstat DATAFILE '/u01/oradata/perfstat.dbf' SIZE 500M AUTOEXTEND ON;
@$ORACLE_HOME/rdbms/admin/spcreate.sqlEXEC statspack.snap;(執行兩次產生兩個快照)@$ORACLE_HOME/rdbms/admin/spreport.sql → 輸入 begin/end snap_id、報告檔名。
-- 預設每小時一個快照
@$ORACLE_HOME/rdbms/admin/spauto.sql
查看/移除排程:
SELECT job, log_user, last_date, next_date, interval FROM user_jobs;
EXEC dbms_job.remove(41); -- 替換實際 job 編號
| Level | 收集內容 | 建議場景 |
|---|---|---|
| 0 | 基礎統計(等待事件、系統統計等) | 日常輕量監控 |
| 5 (預設) | Level 0 + 高負載 SQL | 標準效能分析 |
| 10 | Level 5 + 子閂統計 | 深度診斷,需 Oracle 支援指導 |
修改預設等級:
EXEC statspack.snap(i_snap_level=>5, i_modify_parameter=>'true');
門檻參數(儲存於 stats$statspack_parameter):
executions_th (預設 100)disk_reads_th (預設 1,000)buffer_gets_th (預設 10,000)調整範例:
EXEC statspack.modify_statspack_parameter(i_buffer_gets_th=>100000, i_disk_reads_th=>100000);
spreport.sql:標準報告sprepsql.sql:指定 SQL Hash 值報告spuexp.par:匯出儲存庫資料DELETE FROM stats$snapshot WHERE snap_id < 3; -- 級聯刪除相關表
-- 或執行 @$ORACLE_HOME/rdbms/admin/sptrunc.sql 截斷所有統計表
Statspack 雖輕量,善用等級與門檻調優,即可成為生產環境效能基線建設的利器。