拡張イベントの概要

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

拡張イベント (XEvents) アーキテクチャは、SQL Server、Azure SQL Database、および Azure SQL Managed Instance で、パフォーマンスを監視、特定、またはトラブルシューティングするために必要なデータ量をユーザーが収集できるようにします。 拡張イベントは高度に構成可能で軽量であり、スケーリングに優れています。 詳細については、「拡張イベントのアーキテクチャ」に関する記事を参照してください。

拡張イベントは、非推奨となった SQL Trace と SQL Server Profiler の機能に置き換わるものです。

拡張イベントの使用を開始するには、クイック スタート: 拡張イベントを使用 します。

Note

Azure SQL を使用する場合、Azure SQL データベース と SQL Managed Instance のコード例の違い、および Azure SQL データベース の拡張イベントの詳細について学びます。

拡張イベントの利点

拡張イベントは、最小限のシステム リソースを使用しながら、データベース エンジンの詳細な詳細なビューを提供する軽量のパフォーマンス監視システムです。 SQL Server Management Studio (SSMS)は、Extended Eventsのグラフィカルユーザーインターフェイスを提供しており、イベントセッションの作成、変更、削除、およびセッションデータの表示と分析を行うことができます。 Management Studio での拡張イベントのサポートの詳細については、以下を参照してください。

拡張イベントの概念

拡張イベントは、イベントイベントコンシューマーなど、Windows イベントトレースの既存の概念を拡張し、アクション述語などの新しい概念を導入しています。

次の表に、拡張イベントの概念を理解するためのドキュメントリファレンスを示します。

[アーティクル] 説明
拡張イベント パッケージ オブジェクトを含む拡張イベント パッケージについて説明します。 これらのオブジェクトは、拡張イベント セッションの実行中にデータを取得して処理するために使用されます。
拡張イベントのターゲット イベント セッション中にデータを受け取ることができるイベント コンシューマーについて説明します。
拡張イベント エンジン 拡張イベント セッションを実装および管理するエンジンについて説明します。
拡張イベント セッション 拡張イベント セッションについて説明します。

拡張イベントのアーキテクチャ

拡張イベントは、サーバー システム用の汎用的なイベント処理システムの名前です。 拡張イベント インフラストラクチャでは、データベース エンジン からのデータを相互に関連付けることができます。さらに、特定の条件下では、オペレーティング システムやデータベース アプリケーションからのデータを相互に関連付けることもできます。 オペレーティング システムのケースでは、拡張イベント出力を Event Tracing for Windows (ETW) に送る必要があります。 ETW は、イベント データをオペレーティング システムまたはアプリケーション イベント データに関連付けます。

すべてのアプリケーションには、アプリケーションの内部と外部の両方で有用な実行ポイントが存在します。 アプリケーションの内部に目を向けると、非同期処理が、タスクの初回実行時に収集された情報を使ってエンキューされていることができます。 アプリケーションの外部では、実行ポイントによって監視ユーティリティに情報が提供されます。 この情報は、監視対象アプリケーションの動作やパフォーマンス特性に関するものです。

拡張イベントを使用すると、プロセスの外部でイベント データを利用できます。 一般的に、このデータを使用するのは、パフォーマンス監視を実行して製品を管理またはサポートするユーザー、またはデバッグ目的で製品上でアプリケーションを開発しているユーザーです。 データを使用または分析するには、SQL Server Management Studio、XEvent Profiler、パフォーマンス モニター、や T-SQL、Windows コマンドライン ツールなどのツールを使用します。

拡張イベントの設計には、次の大きな特徴があります。

  • 拡張イベント エンジンはイベントの種類に依存しません。 エンジンはイベントの内容による制約を受けないため、あらゆるイベントをあらゆるターゲットにバインドできます。 拡張イベント エンジンの詳細については、「SQL Server 拡張イベント エンジン」を参照してください。
  • イベントは、イベント コンシューマー (拡張イベントの ターゲット ) とは分離されています。 つまり、任意のターゲットが任意のイベントを受け取ることができます。 さらに、ターゲット側では、発生したあらゆるイベントを自動的に処理できるため、追加のイベント コンテキストを提供したりログに記録したりすることが可能となります。 詳細については、「拡張イベントのターゲット」を参照してください。
  • イベントは、イベントが発生した際に実行されるアクションとは異なります。 したがって、すべてのイベントには任意のアクションを関連付けることができます。
  • 述語を使用すると、イベント データのキャプチャ時に動的にフィルターが適用されます。 動的フィルター処理により、拡張イベント インフラストラクチャの柔軟性が高まります。 詳細については、拡張イベントパッケージに関する記事を参照してください。

拡張イベントはイベント データを同期的に生成します。また、そのデータは非同期的に処理できるため、柔軟なイベント処理が可能となります。 さらに、拡張イベントには、次の機能が用意されています。

  • サーバー システムの枠を越えてイベントを処理する統一的なアプローチ。同時に、ユーザーは特定のイベントを切り分けて、トラブルシューティングに役立てることができます。
  • 既存の ETW ツールのサポートと統合。
  • Transact-SQL を使用する自由な構成が可能なイベント処理メカニズム。
  • アクティブ プロセスを最小限の負荷で動的に監視する機能。
  • パフォーマンスへの体感的な影響を伴わずに動作する既定のシステム正常性セッション。 このセッションは、パフォーマンスの問題をトラブルシューティングするのに役立つシステム データを収集します。 詳細については、「system_health セッションの使用」を参照してください。

拡張イベントのタスク

