検索
連載

Always On 可用性グループのレプリカの状態を出力するSQL Server動的管理ビューレファレンス(6)

「Microsoft SQL Server」が稼働するデータベースシステムを運用する管理者に向け、「動的管理ビュー」の活用を軸にしたトラブル対策のためのノウハウを紹介していきます。今回は、Always On 可用性グループのレプリカの状態を出力する「sys.dm_hadr_availability_replica_states」を解説します。

Share
Tweet
LINE
Hatena

SQL Server動的管理ビュー一覧

 本連載では、「Microsoft SQL Server(以下、SQL Server)」で使用可能な動的管理ビューについて、動作概要や出力内容などを紹介していきます。Always On 可用性グループのレプリカの状態を出力する「sys.dm_hadr_availability_replica_states」を解説します。対応バージョンはSQL Server 2012以降です。

概要

 「sys.dm_hadr_availability_replica_states」動的管理ビューを出力することで、可用性グループレプリカの詳細な状態を確認することができます。

 プライマリレプリカに接続して出力した場合には、全てのセカンダリレプリカについて情報が出力されます。ただし、セカンダリレプリカについての一部の情報は出力されません。セカンダリレプリカに接続して出力した場合には、接続しているセカンダリレプリカに関する情報のみが出力されます。

出力内容

列名 データ型 説明
replica_id uniqueidentifier レプリカID
group_id uniqueidentifier 可用性グループID
is_local bit このレプリカがローカルレプリカかどうか
 0 = いいえ
 1 = はい
role tinyint このレプリカの現在のロール
 0 = 解決中
 1 = プライマリ
 2 = セカンダリ
role_desc nvarchar(60) role の説明
 RESOLVING
 PRIMARY
 SECONDARY
operational_state tinyint レプリカの現在の操作状態
 0 = フェールオーバー保留
 1 = 保留中
 2 = オンライン
 3 = オフライン
 4 = 失敗
 5 = 失敗、クォーラムなし
 NULL = レプリカがローカルでない
operational_state_desc nvarchar(60) operational_state の説明
 PENDING_FAILOVER
 PENDING
 ONLINE
 OFFLINE
 FAILED
 FAILED_NO_QUORUM
 NULL
recovery_health tinyint レプリカデータベースの状態
 0 = オンラインでないレプリカデータベースが存在する
 1 = 全てのレプリカデータベースがオンライン
 NULL = このレプリカがローカルではない場合
recovery_health_desc nvarchar(60) recovery_healthの説明
 ONLINE_IN_PROGRESS
 ONLINE
 NULL
synchronization_health tinyint レプリカデータベースの同期状態
 0 = 同期が停止されているデータベースが存在する
 1 = 部分的に正常な状態 (一部が同期中)
 2 = 正常な状態
synchronization_health_desc nvarchar(60) synchronization_health の説明
 NOT_HEALTHY
 PARTIALLY_HEALTHY
 HEALTHY
connected_state tinyint セカンダリレプリカとプライマリレプリカの接続状態
 0 = 未接続
 1 = 接続済み
connected_state_desc nvarchar(60) connection_state の説明
 DISCONNECTED
 CONNECTED
last_connect_error_number int 最後に発生した接続エラーの番号
last_connect_error_description nvarchar(1024) 最後に発生した接続エラーメッセージ
last_connect_error_timestamp datetime 最後に発生した接続エラーの発生日時

動作例

 3ノードの可用性グループを構成しました(図1)。

図1
図1 構成した可用性グループ。

 全ての可用性レプリカが正常な状態で、プライマリレプリカで「sys.dm_hadr_availability_replica_states」動的管理ビューを出力します(図2)。

図2
図2 プライマリレプリカで出力すると、全てのレプリカの情報が表示される

 全てのレプリカの「connected_state_desc」列が「CONNECTED」となっており、「synchronization_health_desc」列が「HEALTHY」となっていることから、全てのレプリカに接続できており、データベースの同期も正常であることが分かります。このように、プライマリレプリカで出力された内容を確認することで、可用性グループで問題が発生していないかについて確認できます。

 プライマリレプリカで出力した場合、プライマリレプリカについては全ての列の情報が表示されますが、セカンダリレプリカはローカルインスタンスではないため、一部の列の情報が表示されません。セカンダリレプリカの全ての列について情報を表示するには、そのセカンダリレプリカで出力する必要があります(図3)。

図3
図3 セカンダリレプリカで出力すると、そのレプリカの詳細な情報のみが表示される

 この状態から、1つのセカンダリレプリカのネットワーク接続を切断します。1ノードの停止であるため、可用性グループは停止されません。

 プライマリレプリカで「sys.dm_hadr_availability_replica_states」動的管理ビューを出力すると、ネットワーク接続を切断したセカンダリレプリカの「connected_state_desc」列が「DISCONNECTED」となり、接続が切断されたことを確認できます。また、「last_connect_error_number」列、「last_connect_error_description」列、「last_connect_error_timestamp」列から、接続が解除された原因や日時について確認できます(図4)。

図4
図4 1つのノードが未接続になっており、接続が切断された原因を確認できる

 その後、ネットワーク接続を復旧すると可用性グループの状態は正常に戻ります。

 「sys.dm_hadr_availability_replica_states」動的管理ビューを出力すると、「last_connect_error_number」列、「last_connect_error_description」列、「last_connect_error_timestamp」列の値は「NULL」となり、原因は確認できなくなりました(図5)。

図5
図5 接続が回復した後は、接続エラーの情報は見えなくなる

※本Tipsは、「Windows Server 2019」上に「SQL Server 2019 CTP2」をインストールした環境を想定して解説しています。

筆者紹介

椎名 武史(しいな たけし)

日本ユニシス株式会社所属。Microsoft MVP for Data Platform(2017〜)。入社以来 SQL Serverの評価/設計/構築/教育などに携わりながらも、主にサポート業務に従事。SQL Serverのトラブル対応で社長賞の表彰を受けた経験も持つ。休日は学生時代の仲間と市民駅伝に参加し、銭湯で汗を流してから飲み会へと流れる。

伊東 敏章(いとう としあき)

日本ユニシス株式会社所属。入社以来SQL Server一筋で評価/設計/構築/教育などに携わりながらも、主にサポート業務に従事。社内のプログラミングコンテストで4回の優勝経験も持つ。趣味は輪行で週末は自転車を持っての旅行。目標は色々な日本百選を制覇すること。


Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る