先日、SQL Server 2019 CU13 がリリースされました。
CU13 に含まれる内容の中に次の機能があります。
SQL Server 2019 CU13 では、ピアツーピアレプリケーションで、データ競合時に Last Writer Wins による競合の解決ができるようになったことと、可用性グループでピアツーピアレプリケーションがサポートされるようになりました。
ピアツーピアレプリケーションのサポート
従来の AlwaysOn 可用性グループのレプリケーションのサポートについては、Restrictions に記載されています。
CU13 より前については、レプリケーションと可用性グループの制限は次のようになっていました。
CU13 以降は次のように変更されています。
CU13 以降は、AlwaysOn 可用性グループとピアツーピアレプリケーションの組み合わせがサポートされるようになりました。
Last Writer Win の Write-Write レプリケーション
こちらが CU13 の機能追加の本命となりますが、ピアツーピアレプリケーションで、データ競合時に、Last Writer Win のルールによりデータ競合を解消させるレプリケーションの設定ができるようになりました
概要については、Write-write replication with last writer wins conflict resolution で解説されており、詳細については次のドキュメントで公開されています。
- Peer-to-Peer – Conflict Detection in Peer-to-Peer Replication
- Configure last writer conflict detection & resolution
従来のピアツーピアレプリケーションでデータ競合が発生した場合、レプリケーションを停止させるか、Originator ID による競合の解消が使われていたようですが、CU13 では、最後に書き込みを行った内容を競合の解決に使用するという方法をとることができるようになりました。
現時点では、クエリベースで設定をする必要があり、Examples の内容を参考にして、クエリでピアツーピアレプリケーションを設定する必要があります。
設定を行うと、レコード内に、「$sys_md_cd_id」として、非表示の datetime2 のデータ項目が追加され、自動的に UTC のタイムスタンプが記録され、このタイムスタンプを使用して、最後に書き込みが行われたデータで確定させるように競合の解消が行われるようです。
従来のピアツーピアレプリケーションでは、Sharded Solution として、ピアツーピアレプリケーションのノードで更新を行うデータ範囲をアプリケーションの実装として明示的に分割させ、各ノードでは特定のキー範囲のデータのみが変更されるように実装をすることがお薦めされていました。
しかし、今回の更新で、最後の書き込みを優先させるというオプションが増えたことで、ピアツーピアレプリケーションの活用方法の幅が増えたようです。
ピアツーピアレプリケーションはあまり動作を把握できていないので、この機会に動作を把握するのもよさそうですね。