Always On 可用性グループのレプリカの状態を出力する:SQL Server動的管理ビューレファレンス(6)
「Microsoft SQL Server」が稼働するデータベースシステムを運用する管理者に向け、「動的管理ビュー」の活用を軸にしたトラブル対策のためのノウハウを紹介していきます。今回は、Always On 可用性グループのレプリカの状態を出力する「sys.dm_hadr_availability_replica_states」を解説します。
本連載では、「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)。
全ての可用性レプリカが正常な状態で、プライマリレプリカで「sys.dm_hadr_availability_replica_states」動的管理ビューを出力します(図2)。
全てのレプリカの「connected_state_desc」列が「CONNECTED」となっており、「synchronization_health_desc」列が「HEALTHY」となっていることから、全てのレプリカに接続できており、データベースの同期も正常であることが分かります。このように、プライマリレプリカで出力された内容を確認することで、可用性グループで問題が発生していないかについて確認できます。
プライマリレプリカで出力した場合、プライマリレプリカについては全ての列の情報が表示されますが、セカンダリレプリカはローカルインスタンスではないため、一部の列の情報が表示されません。セカンダリレプリカの全ての列について情報を表示するには、そのセカンダリレプリカで出力する必要があります(図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)。
その後、ネットワーク接続を復旧すると可用性グループの状態は正常に戻ります。
「sys.dm_hadr_availability_replica_states」動的管理ビューを出力すると、「last_connect_error_number」列、「last_connect_error_description」列、「last_connect_error_timestamp」列の値は「NULL」となり、原因は確認できなくなりました(図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.
関連記事
- SQL Serverの動的管理ビューとは?
「Microsoft SQL Server」が稼働するデータベースシステムを運用する管理者に向け、「動的管理ビュー」の活用を軸にしたトラブル対策のためのノウハウを紹介していきます。 - 「DMV(Dynamic Management View)」でパフォーマンス遅延の「原因」を調べる
本連載は、「Microsoft SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は、「処理遅延の原因を追求する“DMVの使い方”」を説明します。 - SQL Serverの動きを制御する「トレースフラグ」とは何か
「Microsoft SQL Server」が稼働するデータベースシステムを運用する管理者に向け、「トレースフラグ」の活用を軸にしたトラブル対策のためのノウハウを紹介していきます。初回は「トレースフラグとはそもそも何か」を解説します。