BATCHSQL
有效對象
Replicat
說明
使用 BATCHSQL 參數可提升 Replicat 的效能。BATCHSQL 會讓 Replicat 將類似的 SQL 敘述句組織成陣列,並以加速的速率加以套用。Replicat 在正常模式中,一次套用一個 SQL 敘述句。
BATCHSQL 對下列項目有效:
-
i 的 Db2 (V5R4 或 i 6.1 除外)
-
Db2 LUW
-
z/
OS上的 Db2 -
Oracle
-
PostgreSQL
-
SQL Server
-
Sybase
-
Teradata
-
時間 10
何時使用 BATCHSQL
使用 BATCHSQL 之前,請先使用平行 Replicat,然後查看是否可減輕任何 Replicat 延遲。如果沒有,請嘗試啟用 BATCHSQL。如果啟用 BATCHSQL 可提升效能,請將它保持為啟用狀態、停用它,並考慮 Replicat 的其他替代調整練習,例如確保所有表格都有主索引鍵或唯一索引鍵、有限的大型批次作業,以及確保平行 Replicat 有大量的記憶體和 IO 以獲得最佳效能,這表示 Replicat 沒有 IO 繫結或記憶體界限。
當 Replicat 處於 BATCHSQL 模式時,較大資料列變更的效能將會較小。在每一資料列變更 100 個位元組的資料時,已知 BATCHSQL 可將 Replicat 的效能提升高達 300%,但實際效能效益會因混合作業而有所不同。每一資料列大約有 5,000 個位元組的資料變更,使用 BATCHSQL 的優點就會減少。
使用限制
被視為異常狀況的 SQL 敘述句包括:
-
包含
LOB或LONG資料的敘述句。 -
包含長度超過 25k 之資料列的敘述句。
-
目標表格在主索引鍵之外有一或多個唯一索引鍵的敘述句。無法以批次方式處理這類陳述式,因為如果非主要索引鍵的值可能變更,
BATCHSQL不保證其順序正確。 -
(SQL Server) 目標表格有觸發程式的敘述句。
-
導致錯誤的敘述句。
Replicat 在批次模式中遇到異常狀況時,會倒回批次作業,然後嘗試以下列方式套用異常狀況,一律維護交易完整性:
-
第一個 Replicat 嘗試使用一般模式:一次一個 SQL 敘述句在以
GROUPTRANSOPS參數設定的交易界限內。如需詳細資訊,請參閱GROUPTRANSOPS。 -
如果正常模式失敗,Replicat 會嘗試使用來源模式:在來源使用的相同交易界限內套用 SQL。
完成處理例外情況後,Replicat 會恢復 BATCHSQL 模式。
表格 9 Replicat 模式
| 來源異動 (假設相同的表格與欄位清單) | 正常模式的 Replicat 交易 | BATCHSQL 模式下的 Replicat 交易 |
來源模式中的 Replicat 交易 |
|---|---|---|---|
交易 1: ` 插入 ` ` 刪除 ` Transaction2: ` 插入 ` ` 刪除 ` 交易 3: ` 插入 ` ` 刪除 ` |
` 插入 ` ` 刪除 ` ` 插入 ` ` 刪除 ` ` 插入 ` ` 刪除 ` |
` 插入 ` (x3) ` 刪除 ` (x3) |
交易 1: ` 插入 ` ` 刪除 ` 交易 2: ` 插入 ` ` 刪除 ` 交易 3: ` 插入 ` ` 刪除 ` |
BATCHSQL 的運作方式
在 BATCHSQL 模式中,Replicat 會將類似的 SQL 敘述句組織成記憶體佇列內的批次,然後在一個資料庫作業中套用每個批次。批次包含會影響相同表格、作業類型 (插入、更新或刪除) 及資料欄清單的 SQL 敘述句。例如,下列各項皆為批次:
-
插入表格 A
-
插入表格 B
-
表格 A 的更新
-
表格 B 的更新
-
從表格 A 刪除
-
從表格 B 刪除 注意:Oracle GoldenGate 會先分析批次中的外來索引鍵參照相依性,再執行它們。如果在不同批次的陳述式之間存在相依性,則每個批次可能需要一個以上的 SQL 陳述式來維護參考完整性。
控制快取的敘述句數目
MAXSQLSTATEMENTS 參數可控制快取的敘述句數目。如需詳細資訊,請參閱 MAXSQLSTATEMENTS 。舊的敘述句會使用最近使用的最低演算法進行回收。批次會根據指定的臨界值執行 (請參閱)。
預設
已停用 (一般 Replicat 模式的處理作業)
語法
BATCHSQL
[CHECKUNIQUEKEYS | NOCHECKUNIQUEKEYS]
[THREADS (<threadID>[, <threadID>][, ...][, <thread_range> [,<thread_range>][, ...])]
[CHECKUNIQUEKEYS |
NOCHECKUNIQUEKEYS] |
適用於 Replicat。
CHECKUNIQUEKEYS 會在遇到具有唯一索引鍵的表格略過 BATCHSQL 處理時強制排清。這樣可確保在唯一索引鍵變更時,會維護原始的作業順序。
預設值為 NOCHECKUNIQUEKEYS,當遇到具有唯一索引鍵的表格允許 BATCHSQL 處理繼續時,不會強制清除。
THREADS (<threadID>[, <threadID>][, ...][, <thread_range>[, <thread_range>][, ...])
適用於 BATCHESPERQUEUE、BATCHTRANSOPS 和 BYTESPERQUEUE。將這些選項套用到協調式 Replicat 的指定執行緒或執行緒。
<threadID>[, <threadID>][, ...]
指定繫線 ID 或以逗號分隔的繫線清單,格式為 threadID, threadID, threadID。
[, <thread_range>[, <thread_range>][, ...]
以 threadIDlow-threadIDhigh 格式或以逗號分隔的範圍清單 (格式為 threadIDlow-threadIDhigh,threadIDlow-threadIDhigh) 來指定繫線範圍。
允許使用這些格式的組合,例如 threadID、threadID、threadIDlow-threadIDhigh。