web-dev-qa-db-ja.com

セカンダリがダウンした場合、プライマリでAlwaysOnコミット

2つのノードのSQL Server AlwaysOn可用性グループが自動フェールオーバーと同期モードで構成されています。

これで、同期モードでは、トランザクションは最初にセカンダリレプリカでコミットする必要があり、その確認応答の後でのみ、プライマリノードでコミットされます。

セカンダリレプリカノードがダウンした場合、セカンダリがアップしない限り、トランザクションはプライマリノードでのみコミットされませんか?トランザクションがディスクに固定化されませんか?

3
Shaurya S

Books Onlineには、これに関して非常に優れたページがあります 、以下を含みます。

プライマリのセッションタイムアウト期間がセカンダリレプリカによって超過された場合、プライマリレプリカは一時的にそのセカンダリレプリカの非同期コミットモードに移行します。セカンダリレプリカがプライマリレプリカに再接続すると、同期コミットモードが再開されます。

別の言い方をすれば、プライマリーはトランザクションを短期間保持し、トランザクションの完了を妨げるブロッキングロックがあるように感じます。プライマリがセカンダリをあきらめると、トランザクションは通過しますが、プライマリでのみ強化され、使用できないセカンダリは強化されません。

デフォルトのセッションタイムアウト期間は10秒です。

特定の数のセカンダリが利用可能な場合にのみプライマリがトランザクションを受け入れるようにするには、SQL Server 2017にアップグレードし、新しいREQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT設定を使用する必要があります。

6
Brent Ozar