往期回顾:
SQL优化经典等价改写1——case when 改造
SQL优化经典等价改写2——rownum分页
一、插入策略对比表
二、测试环境与数据
测试数据:1000万行,每行约100字节
-- 准备1000万行测试数据
CREATE TABLE source_data AS
SELECT ROWNUM id, LPAD('X', 100, 'X') data
FROM dual CONNECT BY LEVEL <= 10000000;
-- 创建目标表
CREATE TABLE target_normal (id NUMBER, data VARCHAR2(100));
三、性能测试详解
1. 普通插入 - 基准性能
-- 执行时间: 9.7秒 INSERT INTO target_normal SELECT * FROM source_data;
Top 5 Timed Events: Avg %Total ~~~~~~~~~~~~~~~~~~ wait Call Event Waits Time (s) (ms) Time ---------------------------- ----- ---------- ------ ------ log file sync 325 5.2 16 53.6 db file sequential read 856 2.4 3 24.7 CPU time 1.8 18.6 log file parallel write 325 0.2 1 2.1
2. 直接路径插入 - 显著提升
-- 执行时间: 2.8秒 INSERT /*+ APPEND */ INTO target_normal SELECT * FROM source_data;
Top 5 Timed Events: Avg %Total ~~~~~~~~~~~~~~~~~~ wait Call Event Waits Time (s) (ms) Time ---------------------------- ----- ---------- ------ ------ direct path write 187 1.3 7 46.4 log file sync 92 0.9 10 32.1 CPU time 0.5 17.9 direct path read 125 0.1 1 3.6
3. 并行直接路径 - 多核利用
-- 执行时间: 0.9秒 INSERT /*+ APPEND */ INTO target_normal SELECT /*+ PARALLEL(8) */ * FROM source_data;
Top 5 Timed Events: Avg %Total ~~~~~~~~~~~~~~~~~~ wait Call Event Waits Time (s) (ms) Time ---------------------------- ----- ---------- ------ ------ PX Deq: Execute Reply 144 0.3 2 33.3 direct path write 352 0.3 1 33.3 CPU time 0.2 22.2 PX Deq Credit: send blkd 8 0.1 13 11.1
4. 关闭日志并行插入 - 极限性能
-- 执行时间: 0.5秒 ALTER TABLE target_normal NOLOGGING; INSERT /*+ APPEND */ INTO target_normal SELECT /*+ PARALLEL(8) */ * FROM source_data;
Top 5 Timed Events: Avg %Total ~~~~~~~~~~~~~~~~~~ wait Call Event Waits Time (s) (ms) Time ---------------------------- ----- ---------- ------ ------ direct path write 352 0.3 1 60.0 CPU time 0.2 40.0
四、关键性能指标对比
五、使用建议
1. 小批量数据插入
2. 中等批量数据插入
3. 大批量数据插入(多核环境)
INSERT /*+ APPEND */ INTO target SELECT /*+ PARALLEL(8) */ * FROM source;
4. 极限性能需求(临时/可重建数据)
ALTER TABLE target NOLOGGING; INSERT /*+ APPEND */ INTO targetSELECT /*+ PARALLEL(8) */ * FROM source;
性能优化高级技巧
BEGIN FOR i IN 1..10 LOOP INSERT INTO target SELECT * FROM source WHERE batch_id = i; COMMIT; END LOOP; END;
-- 将数据加载到临时表 INSERT /*+ APPEND PARALLEL(8) */ INTO temp_table SELECT * FROM source;-- 交换分区(几乎瞬时完成) ALTER TABLE main_table EXCHANGE PARTITION part1 WITH TABLE temp_table;
结论
未完待续...
SQL优化经典等价改写4——只取所需列
公众号:收获不止数据库
微信:ljbyxl1213
“大白话人工智能” 系列
“数据库拍案惊奇” 系列
“世事洞明皆学问” 系列
编辑推荐:
- 通用SQL优化经典等价改写【三】——插入提速03-03
- 数据库服务器操作系统升级后Oracle 19c crs无法启动03-03
- 在线重定义——分区表改造03-03
- SQL优化案例分享03-03
- Oracle 19C自动索引导致SQL性能下降03-03
- 记一次DG库日志应用正常但数据不同步的极端案例分析03-03
- 记一次数据泵导入命中ORA-39183错误分析03-03
- [20250501]truncate table恢复实战.txt03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 通用SQL优化经典等价改写【三】——插入提速
通用SQL优化经典等价改写【三】——插入提速
26-03-03 - 在线重定义——分区表改造
在线重定义——分区表改造
26-03-03 - 记一次DG库日志应用正常但数据不同步的极端案例分析
记一次DG库日志应用正常但数据不同步的极端案例分析
26-03-03 - 记一次数据泵导入命中ORA-39183错误分析
记一次数据泵导入命中ORA-39183错误分析
26-03-03 - 关闭胖东来,于东来被网红逼到崩溃边缘
关闭胖东来,于东来被网红逼到崩溃边缘
26-03-03 - 雷军迎来大逆转:开小米SU7坠崖的车主发声感谢,又提了一台SU7 Max
雷军迎来大逆转:开小米SU7坠崖的车主发声感谢,又提了一台SU7 Max
26-03-03 - Oracle认证大满贯,真的有点拼了!
Oracle认证大满贯,真的有点拼了!
26-03-03 - oracle rac时区问题导致远程查询时间不准
oracle rac时区问题导致远程查询时间不准
26-03-03 - 第38期 Oracle使用跨平台增量备份减少可传输表空间的停机时间之XTTS(使用rman方式)
- 内部讲话曝光!刘强东声称京东外卖利润率不高过 5%,是假道德还是真商战?
内部讲话曝光!刘强东声称京东外卖利润率不高过 5%,是假道德还是真商战?
26-03-03



