SQL ServerのAlways On可用性グループやミラーリングを使ったデータベース環境で、「可用性の状態エラー」や「同期保留中」というエラーが発生して困った経験はないでしょうか。
これらのエラーは高可用性データベース環境でしばしば発生する問題であり、適切な原因特定と対処が必要です。
本記事では、可用性の状態エラーの意味・主な原因・同期保留中の状態の意味・具体的な対処方法と解決手順について詳しく解説していきます。
SQL Serverの管理・運用を担当するDBエンジニア・インフラエンジニアの方に役立つ内容をお届けします。
可用性の状態エラーとは何か?基本的な意味と発生背景
それではまず、可用性の状態エラーの基本的な意味と発生背景について解説していきます。
可用性の状態エラーとは、SQL ServerのAlways On可用性グループ環境において、プライマリレプリカとセカンダリレプリカ間のデータ同期や接続状態に問題が生じた際に発生するエラーの総称です。
Always On可用性グループの基本的な仕組み
Always On可用性グループはSQL Server 2012以降で提供される高可用性・ディザスタリカバリ機能であり、プライマリデータベースのトランザクションログをセカンダリレプリカにリアルタイムで転送・適用することでデータを同期します。
プライマリレプリカで発生したトランザクションはログとしてセカンダリレプリカに送信され、セカンダリ側で適用されることでデータの一貫性が保たれます。
この同期プロセスに何らかの問題が発生したとき、可用性の状態エラーが発生します。
主な可用性状態の種類
SQL Server Management Studio(SSMS)のAlways Onダッシュボードでは、可用性グループの状態が以下のように表示されます。
「同期済み(Synchronized)」:正常。プライマリとセカンダリのデータが同期されている。
「同期中(Synchronizing)」:同期処理が進行中。一時的な状態として正常な場合もある。
「同期保留中(Synchronization Suspended)」:同期が一時停止している。手動または自動で一時停止された状態。
「未接続(Not Connected)」:セカンダリレプリカとの接続が失われた状態。
「問題あり(Issue Detected)」:可用性グループに問題が検出された状態。
「同期保留中」や「未接続」の状態は可用性グループの保護機能が正常に機能していない状態であり、速やかな原因調査と対処が必要です。
可用性の状態エラーが引き起こすリスク
可用性の状態エラーが続くと、フェイルオーバー時にセカンダリへの切り替えができない状態や、セカンダリ側のデータがプライマリから大幅に遅延した状態が続くリスクがあります。
ディザスタリカバリを目的とした可用性グループでは、このような状態が続くとプライマリ障害時にデータが失われる(RPOが達成できない)危険性があるため、早急な対処が求められます。
同期保留中エラーの主な原因と調査方法
続いては、同期保留中エラーの主な原因と調査方法を確認していきます。
「同期保留中」の状態はいくつかの異なる原因によって引き起こされます。
手動による同期の一時停止
最も単純な原因として、管理者が意図的に同期を一時停止(Suspend)した場合があります。
大規模なデータ操作・バックアップ処理・メンテナンス作業などを行う際に同期を一時停止することがあり、作業後に再開(Resume)するのを忘れた場合にこの状態が残ることがあります。
SSMSのAlways Onダッシュボードまたは以下のT-SQLで再開できます。
同期再開のT-SQL:
ALTER DATABASE [データベース名] SET HADR RESUME;
※セカンダリレプリカ上で実行します
ネットワーク問題による同期中断
プライマリとセカンダリ間のネットワーク接続が不安定または切断された場合、ログの転送が中断されて同期保留中になることがあります。
ネットワーク帯域幅の不足・パケットロス・ファイアウォール設定の変更などが原因となりうるため、ネットワーク状態の確認が必要です。
Windowsのイベントログ・SQL Serverのエラーログ・sys.dm_hadr_database_replica_statesのDMVを参照することで同期遅延の状況を詳細に確認できます。
ディスク容量不足・I/Oボトルネック
セカンダリレプリカのディスク容量が不足している場合や、ディスクのI/Oが極端に遅い場合にもログの適用が追いつかず同期が保留・遅延する原因となります。
セカンダリサーバーのディスク使用率・I/Oパフォーマンスカウンター・SQL Serverのログ適用速度(redo queue)を確認することが診断の基本です。
可用性の状態エラーの対処方法と予防策
続いては、可用性の状態エラーへの具体的な対処方法と予防策を確認していきます。
エラーの種類と原因に応じた適切な対処を行うことが、迅速な問題解決につながります。
基本的な診断手順
可用性の状態エラーが発生したときの基本的な診断手順は以下の通りです。
手順1:SSMSのAlways Onダッシュボードで現在の状態と警告内容を確認する
手順2:SQL Serverエラーログ(ERRORLOG)でエラーメッセージを確認する
手順3:Windowsイベントログ(システム・アプリケーション)でハードウェア・OSレベルの問題を確認する
手順4:sys.dm_hadr_database_replica_states DMVでログ送信遅延・適用遅延の状況を確認する
手順5:ネットワーク疎通・ポート5022(Endpointポート)の接続を確認する
同期再開とデータ整合性の確認
同期保留中の状態を解除するには、原因を特定して解消した上でALTER DATABASE … SET HADR RESUMEコマンドで同期を再開します。
同期再開後はAlways Onダッシュボードの状態が「同期中」→「同期済み」に変化することを確認し、プライマリとセカンダリのデータが完全に同期されたことを確認します。
予防策とモニタリングの強化
可用性の状態エラーを予防するためには、Always On可用性グループの状態を常時監視して異常を早期に検知する仕組みを整えることが重要です。
SQL Server Agentアラートの設定・AzureモニターやSCOM(System Center Operations Manager)による監視・定期的なAlways Onダッシュボードの確認を組み合わせることで、問題の早期発見と迅速な対応が可能になります。
まとめ
本記事では、可用性の状態エラーの意味・同期保留中の原因・診断手順・対処方法・予防策について解説してきました。
SQL ServerのAlways On可用性グループにおける可用性の状態エラーは、ネットワーク問題・ディスク不足・手動一時停止・ハードウェア障害など様々な原因で発生します。
エラーログ・DMV・ダッシュボードを組み合わせた体系的な診断と、原因解消後の同期再開・データ整合性確認という手順で対処することが根本的な解決策であり、常時監視体制の整備が再発防止の鍵となります。
高可用性データベース環境の安定した運用に向けて、定期的なAlways On可用性グループの状態確認と監視体制の強化に取り組んでいきましょう。