Management Studio または Transact-SQL を使用して、Transact-SQL データ定義言語 (DDL) ステートメントを実行し、動的管理ビューと関数、またはカタログ ビューを使用すると、SQL Server 環境用の単純または複雑な SQL Server 拡張イベントのトラブルシューティング ソリューションを作成できます。

タスクの説明 [アーティクル]
オブジェクト エクスプローラー を使用してイベント セッションを管理します。 オブジェクト エクスプローラーでのイベント セッションの管理
拡張イベント セッションを作成する方法について説明します。 拡張イベント セッション
ターゲット データを表示および更新する方法について説明します。 SQL Server Management Studio でイベント データを表示する
拡張イベント セッションを作成および管理するために、拡張イベントのツールを使用する方法について説明します。 拡張イベントのツール
拡張イベント セッションを変更する方法について説明します。 拡張イベント セッションの変更
イベントに関連付けられているフィールドの情報を取得する方法について説明します。 すべてのイベントのフィールドを取得する
登録パッケージで提供されているイベントを調べる方法について説明します。 SQL Server の拡張イベントに対するシステム ビューからの SELECT と JOIN
登録パッケージで提供されている拡張イベント ターゲットを確認する方法について説明します。 拡張イベントのターゲット
SQL トレースのイベントとそれに関連した列について、拡張イベントにおける等価なイベントとアクションを確認する方法について説明します。 SQL トレースのイベント クラスと等価な拡張イベントを確認する
ADD TARGET 句を CREATE EVENT SESSION または ALTER EVENT SESSION ステートメントで使用するときに設定できるパラメーターを検索する方法について説明します。 拡張イベントのターゲット
既存の SQL トレース スクリプトを拡張イベント セッションに変換する方法について説明します。 既存の SQL トレース スクリプトから拡張イベント セッションへの変換
ロックを保持しているクエリ、クエリのプラン、およびロックが取得されたときの Transact-SQL スタックを特定する方法について説明します。 ロックを保持しているクエリの特定
ロックのソースを識別する方法について説明します。 ロックの大半を取得しているオブジェクトを見つける
拡張イベントを Event Tracing for Windows と共に使用してシステムの使用状況を監視する方法について説明します。 拡張イベントを使用したシステムの使用状況の監視
拡張イベントに対するカタログ ビューと動的管理ビュー (DMV) の使用。 SQL Server の拡張イベントに対するシステム ビューからの SELECT と JOIN

次の T-SQL クエリを使用して、可能なすべてのイベントとその説明を取得します。

SELECT obj1.name AS [XEvent-name],
    col2.name AS [XEvent-column],
    obj1.description AS [Descr-name],
    col2.description AS [Descr-column]
FROM sys.dm_xe_objects AS obj1
INNER JOIN sys.dm_xe_object_columns AS col2
    ON col2.object_name = obj1.name
ORDER BY obj1.name,
    col2.name

コード例は、Azure SQL Database と SQL Managed Instance で異なる場合があります

SQL Server 向けに作成された一部の Transact-SQL コード例は、Azure で実行する場合は少し変更する必要があります。 このようなコード例のカテゴリの 1 つに、データベース エンジンの種類によって名前プレフィックスが異なるカタログ ビューが含まれます。

  • server_ - SQL Server および Azure SQL Managed Instance のプレフィックス
  • database_ - Azure SQL Database および SQL Managed Instance のプレフィックス

Azure SQL Database では、データベース スコープのイベントセッションのみがサポートされています。 SQL Server Management Studio (SSMS) では、Azure SQL Database のデータベース スコープのセッションが完全にサポートされます。データベース スコープのイベントセッションを含む拡張イベント ノードが、オブジェクト エクスプローラーの各データベースの下に表示されます。

Azure SQL Managed Instance では、データベース スコープのセッションとサーバー スコープのセッションの両方がサポートされます。 SSMS は、SQL Managed Instance に対してサーバー スコープのセッションを完全にサポートしています。すべてのサーバー スコープのセッションを含む拡張イベント ノードが、オブジェクト エクスプローラー内の各マネージド インスタンスの [管理] フォルダーの下に表示されます。

Note

マネージド インスタンスには、サーバー スコープのセッションをお勧めします。 データベース スコープのセッションは、Azure SQL Managed Instance での SSMS のオブジェクト エクスプローラーには表示されません。 データベース スコープのセッションは、マネージド インスタンスを使用する場合にのみ、Transact-SQL を使用してクエリの実行と管理を行うことができます。

説明のために、次の表に、カタログ ビューの 2 つのサブセットの比較リストを示します。 簡潔にするために、サブセットは、文字列 _event も含むビュー名に限定されています。 サポートする異なるデータベース エンジンタイプが異なるため、サブセットの名前のプレフィックスは異なります。

SQL Server と Azure SQL Managed Instance の名前 Azure SQL Database と Azure SQL Managed Instance の名前
server_event_notifications
server_event_session_actions
server_event_session_events
server_event_session_fields
server_event_session_targets
server_event_sessions
server_events
server_trigger_events
database_event_session_actions
database_event_session_events
database_event_session_fields
database_event_session_targets
database_event_sessions

上記の表の 2 つのリストは、2022 年 3 月時点のものです。 最新の一覧を表示するには、次の Transact-SQL SELECT ステートメントを実行します。

SELECT name
    FROM sys.all_objects
    WHERE
        (name LIKE 'database[_]%' OR
         name LIKE 'server[_]%' )
        AND name LIKE '%[_]event%'
        AND type = 'V'
        AND SCHEMA_NAME(schema_id) = 'sys'
    ORDER BY name;