Statspack 是 Oracle 官方效能診斷工具組,能記錄資料庫效能快照、識別瓶頸、產生分析報告,協助 DBA 快速掌握系統健康狀態,也是遠端技術支援的重要參考依據。
-- 安裝 (需 SYSDBA)
CONNECT / AS SYSDBA
@?/rdbms/admin/spcreate
-- 移除
@?/rdbms/admin/spdrop
-- 開啟計時統計 (必要)
ALTER SYSTEM SET TIMED_STATISTICS = TRUE;
-- 手動採集快照
CONNECT perfstat/perfstat
EXECUTE statspack.snap;
-- 自動排集排程
@?/rdbms/admin/spauto
-- 移除排程: SELECT * FROM user_jobs; EXEC DBMS_JOB.REMOVE(job_id);
-- 產生報告
@?/rdbms/admin/spreport
進階採集層級:EXEC statspack.snap(i_snap_level=>10, i_modify_parameter=>'true');
Level 5:SQL 陳述式統計;Level 6:含較低層級所有統計;Level 7:區段層級統計;Level 10:子閂鎖統計。
SQL 腳本(以 8i 為基礎,9i+ 需調整 statistic#):
SELECT SUBSTR(TO_CHAR(snap_time,'yyyy-mm-dd HH24:MI:SS'),12),
(newreads.value - oldreads.value) reads,
(newwrites.value - oldwrites.value) writes
FROM perfstat.stats$sysstat oldreads,
perfstat.stats$sysstat newreads,
perfstat.stats$sysstat oldwrites,
perfstat.stats$sysstat newwrites,
perfstat.stats$snapshot sn
WHERE newreads.snap_id = sn.snap_id
AND newwrites.snap_id = sn.snap_id
AND oldreads.snap_id = sn.snap_id - 1
AND oldwrites.snap_id = sn.snap_id - 1
AND oldreads.statistic# = 40
AND newreads.statistic# = 40
AND oldwrites.statistic# = 41
AND newwrites.statistic# = 41
AND (newreads.value - oldreads.value) > 0
AND (newwrites.value - oldwrites.value) > 0;
圖表分析:

讀操作日常平穩 (~4,000),下午 14:00-17:00 峰值達 150,000;寫操作穩定 ~80,000,凌晨 01:30-08:30 極低。結論:寫入為主系統,需重點關注寫競爭。
SQL 腳本:
SELECT SUBSTR(TO_CHAR(snap_time,'yyyy-mm-dd HH24:MI'),12),
ROUND(100*(((a.value-e.value)+(b.value-f.value))-(c.value-g.value))/
((a.value-e.value)+(b.value-f.value))) "BUFFER_HIT_RATIO"
FROM perfstat.stats$sysstat a, perfstat.stats$sysstat b,
perfstat.stats$sysstat c, perfstat.stats$sysstat d,
perfstat.stats$sysstat e, perfstat.stats$sysstat f,
perfstat.stats$sysstat g, perfstat.stats$snapshot sn
WHERE a.snap_id = sn.snap_id AND b.snap_id = sn.snap_id
AND c.snap_id = sn.snap_id AND d.snap_id = sn.snap_id
AND e.snap_id = sn.snap_id-1 AND f.snap_id = sn.snap_id-1
AND g.snap_id = sn.snap_id-1
AND a.statistic# = 39 AND e.statistic# = 39
AND b.statistic# = 38 AND f.statistic# = 38
AND c.statistic# = 40 AND g.statistic# = 40
AND d.statistic# = 41;
圖表分析:

命中率近 100%,最低 95% 以上,屬優化狀態。一般若低於 90% 需調整 SGA。
將 Statspack 輸出匯入 Excel 或 BI 工具繪製趨勢圖,讓管理層直觀掌握效能基線與異常點,強化溝通說服力。