適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric の SQL データベース
拡張イベント (XEvents) アーキテクチャを使用すると、ユーザーは、Fabric の SQL Server、Azure SQL Database、Azure SQL Managed Instance、および SQL データベースのパフォーマンスを監視、識別、またはトラブルシューティングするために必要な量または少ないデータを収集できます。 拡張イベントは高度に構成可能で軽量であり、スケーリングに優れています。 詳細については、「拡張イベントのアーキテクチャ」に関する記事を参照してください。
拡張イベントは、非推奨となった SQL Trace と SQL Server Profiler の機能に置き換わるものです。
拡張イベントの使用を開始するには、クイック スタート: 拡張イベントを使用 します。
Note
Azure SQL Database、Fabric の SQL データベース、SQL Managed Instance では、 ターゲットのファイルが Azure Storage に格納されるため、event_file。 詳細については、「 Azure SQL の拡張イベント」を参照してください。
拡張イベントの利点
拡張イベントは、最小限のシステム リソースを使用しながら、データベース エンジンの詳細な詳細なビューを提供する軽量のパフォーマンス監視システムです。 SQL Server Management Studio (SSMS)は、Extended Eventsのグラフィカルユーザーインターフェイスを提供しており、イベントセッションの作成、変更、削除、およびセッションデータの表示と分析を行うことができます。 Management Studio での拡張イベントのサポートの詳細については、以下を参照してください。
拡張イベントの概念
拡張イベントは、 イベントコンシューマーや イベント コンシューマーなどの Event Tracing for Windows (ETW) の既存の概念に基づいており、 アクション や 述語などの新しい概念が導入されています。
次の表に、拡張イベントの概念を理解するためのドキュメントリファレンスを示します。
| [アーティクル] | 説明 |
|---|---|
| 拡張イベント パッケージ | オブジェクトを含む拡張イベント パッケージについて説明します。 これらのオブジェクトは、拡張イベント セッションの実行中にデータを取得して処理するために使用されます。 |
| 拡張イベントターゲット | イベント セッション中にデータを受け取ることができるイベント コンシューマーについて説明します。 |
| 拡張イベント エンジン | 拡張イベント セッションを実装および管理するエンジンについて説明します。 |
| 拡張イベント セッション | 拡張イベント セッションについて説明します。 |
拡張イベントのアーキテクチャ
拡張イベントは、サーバー システム用の汎用的なイベント処理システムの名前です。 拡張イベント インフラストラクチャでは、データベース エンジン からのデータを相互に関連付けることができます。さらに、特定の条件下では、オペレーティング システムやデータベース アプリケーションからのデータを相互に関連付けることもできます。 オペレーティング システムのケースでは、拡張イベント出力を 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 でイベント データを表示する |
| 拡張イベント セッションのアーキテクチャについて説明します。 | 拡張イベント セッション |
| 拡張イベント セッションを作成および管理するために、拡張イベントのツールを使用する方法について説明します。 | 拡張イベントのツール |
| 拡張イベント セッションを変更する方法について説明します。 | 拡張イベント セッションの変更 |
| イベントに関連付けられているフィールドの情報を取得する方法について説明します。 | すべてのイベントのフィールドを取得する |
| 登録パッケージで提供されているイベントを調べる方法について説明します。 | 拡張イベントのシステム ビューからの SELECT と JOIN |
| SQL トレースのイベントとそれに関連した列について、拡張イベントにおける等価なイベントとアクションを確認する方法について説明します。 | SQL トレースのイベント クラスと等価な拡張イベントを確認する |
| 既存の SQL トレース スクリプトを拡張イベント セッションに変換する方法について説明します。 | 既存の SQL トレース スクリプトから拡張イベント セッションへの変換 |
| ロックを保持しているクエリ、クエリのプラン、およびロックが取得されたときの Transact-SQL スタックを特定する方法について説明します。 | ロックを保持しているクエリの特定 |
| ロックのソースを識別する方法について説明します。 | ロックの大半を取得しているオブジェクトを見つける |
| 拡張イベントを Event Tracing for Windows と共に使用してシステムの使用状況を監視する方法について説明します。 | 拡張イベントを使用したシステムの使用状況の監視 |
| 拡張イベントに対するカタログ ビューと動的管理ビュー (DMV) の使用。 | 拡張イベントのシステム ビューからの SELECT と JOIN |
拡張イベント カタログ ビュー
拡張イベントは、さまざまなカタログ ビューを提供します。 カタログ ビューでは、イベント セッションのメタデータまたは定義について説明します。 アクティブなイベント セッションのインスタンスについては、「 拡張イベントの動的管理ビュー」を参照してください。
| カタログ ビューの名前 | 説明 |
|---|---|
| sys.database_event_session_actions | データベーススコープイベントセッションのそれぞれのイベントに対するそれぞれのアクションの行を返します。 |
| sys.database_event_session_events | データベース スコープのイベント セッション内の各イベントの行を返します。 |
| sys.database_event_session_fields | データベース スコープ セッションのイベントとターゲットに明示的に設定されたカスタマイズ可能な各列の行を返します。 |
| sys.database_event_session_targets | データベース スコープのイベント セッションの各イベント ターゲットの行を返します。 |
| sys.database_event_sessions | 各データベーススコープのイベントセッションの行を返します。 |
拡張イベントの動的管理ビュー
拡張イベントは、さまざまな動的管理ビュー (DMV) を提供します。 DMV は、セッションやターゲットの統計情報など、 アクティブ (開始) イベント セッションに関する情報を返します。
| DMV の名前 | 説明 |
|---|---|
| sys.dm_xe_database_session_event_actions | データベース スコープのイベント セッション アクションに関する情報を返します。 |
| sys.dm_xe_database_session_events | データベースにスコープされたイベント セッションのイベント情報を返します。 |
| sys.dm_xe_database_session_object_columns | データベース スコープ セッションにバインドされているオブジェクトの構成値を示します。 |
| sys.dm_xe_database_session_targets | データベース スコープのイベント セッション ターゲットに関する情報を返します。 |
| sys.dm_xe_database_sessions | 現在のデータベースで実行されているデータベース スコープのイベント セッションごとに 1 行を返します。 |
Permissions
Azure SQL Database、Fabric の SQL データベース、Azure SQL Managed Instance、および SQL Server 2022 以降のバージョンでは、拡張イベントは詳細なアクセス許可モデルをサポートしています。 次のアクセス許可が付与できます:
CREATE ANY DATABASE EVENT SESSION
DROP ANY DATABASE EVENT SESSION
ALTER ANY DATABASE EVENT SESSION
ALTER ANY DATABASE EVENT SESSION ADD EVENT
ALTER ANY DATABASE EVENT SESSION DROP EVENT
ALTER ANY DATABASE EVENT SESSION ADD TARGET
ALTER ANY DATABASE EVENT SESSION DROP TARGET
ALTER ANY DATABASE EVENT SESSION ENABLE
ALTER ANY DATABASE EVENT SESSION DISABLE
ALTER ANY DATABASE EVENT SESSION OPTION
これらの各アクセス許可が制御するものについては、「CREATE EVENT SESSION」、「ALTER EVENT SESSION」、および「DROP EVENT SESSION」 をご覧ください。
これらのアクセス許可はすべて、データベース、SQL マネージド インスタンス、または SQL Server インスタンスの CONTROL アクセス許可に含まれています。 Azure SQL データベースでは、データベース所有者 (dbo)、db_owner データベース ロールのメンバー、および論理サーバーの管理者は、データベース CONTROL 権限を持ちます。 Azure SQL Managed Instance と SQL Server では、 sysadmin サーバー ロールのメンバーは、インスタンスに対する CONTROL アクセス許可を保持します。
コード例は、Azure SQL Database、Fabric の SQL データベース、および SQL Managed Instance で異なる場合があります
SQL Server 用に記述された Transact-SQL コード例の中には、Azure SQL Database または Fabric の SQL データベースで実行するために小さな変更が必要なものもあります。 このようなコード例のカテゴリの 1 つに、データベース エンジンの種類によって名前プレフィックスが異なるカタログ ビューが含まれます。
-
server_- SQL Server および Azure SQL Managed Instance のプレフィックス -
database_- Azure SQL Database、Fabric の SQL データベース、および SQL Managed Instance のプレフィックス
Fabric の Azure SQL Database と SQL Database では、データベース スコープのイベント セッションのみがサポートされます。 SQL Server Management Studio (SSMS) は、Azure SQL Database のデータベース スコープのイベント セッションをサポートしています。データベース スコープのセッションを含む 拡張イベント ノードは 、オブジェクト エクスプローラーの各データベースの下に表示されます。
Azure SQL Managed Instance では、データベース スコープのセッションとサーバー スコープのセッションの両方がサポートされます。 SSMS は、SQL Managed Instance に対してサーバー スコープのセッションを完全にサポートしています。すべてのサーバー スコープのセッションを含む拡張イベント ノードが、オブジェクト エクスプローラー内の各マネージド インスタンスの [管理] フォルダーの下に表示されます。
Note
Azure SQL Managed Instance には、サーバー スコープのイベント セッションをお勧めします。
データベース スコープのイベント セッションは、SSMS for Azure SQL Managed Instance のオブジェクト エクスプローラーには表示されません。 SQL マネージド インスタンスでは、データベース スコープのイベント セッションは Transact-SQL でのみ照会および管理できます。
説明のために、次の表に、カタログ ビューの 2 つのサブセットの比較リストを示します。 サポートする異なるデータベース エンジンタイプが異なるため、サブセットの名前のプレフィックスは異なります。
| SQL Server と Azure SQL Managed Instance の名前 | Azure SQL Database、Fabric SQL データベース、Azure SQL Managed Instance での名前 |
|---|---|
sys.server_event_session_actionssys.server_event_session_eventssys.server_event_session_fieldssys.server_event_session_targetssys.server_event_sessions |
sys.database_event_session_actionssys.database_event_session_eventssys.database_event_session_fieldssys.database_event_session_targetssys.database_event_sessions |