批量載入效能案例
客戶在大量載入資料是遇到效能問題,檢查後發現客戶採用的是單條插入單條提交這種最緩慢的方式,為了給客戶說明優化效果,現場做了幾個程式碼。
最簡單的優化方式莫過於減少COMMIT頻度,而最優化的方式是採用批量插入的方式,簡單的測試程式碼如下:
SQL> CREATE TABLE T_INSERT (ID NUMBER, NAME VARCHAR2(30));
Table created.
SQL> SET TIMING ON
SQL> BEGIN
2 FOR I IN 1..100000 LOOP
3 INSERT INTO T_INSERT VALUES (I, 'A' || I);
4 COMMIT;
5 END LOOP;
6 END;
7 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:05.22
SQL> BEGIN
2 FOR I IN 1..100000 LOOP
3 INSERT INTO T_INSERT VALUES (I, 'A' || I);
4 COMMIT;
5 END LOOP;
6 END;
7 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:05.51
SQL> BEGIN
2 FOR I IN 1..100000 LOOP
3 INSERT INTO T_INSERT VALUES (I, 'A' || I);
4 IF MOD(I, 1000) = 0 THEN
5 COMMIT;
6 END IF;
7 END LOOP;
8 COMMIT;
9 END;
10 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:04.01
SQL> BEGIN
2 FOR I IN 1..100000 LOOP
3 INSERT INTO T_INSERT VALUES (I, 'A' || I);
4 IF MOD(I, 1000) = 0 THEN
5 COMMIT;
6 END IF;
7 END LOOP;
8 COMMIT;
9 END;
10 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:02.64
SQL> DECLARE
2 TYPE T_NUM IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3 TYPE T_VAR IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
4 V_NUM T_NUM;
5 V_VAR T_VAR;
6 BEGIN
7 FOR I IN 1..100000 LOOP
8 V_NUM(I) := I;
9 V_VAR(I) := 'A' || I;
10 END LOOP;
11 FORALL I IN 1..100000
12 INSERT INTO T_INSERT VALUES (V_NUM(I), V_VAR(I));
13 COMMIT;
14 END;
15 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.37
SQL> DECLARE
2 TYPE T_NUM IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3 TYPE T_VAR IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
4 V_NUM T_NUM;
5 V_VAR T_VAR;
6 BEGIN
7 FOR I IN 1..100000 LOOP
8 V_NUM(I) := I;
9 V_VAR(I) := 'A' || I;
10 END LOOP;
11 FORALL I IN 1..100000
12 INSERT INTO T_INSERT VALUES (V_NUM(I), V_VAR(I));
13 COMMIT;
14 END;
15 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.50
這個例子明確說明了單條提交、批量提交以及數值插入的效能差異,很多時候只是口頭上的描述,客戶不會有太深的印象,而如果通過這種例子來展示效能的差別,結果一目瞭然,比再多的描述都管用得多。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-713816/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 載入時間/效能
- 前端效能優化 --- 懶載入&預載入前端優化
- ACCESS大批量資料寫入之效能提升方案
- Docker批量操作(啟停、刪除、歸檔、載入)Docker
- 批量更新效能比較
- 前端效能優化——延遲載入和非同步載入前端優化非同步
- MySQL批量更新死鎖案例分析MySql
- puppet之java批量安裝案例Java
- puppet之mysql批量安裝案例MySql
- Sqoop import載入HBase案例詳解OOPImport
- 【轉載】QP02檢驗計劃批量匯入
- insert into select 批量載入出錯解決方案
- 效能改進之專案例會匯入實踐
- .net Excel 批量插入效能慢Excel
- WPFDataGrid效能載入大資料大資料
- React 16 載入效能優化指南React優化
- sqlldr載入效能問題的排查SQL
- qq相簿批量下載
- 頁面載入效能之優化LCP優化
- 前端效能優化之載入技術前端優化
- JavaScript無阻塞載入效能優化方案JavaScript優化
- 前端效能優化 – 資源預載入前端優化
- Redis效能提高之批量和管道Redis
- python 批量resize效能比較Python
- CQRS批量操作的效能問題
- Android之批量載入圖片OOM問題解決方案AndroidOOM
- 批量機器登入
- 批量下載SRR資料
- iOS效能優化之頁面載入速率iOS優化
- JavaScript 的效能優化:載入和執行JavaScript優化
- JavaScript的效能優化:載入和執行JavaScript優化
- ListView效能優化非同步載入圖片View優化非同步
- 使用sqlloader的直接載入方式和傳統載入方式的效能差異SQL
- JVM效能最佳化 —— 類載入器,手動實現類的熱載入JVM
- oracle SPA 效能分析案例Oracle
- 效能提升 48 倍! python redis 批量寫入大量資料優化過程PythonRedis優化
- 使用 Webapck 優化 VS Code 外掛載入效能Web優化
- 前端效能優化 - Resource Hints 資源預載入前端優化