首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 LOAD 工具效能調優實戰技巧總覽

     編輯:DB2 教學

影響 LOAD 效能的關鍵選項

LOAD 工具最大優勢在於以資料頁層級處理資料,繞過 DBMS 多層處理邏輯,極大提升載入速度。除工具本身特性外,合理配置選項可進一步釋放效能。以下列出關鍵選項與建議設定:

CPU_PARALLELISM n

指定 LOAD 同時使用 n 個邏輯 CPU 並行處理剖析、轉換、格式化等任務。資料量大且 OS 負載低時可設定多 CPU;若同時啟動多個 LOAD,所有實例的 CPU_PARALLELISM 總和最好不超過邏輯 CPU 總數。不指定時 DB2 依 CPU 數量自動分配。

DATA BUFFER buffersize

指定 LOAD 可用的最大資料緩衝區(單位 4KB)。在不超過實體記憶體前提下,緩衝區越大效能越好,但受 UTIL_HEAP_SZ 限制。建議單一 LOAD 不超過 UTIL_HEAP_SZ 的 50%,實際值需觀察工具堆使用高水位決定。緩衝區夠大後再增加效益遞減,需實測找最佳值。

DISK_PARALLELISM n

指定 LOAD 可利用表空間多容器並行 I/O 能力,依容器數量適度設定。

MODIFIED BY ANYORDER

利用輸入檔預設排序提升效能。若輸入檔來自帶排序謂詞的 EXPORT,效能可提升數倍至數十倍,支援所有檔案格式。

MODIFIED BY FASTPARSE

降低對輸入資料檢查以提速。僅適用 ASC/DEL 格式,且輸入資料結構、型別與目標表完全一致時使用。

MODIFIED BY NOROWWARNINGS

預期大量警告時啟用,減少警告處理開銷。

SAVECOUNT

降低一致性恢復點設定負載。大資料量時依筆數設定(如 1000 萬行設 10000)。不可與 ANYORDER 同時使用。

USER tablespace

表有大量索引且表/索引空間不大時,指定系統暫存表空間加速索引建立。

使用游標提升 LOAD 效能

LOAD 除支援 IXF/ASC/DEL 檔案,也可直接從游標讀取資料。將一表資料搬移到結構相同的另一表時,游標方式省去「導出寫檔」與「載入讀檔」兩次 I/O,大幅提升效率。

-- test.sql
DECLARE cursor mycur FOR SELECT * FROM tab1name;
LOAD FROM mycur OF CURSOR INSERT INTO tab2name;

執行:db2 connect to dbname && db2 -tvf test.sql。游標 SQL 可自訂,LOAD 選項亦可按需調整。

碼頁轉換處理

跨資料庫移動資料常遇碼頁不一致:

  • ASC/DEL 格式:使用 MODIFIED BY CODEPAGE=xxx 指定來源碼頁。
    LOAD FROM test OF DEL MODIFIED BY CODEPAGE=819 INSERT INTO tabname
  • IXF 格式:自動完成碼頁轉換,無需額外選項。若轉換導致格式變更載入失敗,可加 FORCEIN。
    LOAD FROM test OF IXF MODIFIED BY FORCEIN INSERT INTO tabname

結構完全相同仍出現非空字元或截斷錯誤時,IXF + FORCEIN 可規避。

錯誤行定位技巧

DB2 V8/V9.1 載入時若資料不符型別被截斷/拒絕,錯誤訊息顯示如 F4-6(第 4 CPU 處理的第 6 行),無法直接對應來源檔總行號。解法:設 CPU_PARALLELISM=1 強制單 CPU,行號即為總行號。
DB2 V9.5 新增 SQL3227W 直接輸出使用者記錄號(如 Record "F4-6" refers to user record "16"),免去單 CPU 限制。

與查詢並行執行的限制

  • 查詢先於 LOAD 執行 → LOAD 一直等待查詢結束。
  • LOAD 先執行且指定 ALLOW READ ACCESS → 後續查詢可並行執行。
  • 無法確定執行順序且需並行查詢時,建議改用 IMPORT 替代 LOAD。

監控正在執行的 LOAD 狀態

使用 LIST UTILITIES SHOW DETAIL 觀察執行階段與進度:

ID = 5
Type = LOAD
Database = SAMPLE
Phase 1: SETUP
Phase 2 [Current]: LOAD, Total = 2174631 rows, Completed = 1106547 rows

若有索引會有第三階段 BUILD。以 總工作量 vs 已完成工作量 比例估算剩餘時間。

用 LOAD QUERY 觀察表狀態

表不可用時(如處於「裝入暫掛」),無 LIST TABLE 可用。改用 LOAD QUERY TABLE tabname 可取得表狀態、階段、已讀/載入/拒絕行數等資訊,據以決定 RESTART 或 TERMINATE 恢復存取。

快速清空資料表的最佳實踐

四種清空方式比較:

  1. DELETE FROM tablename:消耗大量時間與 Log,極不推薦。
  2. ALTER TABLE ... ACTIVATE NOT LOGGED INITIALLY; DELETE ...:需同一事務執行,操作繁瑣。
  3. ALTER TABLE ... ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE:較好,但缺乏故障控制。
  4. LOAD FROM emptyfile OF DEL REPLACE INTO tablename(推薦):同樣快速,且支援 RESTART/TERMINATE 故障控制,過程更可控。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved