SQL Remote の複数層のアーキテクチャとグループ化

SQL Remote で 3 層アーキテクチャを使用すると、デフォルトのグルーピング動作による副次的な影響が発生します。
Tier 3 (bottom)

insert
commit
insert
commit
insert
commit

(18個の挿入、それぞれが個別にコミット済み)

Tier 2 (middle)
- 18個の操作を受信し、適用中にそれらの操作をグループ化する
(begin)
insert
insert
insert

commit

Tier 1(top)
- 18個の挿入を含んだ1つのトランザクションを受信し、18個のレコードの中の1つでエラーに遭遇する
(begin)
insert
insert
insert – error
insert

rollback

元のトランザクション境界に基づいて、18 個中 17 個の挿入が Tier 1 データベースに正しく到達するはずでした。Tier 2 でのグルーピングにより、18 個の操作が単一のトランザクションのように Tier 2 から Tier 1 に移動したため、18 個の挿入がすべて失われてしまいました。 これを回避/解決するには、dbremote/ssremote で -g スイッチを使用して、グループ・サイズ 1 を指定します。この値を指定するとグルーピングが無効になります。

グルーピングにはパフォーマンス上の利点があり、2 層環境におけるグルーピングについてはまったく問題ありません。トランザクションが中間層で成功して上位層で失敗する確率は比較的低いため、多層アーキテクチャを使用している場合でもグルーピングを利用できます。