SQL ServerのAlways On可用性グループを構築する際、重要な設計ポイントのひとつが同期コミットと非同期コミットの選択です。どちらを選ぶかによって、データ保護レベルやシステム性能、障害発生時の復旧方法が大きく変わります。
この記事では、Always On可用性グループにおける同期コミットと非同期コミットの仕組み、それぞれのメリット・デメリット、実際のシステム要件に応じた使い分け方について詳しく解説します。
SQL Server Always On可用性グループとは
SQL Server Always On可用性グループは、データベースの高可用性と災害対策を実現するための機能です。プライマリレプリカと呼ばれる稼働系サーバーから、セカンダリレプリカと呼ばれる待機系サーバーへデータ変更を複製します。
障害が発生した場合、セカンダリレプリカへフェールオーバーすることで、サービス停止時間を短縮できます。金融システムや業務基幹システムなど、停止が大きな影響を与える環境で利用されています。
このデータ同期方法には「同期コミット」と「非同期コミット」の2種類があり、システムの目的に応じて選択します。
同期コミットの仕組みと特徴
同期コミットでは、プライマリレプリカでトランザクションが完了する前に、セカンダリレプリカへのログ転送と書き込み完了を待ちます。
つまり、プライマリ側で更新処理を実行した場合、セカンダリ側にも同じデータが確実に反映されたことを確認してからユーザーへ処理完了を返します。
この仕組みにより、障害発生時のデータ損失をほぼゼロにできます。特に最新データを絶対に失いたくないシステムでは有効な方式です。
同期コミットのメリット
同期コミットの最大のメリットは、データ整合性の高さです。プライマリサーバーが突然停止しても、同期済みのセカンダリへ切り替えることで直前までのデータを利用できます。
例えば、銀行取引や在庫管理システムなど、1件のデータ消失でも問題になる環境では同期コミットが適しています。
同期コミットのデメリット
一方で、セカンダリサーバーへの書き込み完了を待つため、ネットワーク遅延やサーバー性能の影響を受けやすくなります。
遠隔地にあるサーバーへ同期する場合、通信遅延によって更新処理のレスポンスが低下する可能性があります。
非同期コミットの仕組みと特徴
非同期コミットでは、プライマリレプリカがトランザクション処理を完了した時点でユーザーへ結果を返し、セカンダリレプリカへの反映はバックグラウンドで行われます。
そのため、セカンダリ側の処理完了を待つ必要がなく、高速な更新処理が可能です。
ただし、プライマリ障害が発生したタイミングによっては、まだセカンダリへ送信されていないトランザクションが存在するため、データ損失が発生する可能性があります。
非同期コミットのメリット
非同期コミットは、遠距離のデータセンター間での災害対策などに向いています。ネットワーク遅延の影響を抑えながら、別拠点へデータを複製できます。
例えば、本社のSQL Serverと遠隔地のバックアップ拠点を接続する場合、非同期コミットにすることで業務システムへの影響を小さくできます。
非同期コミットのデメリット
非同期コミットでは、障害発生時に最新の数秒から数分程度のデータが失われる可能性があります。
そのため、多少のデータ欠損を許容できるシステムや、主に災害対策目的で利用する環境に適しています。
同期コミットと非同期コミットの使い分け
同期コミットと非同期コミットは、どちらが優れているというものではなく、システム要件によって選択します。
| 項目 | 同期コミット | 非同期コミット |
|---|---|---|
| データ保護 | 非常に高い | 一定のデータ損失リスクあり |
| 性能 | 遅延の影響を受ける | 高速 |
| 適した用途 | 同一拠点の高可用性構成 | 遠隔地バックアップ・災害対策 |
| フェールオーバー | 自動フェールオーバー向き | 手動判断が必要な場合が多い |
例えば、同じデータセンター内にプライマリとセカンダリを配置する場合は、ネットワーク遅延が少ないため同期コミットが選択されることが多くあります。
一方、東京と大阪など離れた拠点間でAlways Onを構成する場合は、業務性能への影響を抑えるため非同期コミットを採用するケースが一般的です。
実際の構成例で考えるAlways On設定
例えば、24時間稼働する販売管理システムで、注文データを絶対に失いたくない場合は、同一データセンター内に同期コミットのセカンダリを配置する構成が適しています。
一方で、自然災害や大規模障害に備えて別地域へデータをコピーしておきたい場合は、非同期コミットを利用して業務システムへの負荷を抑える設計が有効です。
また、1つの可用性グループ内で同期コミットと非同期コミットを組み合わせることも可能です。例えば、近距離のサーバーは同期、遠隔地のサーバーは非同期という構成にすることで、可用性と災害対策を両立できます。
Always On可用性グループを設計する際の注意点
コミット方式を決定する際は、単純にデータ保護だけでなく、ネットワーク帯域、サーバー性能、許容できる停止時間、データ損失許容範囲を考慮する必要があります。
特に同期コミットでは、セカンダリ側のディスク性能やネットワーク品質がプライマリ側の処理性能に影響するため、事前の負荷検証が重要です。
また、障害時にどのような手順でフェールオーバーするのか、復旧後にどのように役割を戻すのかまで含めて設計しておくことが、安全な運用につながります。
まとめ
SQL Server Always On可用性グループの同期コミットは、データ損失を極力防ぎたい高可用性システム向けの方式です。一方、非同期コミットは性能を優先しながら遠隔地へのデータ保護を実現したい場合に適しています。
同一拠点での冗長化には同期コミット、遠隔地への災害対策には非同期コミットという考え方を基本にすると、適切な構成を設計しやすくなります。
重要なのは、システムが求める可用性レベルと許容できるデータ損失範囲を明確にした上で、最適なコミット方式を選択することです。


コメント