Insert、Bulk Insertモードについて【リアルタイムレプリケーションツールDBMoto】


“Single Insert”モードで「auto-commit 」モードで実行した時、
全てのレコードは1レコード毎に自動でCommitされます。
“Single Insert”モードはレコード毎にCommitするので、
Rollbackはしません。

DBMotoの”Single Insert”モードは、通常のCommitとRollbackの手法とは
違い、リフレッシュの途中でReplicator を止めたとしても、
既にInsert済みのレコードは、Target Tableに常駐しています。
そしてReplicatorを再開すると、Taget TableにInsertされたレコードを
全てDeleteし、もう一度初めからRefreshし直す、という動作になります。

これに対し、”Bulk Insert”モードと”Simulated Bulk”モードは、
レコードの集まりを一括して、「1ブロック」として処理し、ブロック単位で
Commit、またはRollbackします。

例えば10ブロック中、4ブロックのレプリケーションが終わり、5ブロック目の
レプリケーションを実行途中でReplicatorを止めると、5ブロック目の最初の
データへRollbackします。
再開した場合は5ブロック目の最初からレプリケーションを行います。

ブロックサイズの単位はレコードで、デフォルトが50レコードです。
レコードサイズはbytesで下記の様に計算します。

【1レコード(bytes)=1レコードのフィールド合計】
【1ブロック(bytes)=1レコード × レコード数】

可変長のVARCHAR(200)等のフィールドは、200bytesとして計算するのでは
なく、テーブル全体から見たVARCHAR(200)フィールドの平均値をベースに
計算します。

上記の計算式から算出されるブロックサイズは、通常1ブロックあたり
512kbytesかそれ以上のサイズが目安となりますが、あくまで目安です。
最適なサイズはデータベースの処理能力に依存します。

関連したトピックス