動的管理ビューおよびシステム カタログ ビュー (Always On 可用性グループ)

適用対象 SQL Server

このトピックでは、可用性グループの監視とトラブルシューティングに使用できる Always On 動的管理ビュー (DMV) に対する一般的なクエリをいくつか紹介します。

ヒント

Always On ダッシュボードでは、各テーブル ヘッダーを右クリックし、表示または非表示にする DMV を選択することで、可用性レプリカおよび可用性データベース用の多数の DMV を表示する GUI を簡単に構成できます。

可用性グループの DMV の詳細については、「AlwaysOn 可用性グループの動的管理ビューおよび関数 (Transact-SQL)」を参照してください。 可用性グループ カタログ ビューの詳細については、「Always On 可用性グループ カタログ ビュー (Transact-SQL)」を参照してください。

WSFC クラスター ノード構成を確認する

次の Transact-SQL (T-SQL) クエリでは、現在の Windows Server フェールオーバー クラスタリング (WSFC) クラスター内のすべてのノードの状態が取得されます。

use master  
go  
select * from sys.dm_hadr_cluster_members  
go  

この結果セットでは、現在の WSFC クラスターの各メンバー ノードの状態が報告されます。 クォーラムがノードとファイル共有マジョリティとして定義されている場合は、ファイル共有も報告されます。 各ノードの投票の重み (number_of_quorum_votes 値) を含め、各ノードの状態を確認できます。

クラスター ネットワークを探索する

次のクエリでは、現在の WSFC クラスターのネットワーク構成が取得されます。

select * from sys.dm_hadr_cluster_networks  

結果セットには、WSFC クラスター内のネットワーク アダプターごとに 1 行が含まれています。 たとえば、各ノードに 2 つのネットワーク アダプターを含む 2 ノード クラスターの場合、このクエリで 4 行が返されます。

可用性グループを探索する

次のクエリでは、可用性グループに関する情報が取得されます。

select primary_replica, primary_recovery_health_desc, synchronization_health_desc from sys.dm_hadr_availability_group_states  
go  
select * from sys.availability_groups  
go  
select * from sys.availability_groups_cluster  
go  

DMV sys.dm_hadr_availability_group_states (Transact-SQL)sys.availability_groups (Transact-SQL)、および sys.availability_groups_cluster では、いずれも現在の WSFC クラスター内の可用性グループに関する情報が返されます。 実際のところ、sys.availability_groups (Transact-SQL)sys.availability_groups_cluster では同じ情報が返されるようです。

ただし、sys.availability_groups_cluster では WSFC クラスターに格納されている可用性グループのメタデータが報告されますが、sys.availability_groups (Transact-SQL) では SQL Server プロセス空間にキャッシュされている可用性グループ メタデータが報告されます。 さらに、これら 2 つの DMV で構成情報が報告されますが、sys.dm_hadr_availability_group_states (Transact-SQL) では可用性グループの現在の正常性状態が報告されます。

重要

この命名規則は、可用性レプリカと可用性データベースを文書化した DMV に引き継がれます。

可用性レプリカを探索する

次のクエリでは、可用性グループに定義されている可用性レプリカに関する情報が取得されます。

select replica_id, role_desc, connected_state_desc, synchronization_health_desc from sys.dm_hadr_availability_replica_states  
go  
select replica_server_name, replica_id, availability_mode_desc, endpoint_url from sys.availability_replicas  
go  
select replica_server_name, join_state_desc from sys.dm_hadr_availability_replica_cluster_states  
go  

可用性グループ DMV と同様に、可用性レプリカについて報告する 3 つの DMV があります。 sys.dm_hadr_availability_replica_states では、SQL Server のローカルにキャッシュされている可用性レプリカに関する状態情報が報告され、sys.dm_hadr_availability_replica_cluster_states では、WSFC クラスターから可用性レプリカに関する状態情報が報告されます。 最後に、sys.availability_replicas では、SQL Server のローカルにキャッシュされている可用性レプリカの構成データが報告されます。

可用性レプリカ ヘルスの正常性を探索する

次のクエリでは、可用性レプリカに関する現在の正常性情報が取得されます。

select replica_id, role_desc, recovery_health_desc, synchronization_health_desc from sys.dm_hadr_availability_replica_states  
go  

プライマリ レプリカとセカンダリ レプリカのクエリ結果を比較すると、セカンダリ レプリカでは、そのレプリカについての状態情報のみが報告され、可用性グループ内の他のレプリカについては報告されないことがわかります。

可用性データベースを探索する

次のクエリでは、可用性グループに定義されている可用性レプリカに関する情報が取得されます。 可用性データベース上のデータ移動を停止する前後で、クエリ結果の変化を確認することができます。

select * from sys.availability_databases_cluster  
go  
select group_database_id, database_name, is_failover_ready  from sys.dm_hadr_database_replica_cluster_states  
go  
select database_id, synchronization_state_desc, synchronization_health_desc, last_hardened_lsn, redo_queue_size, log_send_queue_size from sys.dm_hadr_database_replica_states  
go  

この場合も、3 台の Always On DMV から可用性データベースについて報告されます。 sys.availability_databases_cluster では、WSFC クラスターから可用性データベースに関する構成情報が報告されます。 sys.dm_hadr_database_replica_cluster_states では、SQL Server のローカルにキャッシュされているデータベース レプリカに関する状態情報が報告されます。 この報告には、可用性レプリカのフェールオーバーの準備などのいくつかの重要な状態情報が含まれています。 最後に、sys.dm_hadr_database_replica_states は、プライマリおよびセカンダリ データベース レプリカのログの LSN 進行情報など、各可用性データベースの ID と状態情報を報告する非常に詳細な結果セットです。

可用性データベースの正常性を探索する

次のクエリでは、レプリカ上の各可用性データベースの正常性に関する情報が取得されます。 可用性データベース上のデータ移動を停止する前後で、クエリ結果の変化を確認することができます。

select dc.database_name, dr.database_id, dr.synchronization_state_desc,   
dr.suspend_reason_desc, dr.synchronization_health_desc  
from sys.dm_hadr_database_replica_states dr  join sys.availability_databases_cluster dc  
on dr.group_database_id=dc.group_database_id   
where is_local=1  
go