首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

Statspack 入門實戰 (二):基礎使用流程與報告解讀入門

     編輯:關於SqlServer

前置條件

  • 已執行 `@spcreate` 建立 `PERFSTAT` 用戶與 Statspack 物件。
  • 以 `PERFSTAT` 連線資料庫 (SQL*Plus / SQL Developer)。

核心三步驟:快照 → 等待 → 報告

1. 生成基線快照

SQL> EXECUTE STATSPACK.SNAP;
PL/SQL procedure successfully completed.

此呼叫將當前系統效能指標 (SGA、等待事件、SQL 統計、段統計等) 寫入 `STATS$SNAPSHOT` 等表,產生一個 `SNAP_ID` (遞增整數)。

2. 等待業務負載運行一段時間

建議間隔 **15-60 分鐘** (視負載強度),涵蓋典型業務高峰期。期間可執行多次 `SNAP` 產生多個時間點。

3. 生成第二個快照

SQL> EXECUTE STATSPACK.SNAP;
PL/SQL procedure successfully completed.

4. 產生比較報告

SQL> @?/rdbms/admin/spreport.sql
-- 或指定路徑:SQL> @$ORACLE_HOME/rdbms/admin/spreport

互動式提示:

  1. Database ID / Instance Number: 確認目標實例 (通常預設即可)。
  2. Number of days of snapshots: 輸入天數 (如 `1`) 列出近期快照,或直接 Enter 列出所有。
  3. Begin Snap Id / End Snap Id: 選擇起始與結束快照編號 (對應步驟 1 與 3)。
  4. Report Name: 指定輸出檔名 (預設 `sp____.lst`),會寫在當前目錄或 `USER_DUMP_DEST`。

報告核心區塊速讀指南

產出的 `.lst` 文字報告極長,重點關注以下黃金區塊:

報告區塊關鍵指標健康基準 (參考)異常時排查方向
Load Profile Redo size/s, Logical reads/s, Physical reads/s, User calls/s, Parses/s, Hard parses/s, Sorts/s Hard parses/s < 10% of Parses/s; Redo size 穩定 Hard parse 高 → 共用游標問題 (未使用綁定變數);Physical read 高 → Buffer Cache 太小或全表掃描
Instance Efficiency Percentages Buffer Nowait %, Redo NoWait %, Buffer Hit %, Library Hit %, Soft Parse %, Execute to Parse % Buffer Hit % > 99%; Library Hit % > 99%; Execute to Parse % > 90% Hit ratio 低 → 記憶體不足 / SQL 不共享;Execute to Parse 低 → 大量硬解析
Top 5 Timed Events Event, Waits, Time(s), Avg Wait(ms), % DB Time DB Time 佔比前 3 事件合理 (db file scattered read, log file sync 等) 核心入口:點擊事件名進入 Wait Event 詳細段落。關注 `log file sync` (Commit 過多/Redo Log 慢)、`db file sequential/scattered read` (I/O 瓶頸/索引失效)、`latch free` / `enq:` (爭用)
SQL Ordered by Elapsed Time / Gets / Reads / Executions Hash Value, Module, SQL Text (前 50 字), Elapsed Time, Executions, Buffer Gets, Disk Reads, Rows Processed 單次執行 Elapsed Time 低、Buffer Gets/Execution 合理 SQL 調優首選清單:複製 Hash Value → `SELECT * FROM STATS$SQL_SUMMARY WHERE HASH_VALUE = ...` 取得完整 SQL 文本 → `EXPLAIN PLAN` / `DBMS_XPLAN` 分析執行計畫
Instance Activity Stats Statistic, Total, per Second, per Transaction 關注 `table scans (long tables)`, `sorts (disk)`, `parse count (hard)` 長表掃描多 → 缺索引;磁碟排序多 → PGA/SORT_AREA_SIZE 不足
Segment Statistics (10g+) Logical Reads, Physical Reads, DB Block Changes per Segment 熱點表/索引識別 找出高讀寫段 → 考慮分區、快取 (KEEP POOL)、索引重建

進階用法

  • 自動化快照作業: `DBMS_JOB.SUBMIT` 或 `DBMS_SCHEDULER.CREATE_JOB` 定時執行 `STATSPACK.SNAP` (如每 30 分鐘),並配合 `STATSPACK.PURGE` 定期清理舊快照 (保留 7-30 天)。
  • 指定快照層級: `EXEC STATSPACK.SNAP(i_snap_level=>10);` (Level 10 含 SQL Plan、Parent/Child Latch 統計,資源消耗較大,建議僅問題排查時開啟)。
  • 差異報告: `@spreport.sql` 選擇非連續快照 (如上週同時間 vs 今天) 對比趨勢。
  • RAC 環境: 使用 `@sprsqins.sql` (Instance 特定) 或 `@sprsqall.sql` (全叢集) 產生特定實例報告。

從 Statspack 升級到 AWR/ASH (10g+ 推薦)

Statspack 為 **手動、被動、粒度較粗** 的診斷工具。Oracle 10g 引入 **AWR (Automatic Workload Repository)** 自動每小時快照、**ASH (Active Session History)** 秒級採樣,**ADDM (Automatic Database Diagnostic Monitor)** 自動根因分析。企業版授權包含 Diagnostic Pack 時,**強烈建議直接使用 AWR/ASH/ADDM**,功能完整度、易用性、自動化程度遠超 Statspack。Statspack 現適用於 Standard Edition 或無 Diagnostic Pack 授權環境。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved