Oracle Statspack 性能报告

Oracle Statspack 性能报告

适用版本:Oracle Database 8i / 9i / 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

Statspack 是 AWR 的前身,免费提供[1]:

适用

  • 标准版(无 AWR 诊断包)
  • 老版本 Oracle
  • 免费

2. 安装

2.1 创建表空间

CREATE TABLESPACE perfstat DATAFILE '/u01/oradata/orcl/perfstat01.dbf' SIZE 1G;

2.2 运行脚本

sqlplus / as sysdba
@?/rdbms/admin/spcreate.sql

输入:

  • PERFSTAT 密码
  • PERFSTAT 默认表空间(PERFSTAT)
  • 临时表空间(TEMP)

2.3 验证

SELECT * FROM perfstat.stats$snapshot;

3. 采集快照

3.1 手动

EXEC perfstat.statspack.snap;

3.2 自动

-- 通过 DBMS_JOB
DECLARE
  v_job NUMBER;
BEGIN
  DBMS_JOB.SUBMIT(v_job, 'perfstat.statspack.snap;', SYSDATE, 'SYSDATE+1/24');
  COMMIT;
END;
/

3.3 级别

-- 0-10 级
ALTER SESSION SET statistics_level = ALL;
EXEC perfstat.statspack.snap(i_snap_level => 7);
级别内容
0基础
5+ SQL
6+ SQL 详细
7+ 段统计
10全部

4. 生成报告

4.1 spreport.sql

sqlplus perfstat/perfstat
@?/rdbms/admin/spreport.sql

4.2 输入

  • 开始快照 ID
  • 结束快照 ID
  • 报告文件名

4.3 报告内容

  • 概要
  • Top 5 等待事件
  • SQL 统计
  • 表空间 I/O
  • Buffer Pool
  • 实例恢复
  • Buffer Wait Statistics
  • Rollback

5. 删除快照

5.1 删除范围

EXEC perfstat.statspack.purge(i_begin_snap => 1, i_end_snap => 10);

5.2 自动清理

-- 保留最近 30 天
EXEC perfstat.statspack.purge(i_snap_range => 30);

6. 关键指标

6.1 Top 5 Wait Events

Event                          Waits    Time(s)  % Total
db file sequential read        100,000  500      50%
CPU time                                300      30%
db file scattered read         50,000   100      10%
log file sync                  10,000   50       5%

6.2 Instance Efficiency

Buffer Nowait %:      99.99
Buffer Hit %:         99.50
Library Hit %:        99.80
Redo NoWait %:        100.00
In-memory Sort %:     100.00
Soft Parse %:         99.50
Execute to Parse %:   90.00
Latch Hit %:          99.90
Parse CPU to Parse %: 95.00

6.3 SQL 统计

  • SQL ordered by Gets
  • SQL ordered by Reads
  • SQL ordered by Executions
  • SQL ordered by Parse Calls
  • SQL ordered by Sharable Memory

7. 与 AWR 对比

维度StatspackAWR
费用免费付费(诊断包)
性能影响
自动
报告基础丰富
6.4 建议标准版企业版

8. 应用场景

8.1 性能分析

-- 1. 开始快照
EXEC perfstat.statspack.snap;

-- 2. 业务运行(30 分钟)

-- 3. 结束快照
EXEC perfstat.statspack.snap;

-- 4. 生成报告
@?/rdbms/admin/spreport.sql

8.2 问题诊断

-- 找到问题时段
SELECT snap_id, snap_time FROM perfstat.stats$snapshot ORDER BY snap_id;

-- 生成报告对比

9. 卸载

sqlplus / as sysdba
@?/rdbms/admin/spdrop.sql

10. 常见坑与排错

10.1 安装失败

-- 1. 检查表空间
-- 2. 检查权限
-- 3. 检查脚本

10.2 报告无数据

-- 检查快照
SELECT * FROM perfstat.stats$snapshot;

10.3 性能影响

-- 1. 不要在高峰期
-- 2. 适当级别
-- 3. 定期清理

11. 最佳实践

  1. 标准版用 Statspack:免费
  2. 企业版用 AWR:丰富
  3. 定时快照:1 小时
  4. 保留 30 天:分析
  5. 问题时段对比:诊断
  6. Top 5 等待:瓶颈
  7. SQL 分析:优化
  8. 定期清理:空间
  9. 结合 OS:综合
  10. 文档化:可重复

12. 参考资料

[1] Oracle Database Performance Tuning Guide 19c, “Statspack” https://docs.oracle.com/en/database/oracle/oracle-database/19/tgdba/statspack.html