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 对比
| 维度 | Statspack | AWR |
|---|---|---|
| 费用 | 免费 | 付费(诊断包) |
| 性能影响 | 中 | 低 |
| 自动 | 否 | 是 |
| 报告 | 基础 | 丰富 |
| 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. 最佳实践
- 标准版用 Statspack:免费
- 企业版用 AWR:丰富
- 定时快照:1 小时
- 保留 30 天:分析
- 问题时段对比:诊断
- Top 5 等待:瓶颈
- SQL 分析:优化
- 定期清理:空间
- 结合 OS:综合
- 文档化:可重复
12. 参考资料
[1] Oracle Database Performance Tuning Guide 19c, “Statspack” https://docs.oracle.com/en/database/oracle/oracle-database/19/tgdba/statspack.html