BATCHSQL

有効な対象

Replicat

摘要

BATCHSQLパラメータでは、Replicatのパフォーマンスを向上させます。BATCHSQLを使用すると、Replicatは同様のSQL文を配列にまとめてより高速に適用します。標準モードでは、Replicatは1回に1つのSQL文を適用します。

BATCHSQLは次のデータベースに有効です。

BATCHSQLを使用する場合

BATCHSQLを使用する前に、パラレルReplicatを使用して、Replicatのラグが緩和されるかどうかを確認します。そうでない場合は、BATCHSQLを有効にしてみてください。BATCHSQLを有効にするとパフォーマンスが向上する場合は、他の方法で有効にしたままにし、無効にして、すべての表に主キーまたは一意キーがあること、大規模なバッチ操作を制限すること、およびパラレルReplicatが最適なパフォーマンスのために十分なメモリーとIOを持つこと(ReplicatがIOバインドまたはメモリー・バインドされていないことを意味します)など、Replicatの他の代替チューニング演習を検討してください。

ReplicatがBATCHSQLモードの場合、小さな行の変更は大きな行の変更よりも高いパフォーマンスの向上を示します。行変更当たりのデータ量が100バイトの場合、BATCHSQLを使用することによってReplicatのパフォーマンスが最大で300%向上することがわかっていますが、実際のパフォーマンス向上は、混在する操作に応じて異なります。行変更当たりのデータ量が約5,000バイトの場合、BATCHSQLを使用するメリットは低下します。

使用制限

例外として処理されるSQL文には、次のものが含まれます。

Replicatはバッチ・モードで例外が発生すると、バッチ操作をロールバックし、次の方法で例外の適用を試行し、常にトランザクションの整合性を維持します。

例外処理が終了すると、ReplicatはBATCHSQLモードを再開します。

表9 Replicatモード

ソース・トランザクション(同じ表および列リストであると仮定) 標準モードでのReplicatトランザクション BATCHSQLモードでのReplicatトランザクション ソース・モードでのReplicatトランザクション

トランザクション 1:

`挿入`

`削除`

Transaction2:

`挿入`

`削除`

トランザクション 3:

`挿入`

`削除`

`挿入`

`削除`

`挿入`

`削除`

`挿入`

`削除`

`挿入` (x3)

`削除` (x3)

トランザクション 1:

`挿入`

`削除`

トランザクション 2:

`挿入`

`削除`

トランザクション 3:

`挿入`

`削除`

BATCHSQLの動作

BATCHSQLモードでは、Replicatは同様のSQL文をメモリー・キュー内でバッチにまとめ、1回のデータベース操作で各バッチを適用します。1つのバッチに含まれるSQL文は、同一の表、操作タイプ(挿入、更新または削除)および列リストを処理します。たとえば、次の各グループは1つのバッチです。

キャッシュされる文の数の制御

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の指定した1つ以上のスレッドに適用します。

<threadID>[, <threadID>][, ...]

threadID, threadID, threadIDというフォーマットでスレッドIDまたはスレッドのカンマ区切りリストを指定します。

[, <thread_range>[, <thread_range>][, ...]

スレッドの範囲をthreadIDlow-threadIDhighの形式で指定するか、範囲のカンマ区切りリストをthreadIDlow-threadIDhigh, threadIDlow-threadIDhighの形式で指定します。

threadID, threadID, threadIDlow-threadIDhighのように、これらの形式を組み合せて指定することもできます。