批 SQL

有效对象

复制

说明

使用 BATCHSQL 参数可提高复制的性能。BATCHSQL 使 Replicat 可以将类似的 SQL 语句组织成数组,并加快应用速度。在正常模式下,复制一次应用一个 SQL 语句。

BATCHSQL 对以下项有效:

何时需要使用 BATCHSQL

在使用 BATCHSQL 之前,请使用并行复制并查看它是否缓解了任何复制滞后。如果未启用,则尝试启用 BATCHSQL。如果启用 BATCHSQL 提高了性能,则将其保持启用状态,禁用它,并考虑对复制的其他替代优化练习,例如确保所有表都具有主键或唯一键,限制大型批处理操作,并确保并行复制具有足够的内存和 IO 以实现最佳性能,这意味着复制不是 IO 绑定或内存绑定。

当 Replicat 处于 BATCHSQL 模式时,较小的行更改将显示比较大的行更改更高的性能。在每行更改 100 字节的数据时,已知 BATCHSQL 可将 Replicat 的性能提高多达 300%,但实际的性能优势会因操作组合而异。在每行大约 5,000 字节的数据更改时,使用 BATCHSQL 的好处会减少。

使用限制

视为异常的 SQL 语句包括:

当 Replicat 在批处理模式下遇到异常时,它会回滚批处理操作,然后尝试通过以下方式应用异常,始终保持事务处理完整性:

完成处理异常后,复制将恢复 BATCHSQL 模式。

表 9 复制模式

源事务处理(假定表和列列表相同) 以正常模式复制事务处理 以 BATCHSQL 模式复制事务处理 以源模式复制事务处理

事务处理 1:

` 插入 `

` 删除 `

Transaction2:

` 插入 `

` 删除 `

事务处理 3:

` 插入 `

` 删除 `

` 插入 `

` 删除 `

` 插入 `

` 删除 `

` 插入 `

` 删除 `

` 插入 ` (x3)

` 删除 ` (x3)

事务处理 1:

` 插入 `

` 删除 `

事务处理 2:

` 插入 `

` 删除 `

事务处理 3:

` 插入 `

` 删除 `

BATCHSQL 的工作原理

在 BATCHSQL 模式下,Replicat 将类似的 SQL 语句组织为内存队列中的批处理,然后在一个数据库操作中应用每个批处理。批处理包含影响相同表、操作类型(插入、更新或删除)和列列表的 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。