CALLS (CALL_ID PK, CALL_DATE IDX, EMP_ID, CALL_TYPE);| 方案 | 耗時 (秒) | CPU 時間 | 適用場景 | 核心優化點 |
|---|---|---|---|---|
| 1. SQL*Loader 常規路徑 | 45 | 12 | 通用、異構源 | 調大 BIND/ROWS、禁用索引/約束/觸發器 |
| 2. SQL*Loader 直接路徑 (DIRECT=TRUE) | 18 | 6 | 大批量、初始載入 | 繞過 SQL 層直寫塊、並行載入、NOLOGGING |
| 3. 外部表 (External Table) | 22 | 8 | ETL 管線、頻繁增量 | CREATE TABLE ... ORGANIZATION EXTERNAL + INSERT /*+ APPEND */ SELECT |
| 4. PL/SQL 批量綁定 (BULK COLLECT/FORALL) | 30 | 10 | 程式化處理、複雜轉換 | 限制 1000 行/批、FORALL SAVE EXCEPTIONS |
| 5. INSERT /*+ APPEND */ 直接路徑插入 | 20 | 7 | 表間遷移、CTAS | NOLOGGING、PARALLEL、禁用索引 |
| 6. Data Pump (impdp) 元數據+數據 | 35 | 15 | 庫遷移、版本升級 | PARALLEL、EXCLUDE=STATISTICS、REMAP_TABLESPACE |
| 7. 異構網關 (DG4ODBC/OLEDB) | 120+ | 40+ | 異構實時同步 | 非大批量首選、網絡延遲敏感 |
DISABLE,導入後重建 (並行、NOLOGGING);NOLOGGING 操作 + ALTER DATABASE NOARCHIVELOG (非生產);PARALLEL (DEGREE N) 匹配 CPU 核心數;INITIAL/NEXT、PCTINCREASE 0 避免頻繁擴展。-- 1. 會話級優化
ALTER SESSION SET DB_FILE_MULTIBLOCK_READ_COUNT = 128;
ALTER SESSION ENABLE PARALLEL DML;
-- 2. 目標表準備
ALTER TABLE calls DISABLE CONSTRAINT pk_calls;
DROP INDEX idx_calls_date;
ALTER TABLE calls NOLOGGING;
-- 3. 直接路徑載入 (External Table 示例)
CREATE TABLE calls_ext (
call_id NUMBER, call_date DATE, emp_id NUMBER, call_type VARCHAR2(12)
)
ORGANIZATION EXTERNAL (
TYPE ORACLE_LOADER
DEFAULT DIRECTORY data_dir
ACCESS PARAMETERS (
RECORDS DELIMITED BY NEWLINE
FIELDS TERMINATED BY '|'
MISSING FIELD VALUES ARE NULL
)
LOCATION ('calls_100k.txt')
)
PARALLEL 4
REJECT LIMIT UNLIMITED;
INSERT /*+ APPEND PARALLEL(calls 4) */ INTO calls
SELECT * FROM calls_ext;
-- 4. 事後重建
ALTER TABLE calls LOGGING;
CREATE UNIQUE INDEX pk_calls ON calls(call_id) PARALLEL 4 NOLOGGING;
ALTER INDEX pk_calls LOGGING;
ALTER TABLE calls ENABLE CONSTRAINT pk_calls;
ANALYZE TABLE calls COMPUTE STATISTICS;
數據導入沒有銀彈,只有「場景匹配 + 參數極致調優 + 自動化管線」。建立基準測試體系,數據驅動方案選型,持續迭代優化。