“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かそれ以上のサイズが目安となりますが、あくまで目安です。
最適なサイズはデータベースの処理能力に依存します。
関連したトピックス
- Database Performance Analyzerによる待ち時間異常の調査の具体例 [DPA]
- RDBからTeradata/Hadoopへのレプリケーション対応、Oracle/MySQLパフォーマンス向上等・・・DBMoto 9 最新機能
- リフレッシュ時のcommitタイミング【リアルタイムレプリケーションツールDBMoto】
- イニシャル・リフレッシュを行った時のリフレッシュとミラーリングでのトランザクション管理【DBMoto】
- SourceとTarget等の設定について【リアルタイムレプリケーションツールDBMoto】
- 初期同期(リフレッシュ)をもっと柔軟にリフレッシュフィルタ機能[DBMoto]
- テーブル一括作成やマッピングをカスタマイズ:グローバルスクリプト[Syniti Replicate]
- DBMotoを使用してデータベース変更用の監査ログの作成方法【リアルタイムレプリケーションツールDBMoto】
- 初期同期(リフレッシュ)がより便利に! ステージングリフレッシュ機能
- SQL Server の Datetime がMySQLの varchar にマップ【リアルタイムレプリケーションツールDBMoto】