Oracle Database Replay 详解
Oracle Database Replay 详解
适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
Database Replay 捕获生产负载在测试环境重放[1]:
详细见:Oracle SQL Performance Analyzer 详解。
2. 流程
2.1 概述
1. 捕获(Capture):生产
2. 预处理(Preprocess):测试
3. 重放(Replay):测试
4. 分析(Analyze):报告
2.2 优势
- 真实负载
- 系统级
- 升级评估
- 变更测试
3. 捕获
3.1 配置
-- 创建目录
CREATE DIRECTORY capture_dir AS '/u01/capture';
-- 启动捕获
BEGIN
DBMS_WORKLOAD_CAPTURE.START_CAPTURE(
name => 'prod_capture',
dir => 'CAPTURE_DIR',
duration => 3600 -- 秒
);
END;
/
-- 停止
EXEC DBMS_WORKLOAD_CAPTURE.FINISH_CAPTURE;
3.2 过滤
BEGIN
DBMS_WORKLOAD_CAPTURE.ADD_FILTER(
fname => 'exclude_scott',
fattribute => 'USER',
fvalue => 'SCOTT'
);
END;
/
4. 预处理
4.1 测试环境
# 传输文件
scp /u01/capture/* test_server:/u01/replay/
4.2 预处理
CREATE DIRECTORY replay_dir AS '/u01/replay';
BEGIN
DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE(
capture_dir => 'REPLAY_DIR'
);
END;
/
4.3 初始化
BEGIN
DBMS_WORKLOAD_REPLAY.INITIALIZE_REPLAY(
replay_name => 'replay1',
replay_dir => 'REPLAY_DIR'
);
END;
/
5. 重放
5.1 准备
-- 模式映射
BEGIN
DBMS_WORKLOAD_REPLAY.SET_REPLAY_MAPPING(
capture_schema => 'SCOTT',
replay_schema => 'TEST'
);
END;
/
-- 连接映射
BEGIN
DBMS_WORKLOAD_REPLAY.SET_CONNECTION_MAPPING(
capture_conn => 'prod_conn',
replay_conn => 'test_conn'
);
END;
/
5.2 客户端
# 启动重放客户端
wrc mode=replay replaydir=/u01/replay server=test_server
5.3 启动
BEGIN
DBMS_WORKLOAD_REPLAY.START_REPLAY;
END;
/
5.4 停止
EXEC DBMS_WORKLOAD_REPLAY.CANCEL_REPLAY;
6. 分析
6.1 报告
-- 文本
SELECT DBMS_WORKLOAD_REPLAY.REPORT(replay_id => 1, format => 'TEXT')
FROM dual;
-- HTML
SELECT DBMS_WORKLOAD_REPLAY.REPORT(replay_id => 1, format => 'HTML')
FROM dual;
6.2 内容
- 重放统计
- 性能对比
- 错误
- 分歧
7. 分歧
7.1 类型
- 数据分歧
- 错误分歧
- 性能分歧
7.2 检查
SELECT * FROM dba_workload_divergence;
8. 应用场景
8.1 升级
- 生产负载
- 升级测试
- 性能验证
8.2 配置变更
- 参数
- 硬件
- 评估
8.3 应用变更
- 应用升级
- SQL 变更
- 验证
8.4 容量规划
- 峰值负载
- 扩容评估
- 性能基线
9. 限制
9.1 不支持
- 部分非数据库操作
- OS 文件操作
- 外部过程
9.2 注意
- 测试环境数据一致
- 时间窗口
- 资源
10. 与 SPA 对比
10.1 区别
| 项 | SPA | Database Replay |
|---|---|---|
| 范围 | SQL 级 | 系统级 |
| 负载 | STS | 全负载 |
| 评估 | SQL 性能 | 系统性能 |
10.2 配合
- Database Replay:系统级
- SPA:SQL 级
- 综合评估
11. 监控
11.1 捕获
SELECT id, name, status, start_time, end_time
FROM dba_workload_captures;
11.2 重放
SELECT id, name, status, start_time, end_time
FROM dba_workload_replays;
11.3 进度
SELECT * FROM v$workload_replay_thread;
12. 常见问题
12.1 分歧多
- 数据不一致
- 同步数据
- 重试
12.2 性能差
- 资源不足
- 优化
- 监控
12.3 捕获失败
- 空间
- 权限
- 检查
13. 最佳实践
- 代表性负载:峰值
- 测试环境一致:数据
- 预处理:必需
- 客户端:充足
- 映射:正确
- 监控:分歧
- 报告:详细
- 文档:记录
- 演练:升级前
- 复盘:总结
14. 参考资料
[1] Oracle Database Testing Guide 19c, “Database Replay” https://docs.oracle.com/en/database/oracle/oracle-database/19/ratup/