SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Server 2019 CU13 で Last Writer Win の Write-Write レプリケーションが使用できるようになりました

leave a comment

先日、SQL Server 2019 CU13 がリリースされました。

CU13 に含まれる内容の中に次の機能があります。

SQL Server 2019 CU13 では、ピアツーピアレプリケーションで、データ競合時に Last Writer Wins による競合の解決ができるようになったことと、可用性グループでピアツーピアレプリケーションがサポートされるようになりました。

ピアツーピアレプリケーションのサポート

従来の AlwaysOn 可用性グループのレプリケーションのサポートについては、Restrictions に記載されています。

CU13 より前については、レプリケーションと可用性グループの制限は次のようになっていました。

image

CU13 以降は次のように変更されています。

image

CU13 以降は、AlwaysOn 可用性グループとピアツーピアレプリケーションの組み合わせがサポートされるようになりました。

Last Writer Win の Write-Write レプリケーション

こちらが CU13 の機能追加の本命となりますが、ピアツーピアレプリケーションで、データ競合時に、Last Writer Win のルールによりデータ競合を解消させるレプリケーションの設定ができるようになりました

概要については、Write-write replication with last writer wins conflict resolution で解説されており、詳細については次のドキュメントで公開されています。

従来のピアツーピアレプリケーションでデータ競合が発生した場合、レプリケーションを停止させるか、Originator ID による競合の解消が使われていたようですが、CU13 では、最後に書き込みを行った内容を競合の解決に使用するという方法をとることができるようになりました。

現時点では、クエリベースで設定をする必要があり、Examples の内容を参考にして、クエリでピアツーピアレプリケーションを設定する必要があります。

設定を行うと、レコード内に、「$sys_md_cd_id」として、非表示の datetime2 のデータ項目が追加され、自動的に UTC のタイムスタンプが記録され、このタイムスタンプを使用して、最後に書き込みが行われたデータで確定させるように競合の解消が行われるようです。

image

従来のピアツーピアレプリケーションでは、Sharded Solution として、ピアツーピアレプリケーションのノードで更新を行うデータ範囲をアプリケーションの実装として明示的に分割させ、各ノードでは特定のキー範囲のデータのみが変更されるように実装をすることがお薦めされていました。

しかし、今回の更新で、最後の書き込みを優先させるというオプションが増えたことで、ピアツーピアレプリケーションの活用方法の幅が増えたようです。

ピアツーピアレプリケーションはあまり動作を把握できていないので、この機会に動作を把握するのもよさそうですね。

Share

Written by Masayuki.Ozawa

10月 7th, 2021 at 11:10 pm

Leave a Reply