Oracle OLTP 性能优化
Oracle OLTP 性能优化
适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
OLTP 场景性能优化[1]:
特点:
- 高并发
- 短事务
- 频繁查询
- 数据一致性
2. 索引优化
2.1 关键索引
-- 主键
CREATE TABLE orders (
id NUMBER PRIMARY KEY,
...
);
-- 外键
CREATE INDEX idx_orders_cust ON orders(customer_id);
-- 查询常用列
CREATE INDEX idx_orders_status_date ON orders(status, create_date);
2.2 复合索引
-- 高选择性在前
CREATE INDEX idx_emp_dept_sal ON employees(dept_id, salary);
2.3 函数索引
CREATE INDEX idx_emp_upper_name ON employees(UPPER(name));
详细见:Oracle 索引优化策略。
3. 内存优化
3.1 Buffer Cache
ALTER SYSTEM SET db_cache_size = 32G;
-- OLTP 命中率 > 95%
3.2 Shared Pool
ALTER SYSTEM SET shared_pool_size = 8G;
-- 绑定变量减少解析
3.3 KEEP Pool
ALTER SYSTEM SET db_keep_cache_size = 4G;
ALTER TABLE small_hot_table STORAGE (BUFFER_POOL KEEP);
3.4 Redo Log Buffer
ALTER SYSTEM SET log_buffer = 67108864 SCOPE=SPFILE; -- 64M
4. 并发优化
4.1 序列
-- RAC NOORDER
CREATE SEQUENCE seq_emp NOORDER CACHE 1000;
4.2 INITRANS
-- 高并发
CREATE TABLE ... INITRANS 20;
ALTER TABLE ... INITRANS 20;
4.3 PCTFREE
-- 减少 HOT Block 迁移
CREATE TABLE ... PCTFREE 20;
5. 事务优化
5.1 短事务
- 及时 COMMIT
- 减少锁持有
- 避免长事务
5.2 批量
-- BULK COLLECT + FORALL
FORALL i IN 1..v.COUNT
INSERT INTO ... VALUES v(i);
5.3 异步处理
- 队列
- 后台任务
- 减少响应时间
6. 锁优化
6.1 减少锁等待
-- 1. 及时提交
-- 2. 优化 SQL 速度
-- 3. 调整事务顺序
6.2 死锁预防
-- 1. 固定表更新顺序
-- 2. 减少 ITL 等待
-- 3. 索引减少全表锁
详细见:Oracle 锁等待深度分析。
7. 解析优化
7.1 绑定变量
EXECUTE IMMEDIATE 'SELECT * FROM emp WHERE id = :1' USING v_id;
7.2 CURSOR_SHARING
ALTER SYSTEM SET cursor_sharing = EXACT; -- 推荐
-- 或 FORCE(应用不能改)
7.3 监控
SELECT name, value FROM v$sysstat
WHERE name IN ('parse count (hard)', 'parse count (total)');
-- hard / total < 5%
8. I/O 优化
8.1 SSD
- 数据文件 SSD
- Redo SSD
- 索引 SSD
8.2 Redo 分离
ALTER DATABASE ADD LOGFILE GROUP 1
('/redo1/redo01a.log', '/redo2/redo01b.log') SIZE 2G;
8.3 ASM
多磁盘组
AU 4M
详细见:Oracle 数据库 I/O 优化。
9. RAC 优化
9.1 服务分离
srvctl add service -db orcl -service oltp_svc -preferred orcl1
9.2 减少 Cache Fusion
- 业务分布
- 数据分布
- 序列 NOORDER
详细见:Oracle RAC 性能调优。
10. 连接池
10.1 应用连接池
- HikariCP
- Druid
- UCP
10.2 DRCP
EXEC DBMS_CONNECTION_POOL.START_POOL;
详细见:Oracle 数据库连接池优化。
11. 监控
11.1 关键指标
- TPS
- 响应时间
- AAS
- 锁等待
- 命中率
- CPU
- I/O
11.2 AWR
-- AWR 报告
@?/rdbms/admin/awrrpt.sql
12. 性能基线
- TPS:1000
- 响应:50ms
- 命中率:98%
- 锁等待:< 1s
详细见:Oracle 性能基线建立。
13. 常见问题
13.1 锁等待多
- 应用提交不及时
- 长事务
- SQL 慢
13.2 解析高
- 无绑定变量
- 共享游标少
13.3 I/O 瓶颈
- 索引缺失
- 全表扫描
14. 最佳实践
- 索引完整:基础
- 绑定变量:减少解析
- 短事务:减少锁
- 大内存:减少 I/O
- KEEP Pool:热点
- 序列 NOORDER:RAC 友好
- 连接池:复用
- 服务分离:RAC
- 监控:及时
- 基线对比:异常
15. 参考资料
[1] Oracle Database Performance Tuning Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/tgdba/