可用性グループの拡張イベントを構成する
適用対象 SQL Server
SQL Server では、可用性グループに固有の拡張イベントが定義されています。 可用性グループのトラブルシューティングの際、セッション内のこのような拡張イベントを監視すれば、根本原因を容易に診断することができます。 可用性グループの拡張イベントは、次のクエリを使用して表示することができます。
SELECT * FROM sys.dm_xe_objects WHERE name LIKE '%hadr%';
alwayson_health セッション
可用性グループを作成し、可用性グループ関連のイベントのサブセットをキャプチャすると、alwayson_health
拡張イベント セッションが自動的に作成されます。 このセッションは、可用性グループをトラブルシューティングする際にすぐに開始することができる有効かつ便利なツールとしてあらかじめ構成されています。 可用性グループの作成ウィザードでは、このウィザードで構成されたすべての参加中の可用性レプリカに対してセッションを自動的に開始します。
重要
この新しい可用性グループ ウィザードを使用して可用性グループを作成していない場合、alwayson_health
セッションは自動的に開始されない場合があります。 このセッションが開始していない場合は、予期せぬ問題が発生しても、イベント データをキャプチャすることはできません。 セッションを手動で開始してから、セッションのプロパティを設定してセッションが自動的に開始されるように構成する必要があります。
alwayson_health
セッションの定義を表示するには:
オブジェクト エクスプローラーで [管理]、[拡張イベント]、および [セッション] の順に展開します。
[Alwayson_health] を右クリックし、[セッションをスクリプト化]、[CREATE] の順にポイントし、[新しいクエリ エディター ウィンドウ] を選びます。
デバッグ用の拡張イベント
Alwayson_health セッションでカバーされている拡張イベントに加えて、SQL Server では可用性グループ用のさまざまなデバッグ イベントが定義されています。 このような追加の拡張イベントをセッションで利用するには、以下の手順に従います。
オブジェクト エクスプローラーで [管理]、[拡張イベント]、および [セッション] の順に展開します。
[セッション] を右クリックし、 [新しいセッション] をクリックします。 または、[Alwayson_health] を右クリックし、[プロパティ] を選択します。
[ページの選択] ペインで [イベント] を選びます。
イベント ライブラリの [カテゴリ] 列で [alwayson] を選択し、その他のカテゴリをすべてクリアします。
[チャネル] 列で、[デバッグ] を選択します。 まだ選択されていない可用性グループの関連イベントがすべて、イベント ライブラリに表示されるようになります。
イベント ライブラリのイベントを選び、[>] ボタンを選ぶと、セッション用に選択されます。
セッションが終了したら、[OK] をクリックして閉じます。 セッションが開始されると、選択したイベントがキャプチャされることを確認してください。
availability_replica_state_change
可用性レプリカの状態が変化したときに発生します。 このイベントは、可用性グループの作成または可用性レプリカの追加によってトリガーすることができます。 失敗した自動フェールオーバーを診断する場合に便利です。 フェールオーバーの各手順をトレースするためにも使用できます。
イベントに関する情報
列 | 説明 |
---|---|
名前 | availability_replica_state_change |
カテゴリ | always on |
チャネル | 運用時 |
イベント フィールド
名前 | Type_name | 説明 |
---|---|---|
availability_group_id | guid | 可用性グループの ID。 |
availability_group_name | unicode_string | 可用性グループの名前です。 |
availability_replica_id | guid | 可用性レプリカの ID。 |
previous_state | availability_replica_state | 変更前のレプリカのロール。 次のいずれかの値になります。 Primary_Normal Secondary_Normal Resolving_Pending_Failover Resolving_Normal Primary_Pending Not_Available |
current_state | availability_replica_state | 変更後のレプリカのロール。 次のいずれかの値になります。 Primary_Normal Secondary_Normal Resolving_Pending_Failover Resolving_Normal Primary_Pending Not_Available |
alwayson_health セッションの定義
CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT availability_replica_state_change
ADD TARGET package0.event_file (
SET filename = N'alwayson_health.xel',
max_file_size = (5),
max_rollover_files = (4),
metadatafile = N'alwayson_health.xem'
)
WITH (
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 30 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = ON
)
GO
availability_group_lease_expired
クラスターと可用性グループに接続の問題が存在し、リースの有効期限が切れた場合に発生します。 このイベントは可用性グループと基になる WSFC クラスター間の接続が切断されていることを示します。 プライマリ レプリカ上で接続の問題が発生した場合は、このイベントによって自動フェールオーバーが引き起こされるか、または可用性グループがオフラインになる可能性があります。
イベントに関する情報
列 | 説明 |
---|---|
名前 | availability_group_lease_expired |
カテゴリ | always on |
チャネル | 運用時 |
イベント フィールド
名前 | Type_name | 説明 |
---|---|---|
availability_group_id | guid | 可用性グループの ID。 |
availability_group_name | unicode_string | 可用性グループの名前です。 |
alwayson_health セッションの定義
CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT availability_group_lease_expired
ADD TARGET package0.event_file (
SET filename = N'alwayson_health.xel',
max_file_size = (5),
max_rollover_files = (4),
metadatafile = N'alwayson_health.xem'
)
WITH (
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 30 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = ON
)
GO
availability_replica_automatic_failover_validation
自動フェールオーバーによって、プライマリ レプリカとしての可用性レプリカの準備状況が検証され、対象の可用性レプリカが新しいプライマリ レプリカになる準備が整っているかどうかが示される場合に発生します。 たとえば、同期または参加していないデータベースが存在する場合、フェールオーバーの検証では false が返されます。 このイベントは、フェールオーバー中に障害ポイントを示す設計になっています。 自動フェールオーバーは無人操作であるため、この情報は特に自動フェールオーバーに対応するデータベース管理者にとって有用です。 データベース管理者はイベントを検証することで、自動フェールオーバーが失敗した理由を確認できます。
イベントに関する情報
名前 | 説明 |
---|---|
availability_replica_automatic_failover_validation | |
カテゴリ | always on |
チャネル | 分析 |
イベント フィールド
名前 | Type_name | 説明 |
---|---|---|
availability_group_id | guid | 可用性グループの ID。 |
availability_group_name | unicode_string | 可用性グループの名前です。 |
availability_replica_id | guid | 可用性レプリカの ID。 |
forced_quorum | validation_result_type | 値が TRUE の場合、この可用性レプリカでは自動フェールオーバーは無効になります。 TRUE FALSE |
joined_and_synchronized | validation_result_type | 値が FALSE の場合、この可用性レプリカでは自動フェールオーバーは無効になります。 TRUE FALSE |
previous_primary_or_automatic_failover_target | validation_result_type | 値が FALSE の場合、この可用性レプリカでは自動フェールオーバーは無効になります。 TRUE FALSE |
alwayson_health セッションの定義
CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT availability_replica_automatic_failover_validation (
WHERE (
[forced_quorum] = (TRUE)
OR [joined_and_synchronized] = (FALSE)
OR [previous_primary_or_automatic_failover_target] = (TRUE)
)
) ADD TARGET package0.event_file (
SET filename = N'alwayson_health.xel',
max_file_size = (5),
max_rollover_files = (4),
metadatafile = N'alwayson_health.xem'
)
WITH (
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 30 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = ON
)
GO
error_reported (複数のエラー番号): 転送または接続に問題がある場合
フィルター処理した各イベントは、可用性グループが依存しているトランスポートまたはデータベース ミラーリング エンドポイントで接続の問題が発生したことを示します。
列 | 説明 |
---|---|
名前 | error_reported フィルター処理する番号: 35201、35202、35206、35204、35207、35217、9642、9666、9691、9692、9693、28034、28036、28080、28091、33309 |
カテゴリ | エラー |
チャネル | [Admin] |
フィルター処理するエラー番号
エラー番号 | 説明 |
---|---|
35201 | 可用性レプリカ '%ls' への接続を確立しようとしているときに接続タイムアウトが発生しました。 |
35202 | 可用性グループ '%ls' での、ID [%ls] を持つ可用性レプリカ '%ls' から ID [%ls] を持つ可用性レプリカ '%ls' への接続が正常に確立されました。 このメッセージは情報提供だけを目的としています。 ユーザーによる操作は不要です。 |
35206 | 可用性レプリカ '%ls' への確立済みの接続で接続タイムアウトが発生しました。 |
35204 | インスタンス '%ls' とインスタンス '%ls' との接続がエンドポイントのシャットダウンに起因して無効になりました。 |
タイムアウト + 接続済み | |
35207 | 可用性グループ ID '%ls' でのレプリカ ID '%ls' からレプリカ ID '%ls' への接続試行が、エラー %d、重大度 %d、状態 %d で失敗しました。 重大度 %d、状態: %d。 (DBA の使用が適切でない可能性があります。確認し、問題がある場合は後で取り除いてください) |
35217 | (SQL Server 2019 CU15 (15.0.4198.2) 以降) 使用可能なワーカー スレッドが十分にないため、Always On 可用性グループ用のスレッド プールで新しいワーカー スレッドを開始することができませんでした。 これにより、Always On 可用性グループのパフォーマンスが低下する可能性があります。 "max worker threads" 構成オプションを使用して使用可能なスレッド数を増やします。 |
9642 | Service Broker/データベース ミラーリング トランスポートの接続エンドポイントでエラーが発生しました。エラー: %i、状態: %i。 (こちら側のエンドポイントのロール: %S_MSG、相手側のエンドポイントのアドレス: '%.*hs') エラー: %i、状態: %i。 (こちら側のエンドポイントのロール: %S_MSG、相手側のエンドポイントのアドレス: '%.*hs') |
9666 | %S_MSG エンドポイントは、状態が disabled または stopped です。 |
9691 | %S_MSG エンドポイントにより、接続のリッスンが停止されました。 |
9692 | ポート %d は他のプロセスで使用中なので、%S_MSG エンドポイントではそのポートでリッスンできません。 |
9693 | 次のエラーが発生したので、%S_MSG エンドポイントでは接続をリッスンできませんでした: '%.*ls'。 |
28034 | 接続ハンドシェイクが失敗しました。 ログイン '%.*ls' にはエンドポイントでの CONNECT 権限がありません。 状態 %d。 |
28036 | 接続ハンドシェイクが失敗しました。 このエンドポイントで使用された証明書が見つかりませんでした: %S_MSG。 master データベースで DBCC CHECKDB を使用して、エンドポイントのメタデータの整合性を確認してください。 状態 %d。 |
28080 | 接続ハンドシェイクが失敗しました。 %S_MSG エンドポイントが構成されていません。 状態 %d。 |
28091 | %S_MSG のエンドポイントを認証なしで開始することはサポートされていません。 |
33309 | 既定の %S_MSG エンドポイント構成がまだ読み込まれていないので、クラスター エンドポイントを開始できません。 |
alwayson_health セッションの定義
CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT sqlserver.error_reported (
WHERE (
--Connectivity Error Messages
[error_number] = (35201)
OR [error_number] = (35202)
OR [error_number] = (35204)
OR [error_number] = (35206)
OR [error_number] = (35207)
OR [error_number] = (35217)
OR [error_number] = (9642)
--OR [error_number]=(9666)
OR [error_number] = (9691)
OR [error_number] = (9692)
OR [error_number] = (9693)
OR [error_number] = (28034)
OR [error_number] = (28036)
OR [error_number] = (28080)
OR [error_number] = (28091)
OR [error_number] = (33309)
)
) ADD TARGET package0.event_file (
SET filename = N'alwayson_health.xel',
max_file_size = (5),
max_rollover_files = (4),
metadatafile = N'alwayson_health.xem'
)
WITH (
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 30 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = ON
)
GO
data_movement_suspend_resume
データベース レプリカのデータベース移動が中断または再開されたときに発生します。
イベントに関する情報
列 | 説明 |
---|---|
名前 | data_movement_suspend_resume |
カテゴリ | Always On |
チャネル | 運用時 |
イベント フィールド
名前 | Type_name | 説明 |
---|---|---|
availability_group_id | guid | 可用性グループの ID。 |
availability_group_name | unicode_string | 可用性グループの名前 (使用可能な場合)。 |
availability_replica_id | guid | 可用性レプリカの ID。 |
database_replica_id | guid | 可用性データベースの ID。 |
database_replica_name | unicode_string | 可用性データベースの名前です。 |
database_id | uint32 | 可用性データベースの ID。 |
suspend_status | suspend_status_type | 中断状態を示す値。 SUSPEND_NULL RESUMED SUSPENDED SUSPENDED_INVALID |
suspend_source | suspend_source_type | 中断アクションまたは再開アクションのソース。 |
suspend_reason | unicode_string | データベース レプリカ マネージャー内でキャプチャされた中断の理由。 |
alwayson_health セッションの定義
CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT data_movement_suspend_resume (
WHERE (
[suspend_status] = (SUSPENDED)
OR [suspend_status] = (SUSPENDED_INVALID)
OR [suspend_status] = (SUSPEND_NULL)
)
) ADD TARGET package0.event_file (
SET filename = N'alwayson_health.xel',
max_file_size = (5),
max_rollover_files = (4),
metadatafile = N'alwayson_health.xem'
)
WITH (
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 30 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = ON
)
GO
alwayson_ddl_executed
CREATE、ALTER、DROP などの可用性グループ データ定義言語 (DDL) ステートメントが実行されているときに発生します。 イベントの主な目的は、可用性レプリカでのユーザー アクションの問題を示すこと、または手動フェールオーバー、強制フェールオーバー、データ移動の中断、データ移動の再開などのランタイムの問題が続く運用アクションの開始ポイントを示すことです。
イベントに関する情報
列 | 説明 |
---|---|
名前 | alwayson_ddl_execution |
カテゴリ | always on |
チャネル | 分析 |
イベント フィールド
名前 | Type_name | 説明 |
---|---|---|
availability_group_id | Guid | 可用性グループの ID。 |
availability_group_name | unicode_string | 可用性グループの名前です。 |
ddl_action | alwayson_ddl_action | DDL アクションの種類 (CREATE、ALTER、DROP) を示します。 |
ddl_phase | ddl_opcode | DDL 操作のフェーズ (BEGIN、COMMIT、ROLLBACK) を示しす。 |
ステートメント | unicode_string | 実行されたステートメントのテキスト。 |
alwayson_health セッションの定義
CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT alwayson_ddl_executed
ADD TARGET package0.event_file (
SET filename = N'alwayson_health.xel',
max_file_size = (5),
max_rollover_files = (4),
metadatafile = N'alwayson_health.xem'
)
WITH (
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 30 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = ON
)
GO
availability_replica_manager_state
可用性レプリカ マネージャーの状態が変化したときに発生します。 このイベントは可用性レプリカ マネージャーのハートビートを示します。 可用性レプリカ マネージャーが正常な状態にない場合は、SQL Server インスタンス内のすべての可用性レプリカがダウンします。
イベントに関する情報
列 | 説明 |
---|---|
名前 | availability_replica_manager_state_change |
カテゴリ | always on |
チャネル | 運用時 |
イベント フィールド
名前 | Type_name | 説明 |
---|---|---|
current_state | manager_state | 可用性レプリカ マネージャーの現在の状態。 オンライン オフライン WaitingForClusterCommunication |
alwayson_health セッションの定義
CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT availability_replica_manager_state (WHERE ([current_state] = (OFFLINE)))
ADD TARGET package0.event_file (
SET filename = N'alwayson_health.xel',
max_file_size = (5),
max_rollover_files = (4),
metadatafile = N'alwayson_health.xem'
)
WITH (
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 30 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = ON
)
GO
error_reported (1480): データベース レプリカのロールの変更
このフィルター処理された error_reported イベントは、可用性レプリカ ロールの変更後に非同期的に発生します。 フェールオーバー プロセス中に、想定したロールを変更できない可用性データベースを示します。
イベントに関する情報
列 | 説明 |
---|---|
名前 | error_reported エラー番号 1480: REPLICATION_TYPE_MSG データベース "DATABASE_NAME" は、REASON_MSG が原因で、"OLD_ROLE" から "NEW_ROLE" にロールを変更中です |
カテゴリ | エラー |
チャネル | [Admin] |
alwayson_health セッションの定義
CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT sqlserver.error_reported (
WHERE (
--database replica role change message
OR [error_number] = (1480)
--database replica runtime error messages
OR [error_number] = (823)
OR [error_number] = (824)
OR [error_number] = (829)
)
) ADD TARGET package0.event_file (
SET filename = N'alwayson_health.xel',
max_file_size = (5),
max_rollover_files = (4),
metadatafile = N'alwayson_health.xem'
)
WITH (
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 30 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = ON
)
GO
sqlserver.sp_server_diagnostics_component_result
潜在的な障害を検出するために、SQL Server に関する診断データと正常性の情報をキャプチャします。 プロシージャは繰り返しモードで実行され、結果は定期的に送信されます。 この拡張イベント セッションは、SQL Server 2019 CU15 (15.0.4198.2) から利用できます。
イベントに関する情報
名前 | 内容 |
---|---|
名前 | sp_server_diagnostics_component_result |
カテゴリ | サーバー |
チャネル | デバッグ |
イベント フィールド
名前 | Type_name | 説明 |
---|---|---|
コンポーネント | UInt8 | コンポーネント名。 |
state | UInt8 | コンポーネントの正常性状態を示します。 |
data | XML | コンポーネントに関する追加の情報が格納された XML フィールド。 |
alwayson_health セッションの定義
CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT sqlserver.sp_server_diagnostics_component_result (SET collect_data = (1) WHERE ([state] = (3)))
ADD TARGET package0.event_file (
SET filename = N'alwayson_health.xel',
max_file_size = (5),
max_rollover_files = (4),
metadatafile = N'alwayson_health.xem'
)
WITH (
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 30 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = ON
)
GO
ucs.ucs_connection_setup
プライマリとセカンダリのレプリカ間の接続またはネットワーク関連のログをダンプします。 この拡張イベント セッションは、SQL Server 2019 CU15 (15.0.4198.2) から利用できます。
イベントに関する情報
名前 | 内容 |
---|---|
名前 | ucs_connection_setup |
カテゴリ | トランスポート |
チャネル | デバッグ |
イベント フィールド
名前 | Type_name | 説明 |
---|---|---|
setup_event | Int32 | 接続のセットアップ イベント |
obj_address | ポインター | 接続のエンド ポイント アドレス |
endpoint_type | Int32 | エンドポイントの種類 |
stream_status | Int32 | 接続ストリームの状態 |
error_number | UInt32 | 接続エラー コード |
connection_id | GUID | 接続 ID |
error_message | UnicodeString | 接続エラー メッセージ |
address | UnicodeString | 接続先アドレス |
circuit_id | UnicodeString | 接続回線 ID |
alwayson_health セッションの定義
CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT ucs.ucs_connection_setup
ADD TARGET package0.event_file (
SET filename = N'alwayson_health.xel',
max_file_size = (5),
max_rollover_files = (4),
metadatafile = N'alwayson_health.xem'
)
WITH (
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 30 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = ON
)
GO
sqlserver.hadr_trace_message
一部の DBCC コマンドおよび HADR ログ情報の出力を拡張イベント セッションにリダイレクトします (トレース フラグ 3605 と同様)。 この拡張イベント セッションは、SQL Server 2019 CU15 (15.0.4198.2) から利用できます。
イベントに関する情報
名前 | 内容 |
---|---|
名前 | hadr_trace_message |
カテゴリ | Always On |
チャネル | デバッグ |
イベント フィールド
名前 | Type_name | 説明 |
---|---|---|
hadr_message | unicode_string | 一部の DBCC コマンドおよび HADR ログ情報の出力を拡張イベント セッションにリダイレクトします (トレース フラグ 3605 と同様)。 |
alwayson_health セッションの定義
CREATE EVENT SESSION [alwayson_health] ON SERVER
ADD EVENT sqlserver.hadr_trace_message
ADD TARGET package0.event_file (
SET filename = N'alwayson_health.xel',
max_file_size = (5),
max_rollover_files = (4),
metadatafile = N'alwayson_health.xem'
)
WITH (
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 30 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = ON
)
GO