批 SQL
有效对象
复制
说明
使用 BATCHSQL 参数可提高复制的性能。BATCHSQL 使 Replicat 可以将类似的 SQL 语句组织成数组,并加快应用速度。在正常模式下,复制一次应用一个 SQL 语句。
BATCHSQL 对以下项有效:
-
i 的 Db2(V5R4 或 i 6.1 除外)
-
Db2 LUW
-
z/
OS上的 Db2 -
Oracle
-
PostgreSQL
-
SQL Server
-
Sybase
-
Teradata
-
时间 1
何时需要使用 BATCHSQL
在使用 BATCHSQL 之前,请使用并行复制并查看它是否缓解了任何复制滞后。如果未启用,则尝试启用 BATCHSQL。如果启用 BATCHSQL 提高了性能,则将其保持启用状态,禁用它,并考虑对复制的其他替代优化练习,例如确保所有表都具有主键或唯一键,限制大型批处理操作,并确保并行复制具有足够的内存和 IO 以实现最佳性能,这意味着复制不是 IO 绑定或内存绑定。
当 Replicat 处于 BATCHSQL 模式时,较小的行更改将显示比较大的行更改更高的性能。在每行更改 100 字节的数据时,已知 BATCHSQL 可将 Replicat 的性能提高多达 300%,但实际的性能优势会因操作组合而异。在每行大约 5,000 字节的数据更改时,使用 BATCHSQL 的好处会减少。
使用限制
视为异常的 SQL 语句包括:
-
包含
LOB或LONG数据的语句。 -
包含长度超过 25k 的行的语句。
-
目标表除主键外具有一个或多个唯一键的语句。此类语句无法批量处理,因为如果非主键的值可能发生变化,
BATCHSQL无法保证其顺序正确。 -
(SQL Server) 目标表具有触发器的语句。
-
导致错误的语句。
当 Replicat 在批处理模式下遇到异常时,它会回滚批处理操作,然后尝试通过以下方式应用异常,始终保持事务处理完整性:
-
第一个复制尝试使用常规模式:在使用
GROUPTRANSOPS参数设置的事务处理边界内,一次一个 SQL 语句。有关更多信息,请参见 "GROUPTRANSOPS"。 -
如果正常模式失败,Replicat 会尝试使用源模式:在源上使用的同一事务处理边界内应用 SQL。
完成处理异常后,复制将恢复 BATCHSQL 模式。
表 9 复制模式
| 源事务处理(假定表和列列表相同) | 以正常模式复制事务处理 | 以 BATCHSQL 模式复制事务处理 |
以源模式复制事务处理 |
|---|---|---|---|
事务处理 1: ` 插入 ` ` 删除 ` Transaction2: ` 插入 ` ` 删除 ` 事务处理 3: ` 插入 ` ` 删除 ` |
` 插入 ` ` 删除 ` ` 插入 ` ` 删除 ` ` 插入 ` ` 删除 ` |
` 插入 ` (x3) ` 删除 ` (x3) |
事务处理 1: ` 插入 ` ` 删除 ` 事务处理 2: ` 插入 ` ` 删除 ` 事务处理 3: ` 插入 ` ` 删除 ` |
BATCHSQL 的工作原理
在 BATCHSQL 模式下,Replicat 将类似的 SQL 语句组织为内存队列中的批处理,然后在一个数据库操作中应用每个批处理。批处理包含影响相同表、操作类型(插入、更新或删除)和列列表的 SQL 语句。例如,以下每项都是批处理:
-
插入表 A
-
插入表 B
-
对表 A 的更新
-
对表 B 的更新
-
从表 A 中删除
-
从表 B 中删除。注:Oracle GoldenGate 在执行批处理之前会分析批处理中的外键引用相关性。如果不同批的语句之间存在相关性,则可能需要每个批有多个 SQL 语句来维护引用完整性。
控制高速缓存的语句数
MAXSQLSTATEMENTS 参数控制缓存的语句数。有关更多信息,请参见 "MAXSQLSTATEMENTS "。旧语句将使用最近使用最少算法进行回收。批将根据指定的阈值执行(请参见)。
默认值
Disabled(正常复制模式下的进程)
语法
BATCHSQL
[CHECKUNIQUEKEYS | NOCHECKUNIQUEKEYS]
[THREADS (<threadID>[, <threadID>][, ...][, <thread_range> [,<thread_range>][, ...])]
[CHECKUNIQUEKEYS |
NOCHECKUNIQUEKEYS] |
对复制有效。
遇到具有唯一键的表时,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。