今すぐ共有:
目次 隠す
8. 実用的なユースケースと例

はじめに

1.1 とは何か SQL Server 拡張イベント?

SQL Server Extended Eventsは、管理者と開発者が詳細なサーバーアクティビティデータを収集・分析できる軽量なパフォーマンス監視システムです。このシステムは、 SQL Server データベース エンジンであり、通常の操作とトラブルシューティング シナリオの両方に関する包括的な分析情報を提供します。

1.2 監視に拡張イベントを使用する理由

SQL Server 拡張イベントは、データベースの監視とトラブルシューティングにいくつかの魅力的な利点をもたらします。

  • 軽量アーキテクチャによるパフォーマンスへの影響の最小化
  • データ収集とイベントフィルタリングのきめ細かな制御
  • 特定の監視ニーズに合わせてカスタマイズ可能なデータ収集
  • 複数のパッケージから同時にイベントをキャプチャする機能
  • 関連する操作に焦点を当てる柔軟なフィルタリング機能
  • ユーザーエクスペリエンスを低下させることなく本番システムの監視をサポート
  • 包括的なパフォーマンス指標の追跡
  • トラブルシューティングのための高度な診断機能
  • コンプライアンス要件のための監査証跡の維持
  • リアルタイムおよび履歴データ分析オプション

1.3 拡張イベント vs SQL Server プロファイラー

一方、 SQL Server プロファイラー 従来の監視ツールとは異なり、MS SQL 拡張イベントはより効率的な代替手段を提供します。拡張イベントはシステムリソースの消費量が少なく、本番環境において優れたスケーラビリティを提供します。

SQL Server プロファイラーは現在非推奨になっており、Microsoft ではすべての監視アクティビティを拡張イベントに移行することを推奨しています。

2. 拡張イベントアーキテクチャの理解

2.1 拡張イベントエンジンコンポーネント

拡張イベントエンジンは、イベントデータのキャプチャ、処理、保存を連携して行う複数のコアコンポーネントで構成されています。これらのコンポーネントを理解することで、効果的な監視ソリューションを設計できます。

  • 発車係: ディスパッチャーコンポーネントは、イベントソースから拡張イベントエンジンへのイベントフローを調整します。イベントが発生すると、ディスパッチャーは通知を受け取り、その特定のイベントタイプをサブスクライブしているアクティブなセッションにルーティングします。
  • バッファ: バッファは、ターゲットに書き込む前にイベントデータを一時的にメモリに格納します。このバッファリング機構により、I/O操作が削減され、パフォーマンスが向上します。バッファのサイズと管理設定は、メモリ使用量とデータ取得要件のバランスを取るように構成できます。
  • セッション: セッションは、イベント監視の範囲を定義します。どのイベントをキャプチャするか、どのアクションを実行するか、どの述語を適用するか、そして結果をどこに保存するかを指定します。セッションは、個別に作成、変更、開始、停止できます。
  • 対象インスタンス: ターゲットインスタンスは、キャプチャされたイベントデータの保存先を表します。各セッションは、ファイル、リングバッファ、カウンタなど、1つまたは複数のターゲットに書き込むことができます。ターゲットはイベント情報を処理し、後で分析できるように永続化します。

2.2 イベントパッケージ

SQL Server Extended Eventsは、機能をパッケージに整理します。各パッケージには、関連するイベント、アクション、タイプ、述語、およびターゲットが含まれます。一般的なパッケージには、sqlserver、sqlos、およびpackage0などがあります。

  • sqlserver パッケージは、クエリやトランザクションなどのデータベース固有のイベントを提供します。
  • sqlos パッケージには、オペレーティング システム イベントが含まれています。
  • package0 は、すべてのパッケージで使用される汎用機能を提供します。

2.3 イベントの種類とフィールド

イベントは、 SQL Server 監視対象イベントの種類ごとに、関連情報を取得するための定義済みフィールドが用意されています。たとえば、sql_statement_completed イベントには、実行時間、CPU 時間、読み取り、書き込みのフィールドが含まれています。

イベントには同期イベントと非同期イベントがあります。同期イベントは操作中に発生し、非同期イベントは操作完了後に発生します。イベントの特性を理解することで、監視ニーズに適したイベントを選択できます。

2.4つのアクション

アクションは、キャプチャされたイベントに補足情報を追加します。イベントが発生すると、関連するアクションが実行され、SQLテキスト、セッションID、コールスタック情報などの追加コンテキストが収集されます。

一般的なアクションには、クエリステートメントをキャプチャするsql_text、データベースを識別するdatabase_name、および発信元サーバーを追跡するclient_hostnameなどがあります。これらのアクションは、トラブルシューティングと分析に不可欠なコンテキストを提供します。

2.5ターゲット

ターゲットによって、イベントデータの保存方法と保存場所が決まります。 SQL Server 拡張イベントは、以下を含む複数のターゲットタイプをサポートしています。

  • ディスクストレージ用のevent_file。詳細な分析のための永続的なストレージを提供します。
  • メモリベースの保持のための ring_buffer により、最小限のオーバーヘッドで最近のイベントに素早くアクセスできます。
  • 単純なカウントのためのevent_counter
  • グループ化のヒストグラム
  • 関連するイベントを相関させるためのpair_matching

2.6 述語(フィルタ)

述語は、指定された条件に基づいてイベントをフィルタリングし、キャプチャされるデータの量を削減します。データベース名、アプリケーション名、セッションID、期間のしきい値、または任意のイベントフィールド値でフィルタリングできます。

効果的な述語の使用は、関連するイベントのみをキャプチャすることでパフォーマンスへの影響を最小限に抑えます。複雑な述語は、論理演算子を使用して複数の条件を組み合わせ、正確なフィルタリング基準を作成します。

3. 拡張イベントセッション状態とライフサイクル

3.1 セッション状態: CREATE、ALTER、および DROP

拡張イベント セッションは、次の異なる状態を経て進行します。

  • CREATE EVENT SESSION ステートメントは新しいセッションを定義しますが、セッションを開始するわけではありません。セッションは明示的にアクティブ化されるまで停止状態になります。
  • ALTER EVENT SESSION ステートメントは、セッション構成を変更したり、セッションの状態を停止状態から開始状態に変更したりします。
  • DROP EVENT SESSION ステートメントは、セッション定義をサーバーから完全に削除します。

3.2 セッションの内容と特徴

各セッションには、イベント、アクション、ターゲット、および述語の集合が含まれます。セッションには、その範囲と動作を定義する暗黙の境界があります。構成オプションは、メモリ割り当て、イベント保持、およびディスパッチ遅延を制御します。

セッションの特性には、サーバー再起動後もセッションが維持されるかどうか、最大メモリ割り当て量、メモリ負荷への対処方法などが含まれます。これらの設定は、セッションの動作とリソース消費に大きな影響を与えます。

3.3 セッション境界とパッケージ

セッション境界は、イベント、ターゲット、およびパッケージ間の関係を定義します。あるパッケージからのイベントは、別のパッケージからのアクションをトリガーすることができ、データ収集戦略に柔軟性をもたらします。

パッケージ関係により、複数のソースからのイベントを単一のセッション内で組み合わせることができます。この機能により、さまざまな範囲にまたがる包括的な監視シナリオが可能になります。 SQL Server サブシステム。

4. SSMS を使用した拡張イベントセッションの作成

4.1 前提条件とセットアップ

作成する前に SQL Server 拡張イベントセッションを実行する場合は、適切な権限があることを確認してください。サーバースコープセッションの場合はALTER ANY EVENT SESSION権限、データベーススコープセッションの場合はデータベースに対するCONTROL権限が必要です。

それを確認する SQL Server Management Studioがインストールされ、対象インスタンスに接続されています。監視要件を理解し、ニーズに最適なイベントとターゲットを特定してください。

4.2 オブジェクト エクスプローラーで拡張イベントにアクセスする

SSMS の拡張イベント インターフェイスにアクセスするには、次の手順に従います。

  1. 店は開いています SQL Server Management Studioに接続して SQL Server インスタンス。
  2. オブジェクトエクスプローラーで展開 マネジメント -> 延長イベント.
  3. 拡張イベントノードには、 セッションズ (NAIST) と エクストラ 監視構成を管理するためのフォルダー。

拡張イベントインターフェースにアクセスするには SQL Server ManagementStudio。

4.3 新しいセッションを作成する

新しいセッションを作成するには:

    1. 右クリックして セッションズ 下のフォルダ 延長イベント.
    2. 選択 新しいセッション 設定ダイアログを開きます。以下のコンテンツでは、このメソッドを使用して新しいセッションを作成します。

拡張イベントの新しいセッションを作成する SQL Server ManagementStudio。

注: 新しいセッションウィザード よりガイド付きの体験もご利用いただけます。

4.3.1 一般的なページ構成

ソフトウェア設定ページで、下図のように 全般 ページで、基本的なセッションプロパティを構成します。

  1. セッション名を入力してください セッション名 フィールド。監視の目的を示すわかりやすい名前を使用します。
  2. オプションで選択 サーバー起動時にイベントセッションを開始する 自動セッションアクティブ化を有効にします。
  3. デフォルトのセッションテンプレートは ブランク定義済みの構成を使用する場合は、他のテンプレートを使用することもできます。

拡張イベントセッションの一般ページ SQL Server ManagementStudio。

4.3.2 イベントページの設定

その イベント このページでは、監視するイベントを選択できます。

  1. まず イベント 左からのページ ページを選択 パネル。
  2. イベントライブラリ利用可能なイベントを参照するか、検索機能を使用してください。
  3. 関連するイベントを見つけるには、「sql_statement_completed」などのキーワードを入力してイベントをフィルタリングします。
  4. sql_statement_completed などの目的のイベントを選択します。
  5. 右矢印ボタンをクリックしてイベントを 選択されたイベント リスト。

拡張イベントセッションのイベントページ SQL Server ManagementStudio。

4.3.3 データストレージ構成

その データストレージ このページでは、イベント データが保存される場所を定義します。

  1. まず データストレージ 左からのページ ページを選択 パネル。
  2. 目標 エリアを選択し、ドロップダウンメニューから対象タイプを選択してください。

拡張イベントセッションのデータ保存ページ SQL Server ManagementStudio。

(1)イベントファイルターゲット

event_fileターゲットは、.xel拡張子のディスクファイルにデータを保存します。

  1. 選択 イベントファイル ターゲットタイプのドロップダウンから選択します。
  2. ファイルパスを指定してください。例: C:\temp\YourSession_Target.xel。
  3. 最大ファイル サイズとファイル数を設定してディスク領域を管理するためのロールオーバー オプションを構成します。
  4. ターゲットは、セッションが停止するかストレージ容量の上限に達するまで、イベントを継続的に書き込みます。

SSMSでセッションターゲットをevent_fileに設定する

(2)リングバッファターゲット

ring_bufferターゲットは、ディスクI/Oなしで高速アクセスできるように、イベントをメモリに格納します。

  1. 選択 リングバッファ ターゲットタイプとして。
  2. バッファの最大メモリ割り当てを設定します。
  3. バッファがいっぱいになると古いイベントが破棄されるため、これは最近のアクティビティの監視に適していることを理解してください。

拡張イベントセッションのターゲットを ring_buffer に設定します。 SQL Server ManagementStudio。

(3)イベントカウンターターゲット

event_counterターゲットは、詳細なデータを保存せずにイベントの発生回数を単純にカウントします。これにより、頻度情報のみが必要な場合に、最小限のオーバーヘッドで済みます。

拡張イベントセッションのターゲットをevent_counterに設定します。 SQL Server ManagementStudio。

(4)ヒストグラムターゲット

ヒストグラムターゲットは、指定されたフィールド値に基づいてイベントをグループ化し、分布統計を作成します。これは、共通のパターンや高頻度値を特定するのに役立ちます。

拡張イベントセッションのターゲットをヒストグラムに設定します。 SQL Server ManagementStudio。

(5)ペアマッチングターゲット

pair_matchingターゲットは、ロックの取得や解放といった関連イベントを関連付けます。これにより、ペアになった操作とそのタイミング関係を分析することが可能になります。

SSMSでセッションターゲットをpair_matchingに設定します。

4.3.4詳細設定

その 高機能 ページにはセッションレベルの構成オプションが提供されます。

  1. まず 高機能 左からのページ ページを選択 パネル。
  2. 構成 イベント保持モード メモリ不足の状態でイベントを処理する方法を制御します。
  3. 作成セッションプロセスで 最大ディスパッチ遅延 リアルタイム処理とシステムパフォーマンスのバランスをとるため。
  4. 構成 最大メモリサイズ (NAIST) と 最大イベントサイズ 監視要件に基づいて。
  5. 選択 メモリパーティションモード 単一または複数の CPU 環境向けに最適化します。

セッションの高度なページ SQL Server ManagementStudio。

4.4 イベントフィルタ(述語)の設定

述語は、特定の条件に基づいてイベントをフィルタリングすることでデータ量を削減します。フィルタを設定するには、次の手順を実行します。

  1. ソフトウェア設定ページで、下図のように イベント ページで、「sql_statement_completed」など、フィルタリングするイベントを選択します。
  2. 詳しくはこちら 構成 イベント設定ダイアログを開きます。
    拡張イベントセッションのイベントを構成する SQL Server ManagementStudio。
  3. まず フィルター(述語) タブには何も表示されないことに注意してください。
  4. フィールド ドロップダウンで、期間など、フィルタリングするフィールドを選択します。
  5. 選択する Operator(「>」など)
  6. フィルターを入力 たとえば、1000000 (1 秒) などです。
  7. 必要に応じて条件を追加します。

イベントのフィルター (述語) を構成します。

4.5 アクションとイベントフィールドの選択

各イベントごとに、収集するデータを選択できます。

  1. ソフトウェア設定ページで、下図のように イベント ページで、「sql_statement_completed」など、データを選択するイベントを選択します。
  2. 詳しくはこちら 構成 イベント設定ダイアログを開きます。
  3. まず グローバルフィールド(アクション) タブには何も表示されないことに注意してください。
  4. データベース名やクライアントアプリ名などの補足情報を追加するには、アクションを選択してください。
    イベントのアクションを構成します。
  5. 確認 イベントフィールド 自動的にキャプチャされるフィールドを確認するには、このセクションを参照してください。
  6. 不要なフィールドをクリアしてデータ量を削減します。
    イベントのフィールドを構成します。

4.6 セッションの開始と管理

セッションを設定したら、セッションを開始してその動作を監視できます。

  1. 詳しくはこちら OK セッションを作成します。
  2. オブジェクトエクスプローラーで、 セッションズ フォルダーを開いて新しいセッションを確認します。
  3. セッション名を右クリックして選択 セッションを開始 イベントのキャプチャを開始します。
    拡張イベントセッションを開始するには SQL Server ManagementStudio。
  4. ライブデータを表示するには、セッションを右クリックして ライブデータを見る.
    拡張イベントセッションのライブデータを見る SQL Server ManagementStudio。
  5. 右クリックして選択してセッションを停止します セッションを停止.

5. T-SQLを使用した拡張イベントセッションの作成

5.1 CREATE EVENT SESSION構文

T-SQLを使用して拡張イベントセッションを作成すると、正確な制御が可能になり、自動展開のためのスクリプトを作成できます。CREATE EVENT SESSIONステートメントは、特定の構文構造に従います。

基本的な構文には、セッション名、各イベントに対するADD EVENT句、保存先を指定するADD TARGET句、およびセッション構成を指定するためのオプションのWITH句が含まれます。

5.2 基本的なイベントセッションの作成

基本的なセッションは、特定のイベントを監視し、結果をターゲットに書き込みます。以下に、その基本コンポーネントの構築方法を示します。

5.2.1 セッション名とオプションの定義

まず、分かりやすい名前を付けてセッションを作成します。

CREATE EVENT SESSION [SampleSession] ON SERVER

ON SERVER 句は、データベースの変更後も持続するサーバースコープのセッションを作成します。Azure SQL Database の場合、データベーススコープのセッションには ON DATABASE を使用します。

5.2.2 ADD EVENTによるイベントの追加

ADD EVENT 句を使用してキャプチャするイベントを追加します。

CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed

これにより、完了したすべてのSQL文がキャプチャされます。ADD EVENT句を追加することで、複数のイベントを追加できます。

5.2.3 イベントアクションの設定

アクションは各イベントの追加のコンテキストを収集します。イベント名の後に括弧で囲んでアクションを追加します。

CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
    ACTION(sqlserver.sql_text, sqlserver.database_name, sqlserver.username)
)

この例では、完了したステートメントごとに SQL テキスト、データベース名、およびユーザー名を取得します。

5.2.4 イベント述語の設定(WHERE句)

述語はイベントをフィルタリングし、データ量を削減します。イベント定義内でWHERE句を使用します。

CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
    ACTION(sqlserver.sql_text)
    WHERE ([package0].[greater_than_uint64]([duration],(5000000)))
)

これにより、期間が 5 秒 (5,000,000 マイクロ秒) を超えるステートメントがフィルターされます。

5.3 イベントターゲットの追加

ターゲットは、イベントデータがどこに保存され、どのように処理されるかを定義します。

5.3.1 ADD TARGET構文

すべてのイベントが定義された後、ADD TARGET句を使用してターゲットを追加します。

ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\SampleSession.xel'
)

package0という接頭辞は、ターゲットがベースパッケージ由来であることを示します。

5.3.2 ターゲットパラメータの設定

各ターゲットタイプは特定のパラメータを受け入れます。event_file の場合、filename、max_file_size、および max_rollover_files を設定します。

ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\SampleSession.xel',
        max_file_size=(50),
        max_rollover_files=(5)
)

この構成では、それぞれ最大 50 MB のファイルが作成され、ロールオーバーを通じて最大 5 つのファイルが維持されます。

5.4 セッションのオプションと設定

WITH 句は、動作とリソースの使用を制御するセッション レベルのオプションを構成します。

5.4.1 MAX_MEMORYとEVENT_RETENTION_MODE

負荷がかかった状態でメモリ割り当てとイベント処理を制御します。

WITH (
    MAX_MEMORY=4096 KB,
    EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS
)

EVENT_RETENTION_MODE のオプションには、メモリ使用量を最小限に抑える ALLOW_SINGLE_EVENT_LOSS、中程度のオーバーヘッドを実現する ALLOW_MULTIPLE_EVENT_LOSS、およびパフォーマンスへの影響を犠牲にして完全なデータ保持を実現する NO_EVENT_LOSS があります。

5.4.2 MAX_DISPATCH_LATENCY

イベントがバッファに保持される最大時間を設定します。その後、イベントはターゲットに書き込まれます。

WITH (
    MAX_DISPATCH_LATENCY=30 SECONDS
)

値を低くすると、より多くのリアルタイムデータが得られますが、その代償としてI/O操作が増加します。

5.4.3 メモリパーティションモード

ハードウェア構成に合わせてメモリのパーティション分割を最適化します。

WITH (
    MEMORY_PARTITION_MODE=PER_CPU
)

オプションには、単一パーティションの場合は NONE、NUMA システムの場合は PER_NODE、マルチ CPU システムでの最大同時実行性の場合は PER_CPU が含まれます。

5.5 セッションの開始、停止、および変更

ALTER EVENT SESSION ステートメントを通じてセッションの状態と構成を管理します。

5.5.1 開始/停止のためのイベントセッションの変更

作成後にセッションを開始する:

ALTER EVENT SESSION [SampleSession] ON SERVER STATE = START;

実行中のセッションを停止します。

ALTER EVENT SESSION [SampleSession] ON SERVER STATE = STOP;

5.5.2 既存のセッションの変更

停止中にセッション設定を変更します。イベントを追加します。

ALTER EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_batch_completed;

イベントを削除:

ALTER EVENT SESSION [SampleSession] ON SERVER
DROP EVENT sqlserver.sql_statement_completed;

5.5.3 イベントセッションのドロップ

DROP EVENT SESSION を使用してセッションを完全に削除します。

DROP EVENT SESSION [SampleSession] ON SERVER;

ドロップする前にセッションを停止する必要があります。

6. イベントターゲットの詳細な設定

6.1 event_file ターゲット構成

event_fileターゲットは、柔軟な設定オプションを備えたイベントデータの永続的なストレージを提供します。

6.1.1 ファイルパスと命名規則

イベント ファイルの完全なパスとファイル名を指定します。

ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\MySession.xel'
)

拡張イベントログファイルには.xel拡張子を使用してください。 SQL Server サービス アカウントには指定されたディレクトリへの書き込み権限があります。

6.1.2 ファイルのロールオーバーとサイズ管理

ディスク領域を管理するために自動ファイルロールオーバーを構成します。

ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\MySession.xel',
        max_file_size=(50),
        max_rollover_files=(10)
)

ファイルが50MBに達すると、 SQL Server 拡張イベントは、サフィックスが1つ増えた新しいファイルを作成します。ファイルが10個に達すると、最も古いファイルが上書きされます。

6.1.3 イベントファイルデータの読み取り

sys.fn_xe_file_target_read_file 関数を使用してイベントファイルデータを照会します。

SELECT
    event_data,
    file_name,
    file_offset
FROM sys.fn_xe_file_target_read_file(
    'C:\XEvents\MySession*.xel',
    NULL, NULL, NULL
);

ワイルドカード パターンは、セッションに関連付けられているすべてのファイルを読み取ります。

6.2 リングバッファ ターゲット使用法

ring_bufferターゲットは、最近のアクティビティに素早くアクセスできるように、イベントをメモリに保存します。

6.2.1 メモリベースのイベントストレージ

メモリベースのストレージ用に ring_buffer を設定します。

ADD TARGET package0.ring_buffer

イベントはセッションがアクティブな間のみアクセス可能であり、 SQL Server 実行中です。セッションが停止したり、サーバーが再起動したりすると、データが失われます。

6.2.2 バッファサイズと構成

リングバッファのメモリ割り当てを制御します。

ADD TARGET package0.ring_buffer(
    SET max_memory=(4096)
)

メモリをKB単位で指定します。バッファがいっぱいになると、FIFO方式で古いイベントが破棄されます。

6.2.3 リングバッファデータのクエリ

DMV を介してリング バッファー データにアクセスします。

SELECT
    CAST(target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
    ON s.address = t.event_session_address
WHERE s.name = 'YourSessionName'
    AND t.target_name = 'ring_buffer';

target_dataには、XML形式のイベント情報が含まれています。

6.3 イベントカウンターターゲット

event_counterターゲットは、詳細なデータ保存を行わずに単純なカウント機能を提供します。

ADD TARGET package0.event_counter

このターゲットは、最小限のオーバーヘッドでイベントの発生頻度を追跡するため、カウント数だけが重要な大量監視に役立ちます。

6.4 ヒストグラム ターゲット

ヒストグラムの対象は、フィールド値に基づいてイベントをグループ化します。

ADD TARGET package0.histogram(
    SET filtering_event_name=N'sqlserver.sql_statement_completed',
        source_type=0,
        source=N'database_name'
)

この構成では、データベース全体のイベントの分布を示すヒストグラムが作成されます。

6.5 ペアマッチングターゲット

pair_matchingターゲットは、ロック取得と解放などの関連イベントを関連付けます。

ADD TARGET package0.pair_matching(
    SET begin_event=N'sqlserver.lock_acquired',
        end_event=N'sqlserver.lock_released',
        begin_matching_columns=N'resource_type',
        end_matching_columns=N'resource_type'
)

これにより、ペアになった操作とその継続時間を分析できます。

7. 拡張イベントデータの表示と分析

7.1 SSMS を使用してライブデータを表示する

SQL Server Management Studio には、拡張イベント データをリアルタイムで表示するためのグラフィカル インターフェイスが用意されています。

  1. オブジェクトエクスプローラーで展開 マネジメント -> 延長イベント -> セッションズ.
  2. アクティブなセッションを右クリックします。
  3. 選択 ライブデータを見る ライブ データ ビューアーを開きます。
    拡張イベントセッションのライブデータを見る SQL Server ManagementStudio。
  4. イベントは発生するとグリッドに表示されます。
  5. 個々のイベントをクリックすると、詳細ペインに詳細なフィールド値が表示されます。
    イベントの詳細を含むイベントのライブデータを確認します。
  6. ツールバー フィルターを使用して、特定のイベント タイプまたはフィールド値に焦点を絞ります。

7.2 T-SQLによるイベントファイルデータのクエリ

T-SQL クエリは、キャプチャされたイベント データの柔軟な分析を提供します。

7.2.1 sys.fn_xe_file_target_read_file 関数

このシステム関数を使用してイベント ファイル データを読み取ります。

SELECT
    object_name AS EventName,
    CAST(event_data AS XML) AS EventData,
    file_name,
    file_offset,
    timestamp_utc
FROM sys.fn_xe_file_target_read_file(
    'C:\XEvents\MySession*.xel',
    NULL, NULL, NULL
);

この関数は、イベントごとに XML 形式の詳細を 1 行ずつ返します。

7.2.2 XMLイベントデータの解析

XML イベント データから特定の値を抽出します。

SELECT
    event_data.value('(event/@name)[1]', 'VARCHAR(50)') AS EventName,
    event_data.value('(event/@timestamp)[1]', 'DATETIME2') AS Timestamp,
    event_data.value('(event/data[@name="duration"]/value)[1]', 'BIGINT') AS Duration,
    event_data.value('(event/data[@name="statement"]/value)[1]', 'VARCHAR(MAX)') AS Statement
FROM (
    SELECT CAST(event_data AS XML) AS event_data
    FROM sys.fn_xe_file_target_read_file(
        'C:\XEvents\MySession*.xel',
        NULL, NULL, NULL
    )
) AS EventData;

XQuery 式は、XML 構造から個々のフィールド値を抽出します。

7.2.3 イベントデータをテーブルに変換する

イベント データから構造化された結果セットを作成します。

WITH EventData AS (
    SELECT CAST(event_data AS XML) AS EventXML
    FROM sys.fn_xe_file_target_read_file(
        'C:\XEvents\MySession*.xel',
        NULL, NULL, NULL
    )
)
SELECT
    EventXML.value('(event/@name)[1]', 'VARCHAR(100)') AS EventName,
    EventXML.value('(event/data[@name="cpu_time"]/value)[1]', 'BIGINT') AS CPUTime,
    EventXML.value('(event/data[@name="physical_reads"]/value)[1]', 'BIGINT') AS PhysicalReads,
    EventXML.value('(event/action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText,
    EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName
FROM EventData;

7.3 リングバッファデータのクエリ

ring_bufferターゲットからデータを抽出します。

SELECT
    n.value('(@name)[1]', 'VARCHAR(50)') AS EventName,
    n.value('(@timestamp)[1]', 'DATETIME2') AS Timestamp,
    n.value('(data[@name="duration"]/value)[1]', 'BIGINT') AS Duration,
    n.value('(action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText
FROM (
    SELECT CAST(target_data AS XML) AS TargetData
    FROM sys.dm_xe_session_targets AS t
    JOIN sys.dm_xe_sessions AS s
        ON s.address = t.event_session_address
    WHERE s.name = 'YourSessionName'
        AND t.target_name = 'ring_buffer'
) AS Data
CROSS APPLY TargetData.nodes('//event') AS q(n);

7.4 拡張イベントのシステムビュー

SQL Server 拡張イベント セッションを管理および監視するための複数の DMV とカタログ ビューを提供します。

7.4.1 sys.server_event_sessions

サーバーに保存されているセッション定義を表示します。

SELECT
    name,
    event_retention_mode_desc,
    max_dispatch_latency,
    max_memory,
    max_event_size,
    memory_partition_mode_desc
FROM sys.server_event_sessions;

このカタログ ビューには、定義されたすべてのセッションの構成の詳細が表示されます。

7.4.2 sys.dm_xe_sessions

現在アクティブなセッションを表示します:

SELECT
    name,
    create_time,
    total_regular_buffers,
    regular_buffer_size,
    total_large_buffers,
    large_buffer_size
FROM sys.dm_xe_sessions;

この DMV は、アクティブな拡張イベント セッションに関する実行時情報を提供します。

7.4.3 sys.dm_xe_session_targets

アクティブなセッションに関連付けられたターゲットを表示します。

SELECT
    s.name AS SessionName,
    t.target_name,
    t.execution_count,
    t.execution_duration_ms
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
    ON s.address = t.event_session_address;

7.4.4 その他の便利なDMV

追加のビューでは包括的なセッション情報が提供されます。

  • sys.dm_xe_session_events: アクティブセッションのイベントを一覧表示します
  • sys.dm_xe_session_event_actions: セッションイベントに設定されたアクションを表示します
  • sys.dm_xe_objects: 利用可能なすべてのイベント、アクション、およびターゲットをカタログ化します。
  • sys.dm_xe_object_columns: 各イベントタイプで利用可能な詳細フィールド
  • sys.dm_xe_packages: すべての拡張イベント パッケージを一覧表示します

8. 実用的なユースケースと例

8.1 SQL文の実行の監視

SQL ステートメントの実行を追跡すると、クエリ パターンとパフォーマンス特性に関する分析情報が得られます。

8.1.1 sql_statement_completed イベントの追跡

完了した SQL ステートメントを監視するセッションを作成します。

CREATE EVENT SESSION [QueryMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
    ACTION(
        sqlserver.sql_text,
        sqlserver.database_name,
        sqlserver.client_hostname,
        sqlserver.username
    )
)
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\QueryMonitoring.xel',
        max_file_size=(100),
        max_rollover_files=(5)
)
WITH (
    MAX_MEMORY=4096 KB,
    EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
    MAX_DISPATCH_LATENCY=30 SECONDS,
    STARTUP_STATE=OFF
);

ALTER EVENT SESSION [QueryMonitoring] ON SERVER STATE = START;

8.1.2 データベースまたはアプリケーションによるフィルタリング

述語を使用して特定のデータベースまたはアプリケーションに焦点を当てます。

CREATE EVENT SESSION [AppSpecificMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
    ACTION(sqlserver.sql_text, sqlserver.client_app_name)
    WHERE (
        [sqlserver].[database_name] = N'YourDatabase'
        AND [sqlserver].[client_app_name] LIKE N'YourApplication%'
    )
)
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\AppMonitoring.xel'
);

8.2 デッドロック情報の取得

デッドロック分析では、競合するトランザクションに関する詳細な情報を取得する必要があります。

8.2.1 xml_deadlock_report イベント

完全なデッドロック グラフをキャプチャするためのセッションを作成します。

CREATE EVENT SESSION [DeadlockMonitoring] ON SERVER
ADD EVENT sqlserver.xml_deadlock_report(
    ACTION(
        sqlserver.database_name,
        sqlserver.sql_text
    )
)
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\Deadlocks.xel'
)
WITH (STARTUP_STATE=ON);

ALTER EVENT SESSION [DeadlockMonitoring] ON SERVER STATE = START;

8.2.2 デッドロックグラフの分析

デッドロック情報を抽出して分析します。

SELECT
    EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS DeadlockTime,
    EventXML.query('.') AS DeadlockGraph
FROM (
    SELECT CAST(event_data AS XML) AS EventXML
    FROM sys.fn_xe_file_target_read_file(
        'C:\XEvents\Deadlocks*.xel',
        NULL, NULL, NULL
    )
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'xml_deadlock_report';

デッドロック グラフには、プロセス、リソース、および被害者の選択に関する詳細が含まれています。

8.3 クエリパフォーマンスの問題の追跡

実行時間とリソース消費量のメトリックを使用して、パフォーマンスが低いクエリを特定します。

8.3.1 長時間実行クエリの検出

特定の期間しきい値を超えるクエリをキャプチャします。

CREATE EVENT SESSION [LongRunningQueries] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
    ACTION(
        sqlserver.sql_text,
        sqlserver.database_name,
        sqlserver.plan_handle
    )
    WHERE ([duration] > 5000000)  -- 5 seconds in microseconds
)
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\LongQueries.xel'
);

8.3.2 実行計画分析

パフォーマンス分析のためにクエリ プランをキャプチャします。

CREATE EVENT SESSION [QueryPlans] ON SERVER
ADD EVENT sqlserver.query_post_execution_showplan(
    ACTION(
        sqlserver.sql_text,
        sqlserver.database_name
    )
    WHERE ([duration] > 10000000)  -- 10 seconds
)
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\QueryPlans.xel',
    max_file_size=(200)
);

8.4 ログインとセキュリティイベントの監視

セキュリティ監査のために認証および承認アクティビティを追跡します。

8.4.1 ログイン成功と失敗の追跡

成功したログイン試行と失敗したログイン試行の両方を監視します。

CREATE EVENT SESSION [LoginMonitoring] ON SERVER
ADD EVENT sqlserver.login(
    ACTION(
        sqlserver.client_hostname,
        sqlserver.client_app_name
    )
),
ADD EVENT sqlserver.login_failed(
    ACTION(
        sqlserver.client_hostname
    )
)
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\Logins.xel'
)
WITH (STARTUP_STATE=ON);

8.4.2 権限の変更

セキュリティ権限の変更を追跡します。

CREATE EVENT SESSION [SecurityChanges] ON SERVER
ADD EVENT sqlserver.server_principal_management_event,
ADD EVENT sqlserver.database_principal_management_event,
ADD EVENT sqlserver.database_permission_change_event
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\SecurityAudit.xel'
);

8.5 データベースレベルの監視

データベース固有の操作と状態の変化を監視します。

8.5.1 バックアップと復元イベント

バックアップと復元操作を追跡します。

CREATE EVENT SESSION [BackupMonitoring] ON SERVER
ADD EVENT sqlserver.backup_restore_progress_trace,
ADD EVENT sqlserver.databases_backup_restore_event
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\BackupRestore.xel'
);

8.5.2 データベースの状態の変化

データベースの状態遷移を監視します。

CREATE EVENT SESSION [DatabaseStateChanges] ON SERVER
ADD EVENT sqlserver.database_started,
ADD EVENT sqlserver.database_stopped
ADD TARGET package0.ring_buffer;

8.6 データベースの破損と整合性の問題の検出

SQL Server 拡張イベントは、潜在的なデータベース破損を検出するための早期警告機能を提供し、問題が拡大する前に積極的に介入することを可能にします。

8.6.1 破損検出のための主要なイベント

いくつかのイベントは、潜在的な破損または I/O の問題を示しています。

8.6.1.1 重大なエラーの error_reported イベント

error_reportedイベントは、すべての SQL Server 破損関連のエラー番号を含むエラー:

ADD EVENT sqlserver.error_reported(
    WHERE (
        [severity] >= (20)
        OR [error_number] IN (823, 824, 825, 832, 855, 856)
    )
)

エラー 823 は I/O エラーを示し、エラー 824 は論理一貫性エラーを通知し、エラー 825 はハードウェアの問題を示している可能性のある読み取り再試行の成功を報告します。

8.6.1.2 database_suspect_data_page イベント

このイベントは、 SQL Server 疑わしいページに遭遇:

ADD EVENT sqlserver.database_suspect_data_page

疑わしいページは破損の可能性を示しており、msdb.dbo.suspect_pages テーブルに記録されます。

8.6.1.3 errorlog_write イベント

書き込まれたエントリをキャプチャする SQL Server エラーログ:

ADD EVENT sqlserver.errorlog_written(
    WHERE ([severity] >= (16))
)

8.6.2 破損監視セッションの作成

腐敗の検出と監視のための包括的なセッションを確立します。

8.6.2.1 破損エラー番号のフィルタリング(823、824、825)

汚職指標に焦点を当てた、目的別セッションを作成する。

CREATE EVENT SESSION [CorruptionDetection] ON SERVER
ADD EVENT sqlserver.error_reported(
    ACTION(
        sqlserver.database_name,
        sqlserver.sql_text
    )
    WHERE (
        [error_number] IN (823, 824, 825, 832, 855, 856)
        OR [severity] >= (20)
    )
),
ADD EVENT sqlserver.database_suspect_data_page(
    ACTION(
        sqlserver.database_name
    )
)
8.6.2.2 適切な重大度レベルの設定

破損を示している可能性のある重大度の高いエラーを含めます。

WHERE (
    [severity] >= (20)
    OR [error_number] IN (823, 824, 825)
)

重大度 20 以上は、破損に関連することが多いシステム レベルの問題を示します。

8.6.2.3 アラートのイベントファイルターゲットの設定

分析と警告のために破損イベントを保存します。

ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\CorruptionMonitoring.xel',
        max_file_size=(50),
        max_rollover_files=(10)
)
WITH (
    STARTUP_STATE=ON,
    MAX_DISPATCH_LATENCY=5 SECONDS
);

ALTER EVENT SESSION [CorruptionDetection] ON SERVER STATE = START;

8.6.3 破損イベントデータの分析

キャプチャされたデータから破損関連のイベントを抽出し、解釈します。

8.6.3.1 疑わしいページの特定

database_suspect_data_page イベントのクエリ:

SELECT
    EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS EventTime,
    EventXML.value('(event/data[@name="database_id"]/value)[1]', 'INT') AS DatabaseID,
    EventXML.value('(event/data[@name="file_id"]/value)[1]', 'INT') AS FileID,
    EventXML.value('(event/data[@name="page_id"]/value)[1]', 'BIGINT') AS PageID,
    EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName
FROM (
    SELECT CAST(event_data AS XML) AS EventXML
    FROM sys.fn_xe_file_target_read_file(
        'C:\XEvents\CorruptionMonitoring*.xel',
        NULL, NULL, NULL
    )
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'database_suspect_data_page';
8.6.3.2 エラーの詳細とコンテキストの抽出

破損パターンの error_reported イベントを分析します。

SELECT
    EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS ErrorTime,
    EventXML.value('(event/data[@name="error_number"]/value)[1]', 'INT') AS ErrorNumber,
    EventXML.value('(event/data[@name="severity"]/value)[1]', 'INT') AS Severity,
    EventXML.value('(event/data[@name="message"]/value)[1]', 'VARCHAR(MAX)') AS ErrorMessage,
    EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName,
    EventXML.value('(event/action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText
FROM (
    SELECT CAST(event_data AS XML) AS EventXML
    FROM sys.fn_xe_file_target_read_file(
        'C:\XEvents\CorruptionMonitoring*.xel',
        NULL, NULL, NULL
    )
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'error_reported'
    AND EventXML.value('(event/data[@name="error_number"]/value)[1]', 'INT') IN (823, 824, 825);

8.6.4 DBCC CHECKDBとの統合

拡張イベントデータを使用してガイドする DBCCチェックDB 実行。

8.6.4.1 イベントに基づいてDBCC CHECKDBをトリガーする

破損イベントが検出された場合は、包括的な検証のために DBCC CHECKDB を実行します。

-- After detecting corruption events, run DBCC CHECKDB
DBCC CHECKDB ('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS;

拡張イベントは早期警告を提供し、DBCC CHECKDB は徹底的な検証を実行します。

8.6.4.2 自動化された腐敗対応ワークフロー

イベント ファイルを監視して自動応答を実装します。

  1. 構成 SQL Server 破損監視イベント ファイルを定期的に照会するエージェント ジョブ。
  2. 破損イベントが見つかった場合は、影響を受けるデータベースで DBCC CHECKDB を実行します。
  3. イベントの詳細と DBCC CHECKDB の結果を記載した電子メールアラートを DBA に送信します。
  4. 傾向分析のために、調査結果を集中監視テーブルに記録します。
8.6.4.3 プロアクティブ監視とパフォーマンスのバランス

拡張イベントは、頻繁な DBCC CHECKDB 実行に比べて、オーバーヘッドの少ない破損検出を提供します。

  • リアルタイムの破損検出のために拡張イベントを継続的に実行する
  • 破損の兆候が見られた場合のみDBCC CHECKDBを実行する
  • メンテナンス期間中に定期的に DBCC CHECKDB をスケジュールする
  • 拡張イベントを使用して、すぐに対応が必要なデータベースを特定します。

このアプローチにより、継続的な整合性チェックによる多大なリソース消費なしでプロアクティブな監視が可能になります。

8.6.4.4 破損したデータベースの修復

データベースに破損が検出された場合は、DBCC CHECKDBを使用して軽微な破損を修正できます。それでも解決しない場合は、サードパーティ製のツールを試すことができます。 SQLデータベース復旧ツール、これは一般に、ひどく破損したデータベースの回復率が高くなります。

9. サーバースコープの拡張イベントとデータベーススコープの拡張イベント

9.1 サーバースコープのイベントセッション

サーバースコープのセッションは、サーバー全体のアクティビティを監視します。 SQL Server インスタンス。これらのセッションは ON SERVER 句で作成され、マスター データベースに保持されます。

CREATE EVENT SESSION [ServerWideMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\ServerWide.xel'
);

サーバー スコープのセッションは、すべてのデータベースからイベントをキャプチャし、インスタンス レベルの監視に適しています。

9.2 データベース スコープのイベント セッション (Azure SQL Database)

データベース スコープのセッションは単一のデータベースに制限されており、主にサーバー レベルのアクセスが制限されている Azure SQL Database で使用されます。

CREATE EVENT SESSION [DatabaseSpecificMonitoring] ON DATABASE
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
    SET filename=N'DatabaseMonitoring.xel'
);

Azure SQL Database では、イベント ファイルはローカル ファイル システムではなく Azure Blob Storage に保存されます。

9.3 違いとユースケース

サーバースコープのセッションは、すべてのデータベースを包括的に監視できますが、昇格された権限が必要です。データベーススコープのセッションは分離性を提供し、特定のアプリケーションやテナントを監視する場合に適しています。

サーバースコープのセッションは、集中監視、データベース全体のパフォーマンスのトラブルシューティング、セキュリティ監査に使用できます。Azure SQL Database、マルチテナント環境、またはアプリケーション チームに監視責任を委任する場合に、データベーススコープのセッションを使用します。

10. Azure SQL Database の拡張イベント

10.1 Azure固有の考慮事項

Azure SQL Database はオンプレミスとは若干異なる拡張イベントを実装しています SQL Serverセッションは既定でデータベース スコープに設定され、イベント ファイル ストレージではローカル ファイル システムではなく Azure Blob Storage が使用されます。

Azure Blob Storageへの認証には、イベントファイルターゲット内に構成されたSASトークンが必要です。接続文字列は、イベントファイルが保存されるストレージアカウントとコンテナーを参照します。

10.2 Azureで利用可能なターゲット

Azure SQL Database は、以下の拡張イベントターゲットをサポートしています。

  • event_file: Azure Blob Storage に書き込みます
  • ring_buffer: オンプレミスと同じ動作をするメモリベースのストレージ
  • event_counter: イベントの発生回数をカウントします

event_fileターゲットには、Azure Blob Storageの認証情報を使用した構成が必要です。

ADD TARGET package0.event_file(
    SET filename=N'https://yourstorageaccount.blob.core.windows.net/container/EventFile.xel'
)

10.3 データベーススコープセッションの作成

Azure SQL Database でセッションを作成します。

CREATE EVENT SESSION [AzureMonitoring] ON DATABASE
ADD EVENT sqlserver.sql_statement_completed(
    ACTION(sqlserver.sql_text, sqlserver.database_name)
)
ADD TARGET package0.ring_buffer
WITH (MAX_MEMORY=4096 KB);

ALTER EVENT SESSION [AzureMonitoring] ON DATABASE STATE = START;

Azure のデータベース スコープ セッションは、オンプレミスのサーバー スコープ セッションと同様に動作しますが、スコープは現在のデータベースに制限されます。

11. ベストプラクティスとパフォーマンスの最適化

11.1 パフォーマンスへの影響を最小限に抑える

拡張イベントはオーバーヘッドを最小限に抑えるように設計されていますが、不適切な構成はパフォーマンスに影響を与える可能性があります。以下のガイドラインに従ってください。

  • すべてをキャプチャするのではなく、特定の述語を使用してイベントをフィルタリングします
  • 処理オーバーヘッドを追加する不要なアクションの収集を避ける
  • データ保持のニーズに基づいて適切なターゲットを選択する
  • 適切なバッファサイズとディスパッチレイテンシを設定する
  • DMV を使用してセッション リソースの消費を監視する

11.2 適切なイベントとフィルターの選択

監視目標に直接対応するイベントを選択してください。必要がない限り、高頻度のイベントは避け、常に述語を適用してデータ量を削減してください。

たとえば、すべての sql_statement_completed イベントをキャプチャするのではなく、特定のデータベースまたは期間のしきい値をフィルタリングします。

WHERE (
    [sqlserver].[database_name] = N'ProductionDB'
    AND [duration] > 1000000
)

11.3 ターゲット選定ガイドライン

分析要件に基づいてターゲットを選択してください。

  • 詳細な履歴分析と長期保存にはevent_fileを使用します
  • I/Oへの影響を最小限に抑えながらリアルタイム監視を行うには、ring_bufferを使用します。
  • 頻度のみが重要な場合はevent_counterを使用する
  • 分布分析にヒストグラムを使用する
  • 相関イベント分析にはpair_matchingを使用する

11.4 セッション構成の推奨事項

適切なリソース制限でセッションを構成します。

  • 予想されるイベント量とサーバーリソースに基づいて MAX_MEMORY を設定します
  • ほとんどのシナリオでは、オーバーヘッドを最小限に抑えるためにALLOW_SINGLE_EVENT_LOSSを使用してください。
  • リアルタイムのニーズとパフォーマンスのバランスをとるために MAX_DISPATCH_LATENCY を設定します
  • マルチプロセッサ システムでは PER_CPU メモリ パーティショニングを使用します。
  • 継続的な監視が必要な場合を除き、STARTUP_STATE=ON は避けてください。

11.5 イベントファイルのサイズと保存期間の管理

無制限のディスク使用を防ぐためにファイルロールオーバーを構成します。

ADD TARGET package0.event_file(
    SET filename=N'C:\XEvents\Session.xel',
        max_file_size=(100),
        max_rollover_files=(10)
)

この構成では、約1GBのイベントデータ(10ファイル×100MB)が保持されます。保存期間の要件と利用可能なストレージ容量に応じて調整してください。

12. 拡張イベントのトラブルシューティング

12.1 一般的な問題と解決策

一般的な拡張イベントの問題としては、セッションがデータを取得できない、パフォーマンスの低下、ファイルターゲットの問題、予期しないセッション動作などが挙げられます。

12.2 セッションがデータをキャプチャしない

セッションが予期されたイベントをキャプチャしていない場合:

  1. sys.dm_xe_sessions を使用してセッションが開始されたことを確認します。
  2. 述語をチェックして、すべてのイベントがフィルター処理されないことを確認します。
  3. フィルターを一時的に削除して、イベントが正しく発生していることを確認してください。
  4. 権限を確認し、セッション データを表示するアクセス権があることを確認します。
  5. ターゲット構成が正しく、書き込み可能であることを確認してください。
SELECT name, create_time
FROM sys.dm_xe_sessions
WHERE name = 'YourSessionName';

12.3 パフォーマンスの低下

拡張イベントによってパフォーマンスの問題が発生する場合:

  1. イベントの量を減らすために述語を追加します。
  2. 補足データを収集する不要な操作を削除してください。
  3. 書き込み頻度を減らすには、MAX_DISPATCH_LATENCY を増やします。
  4. EVENT_RETENTION_MODE を ALLOW_SINGLE_EVENT_LOSS に変更します。
  5. 高頻度のイベントの場合は、event_file の代わりに ring_buffer を使用することを検討してください。

12.4 ファイルターゲットの問題

ファイルターゲットの問題は、多くの場合、アクセス権限またはディスク容量に関連しています。

  1. その SQL Server サービスアカウントには、対象ディレクトリへの書き込み権限があります。
  2. 十分なディスク容量があることを確認してください。
  3. 指定されたパスが存在し、アクセス可能であることを確認します。
  4. ファイルが期待どおりにロールオーバーされない場合は、ファイル ロールオーバー構成を確認してください。

12.5 システムビューによるデバッグ

DMV を使用して拡張イベントの問題を診断します。

-- Check session status
SELECT s.name, s.create_time, s.total_regular_buffers, s.total_large_buffers
FROM sys.dm_xe_sessions AS s;

-- View session targets and their status
SELECT
    s.name AS SessionName,
    t.target_name,
    t.execution_count,
    CAST(t.target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
    ON s.address = t.event_session_address;

-- Check for dropped events
SELECT s.name, s.dropped_event_count, s.dropped_buffer_count
FROM sys.dm_xe_sessions AS s;

13. 高度なトピック

13.1 カスタムイベントパッケージの作成

上級ユーザーはカスタムイベントパッケージを作成して拡張することができます SQL Server 拡張イベント機能。これにはC++開発と統合が必要です。 SQL Server 拡張性フレームワーク。

カスタム パッケージを使用すると、アプリケーション固有のイベントを監視したり、サードパーティの監視システムを Extended Events インフラストラクチャと統合したりできます。

13.2 イベントセッションテンプレート

SSMS には、一般的な監視シナリオ用の組み込みテンプレートが用意されています。ウィザードを使用して新しいセッションを作成するときに、テンプレートにアクセスします。

  1. 「新規セッション」ダイアログで、 テンプレート ドロップダウン。
  2. クエリ詳細追跡やシステムヘルスなどの利用可能なテンプレートから選択します。
  3. 特定の要件に合わせてテンプレートを変更します。

13.3 監視ソリューションとの統合

拡張イベント データは、エンタープライズ監視ソリューションに提供できます。

  • イベントデータを集中ログシステムにエクスポートする
  • イベントファイルを解析し、監視データベースにデータをロードします
  • BIツールを使用してカスタムダッシュボードを作成する
  • 特定のイベントパターンに基づいてアラートをトリガーする
  • 相関する SQL Server アプリケーションとインフラストラクチャのメトリクスを含むイベント

13.4 自動化とスケジュール

拡張イベント管理を自動化する SQL Server エージェント:

  • 特定の時間帯にセッションを開始/停止するジョブを作成する
  • イベントファイルの分析とレポートをスケジュールする
  • 古いイベントファイルをアーカイブまたは削除してデータ保持ポリシーを実装する
  • パフォーマンスの問題やセキュリティイベントなどの検出された状況への対応を自動化します

14. からの移行 SQL Server プロファイラー

14.1 SQL Server プロファイラーイベントから拡張イベントへのマッピング

Microsoftは、 SQL Server プロファイラー イベントと拡張イベント。一般的なマッピングには以下が含まれます。

  • SQL:バッチ完了 -> sql_batch_completed
  • SQL:BatchStarting -> sql_batch_starting
  • SQL:ステートメントが完了しました -> sql_statement_completed
  • SQL:StmtStarting -> sql_statement_starting
  • デッドロックグラフ -> xml_deadlock_report
  • 監査ログイン -> ログイン
  • 監査ログアウト -> ログアウト

14.2 トレース定義の変換

既存のものを変換 SQL Server プロファイラーは、同等のイベントを識別し、適切な述語を構成することで、拡張イベント セッションをトレースします。SSMS は、一般的な変換のサポートを提供します。

トレースフィルターを確認し、拡張イベント述語に変換します。拡張イベントのアクションは、トレース列を SQL Server プロファイラー。

14.3 性能比較

拡張イベントは、 SQL Server プロファイラー。ベンチマーク調査によると、拡張イベントは CPU サイクルの消費量が少なく、トランザクション スループットへの影響も少ないことがわかっています。

拡張イベントは非同期処理と最適化されたメモリ管理を使用し、 SQL Server プロファイラーは、トレース処理が完了するまでブロックする同期イベント キャプチャに依存します。

15. 結論

15.1 主要概念の要約

SQL Server 拡張イベントは、監視とトラブルシューティングのための強力で軽量なフレームワークを提供します。 SQL Serverこのアーキテクチャは、関連するサーバーアクティビティを捕捉するために連携して動作するイベント、アクション、述語、ターゲット、およびセッションで構成されています。

セッションはSSMSまたはT-SQLを使用して作成でき、アドホックなトラブルシューティングと自動監視の両方に柔軟に対応できます。複数のターゲットタイプが、ring_bufferを使用したリアルタイム監視からevent_fileを使用した履歴分析まで、さまざまな分析手法をサポートしています。

拡張イベントは、 SQL Server プロファイラーは、より包括的な監視機能を提供します。このシステムにより、データベース管理者と開発者は、問題の診断、パフォーマンスの最適化、セキュリティの強化、コンプライアンスの維持が可能になります。

15.2 次のステップとさらなるリソース

開発を継続するには SQL Server XEventsの専門知識:

  • テスト環境で拡張イベントを実装して実践的な経験を積む
  • 完全なイベントカタログと詳細な構文リファレンスについては、Microsoft のドキュメントを参照してください。
  • 加入団体 SQL Server 他の人の経験から学ぶためのコミュニティフォーラム
  • カスタム パッケージや監視プラットフォームとの統合などの高度なシナリオを検討します
  • 一般的な監視シナリオに対応したセッションテンプレートのライブラリを作成する

16 FAQセクション

Q: とは何ですか SQL Server 拡張イベント?

A: SQL Server Extended Eventsは、 SQL Server 最小限のオーバーヘッドでサーバー操作に関する詳細な情報を取得するデータベース エンジン。

Q: 拡張イベントは SQL Server プロファイラー?

A: 拡張イベントは、パフォーマンスが向上し、オーバーヘッドが低減し、構成がより柔軟になります。 SQL Server プロファイラー。 SQL Server プロファイラーは非推奨であり、Microsoft ではすべての監視タスクに拡張イベントを使用することを推奨しています。

Q: 拡張イベントは影響を与えるか SQL Server パフォーマンス?

A: 適切な述語とリソース制限を適切に設定すれば、拡張イベントのパフォーマンスへの影響は最小限に抑えられます。フィルタリングを行わない不適切な設定は、パフォーマンスに影響を与える可能性があります。

Q: 拡張イベント セッションを作成するにはどのような権限が必要ですか?

A: サーバー スコープのセッションの場合は ALTER ANY EVENT SESSION 権限が必要であり、データベース スコープのセッションの場合はデータベースに対する CONTROL 権限が必要です。

Q: 拡張イベント データを表示するにはどうすればよいですか?

A: 使用 SQL Server Management Studio のライブデータビューアを使用するか、sys.fn_xe_file_target_read_file を使用してイベントファイルを照会するか、DMV を介してリングバッファデータを照会します。

Q: 拡張イベントはデータベースの破損を検出できますか?

A: はい、拡張イベントは破損関連のエラー (823、824、825) と疑わしいページ イベントをキャプチャし、破損の可能性がある問題に関する早期警告を提供します。

Q: イベント、アクション、述語の違いは何ですか?

A:イベントとは、監視したい事象のことです。アクションは、取得したイベントに補足情報を追加します。述語は、条件に基づいてイベントをフィルタリングし、データ量を削減します。

Q: 特定のアプリケーションまたはデータベースからのクエリを監視するにはどうすればよいですか?

A: イベント構成で述語を使用して、database_name、client_app_name、またはその他の関連フィールドでフィルタリングします。

Q: 拡張イベントでは、どのようなターゲットを使用すればよいですか?

A: 永続的なストレージと履歴分析には event_file を使用し、オーバーヘッドの少ないリアルタイム監視には ring_buffer を使用し、単純な頻度追跡には event_counter を使用し、分布分析には histogram を使用します。

Q: 拡張イベントは Azure SQL Database で利用できますか?

A: はい、Azure SQL Database は、Azure Blob Storage に保存されたイベント ファイルを使用したデータベース スコープの拡張イベントをサポートしています。

Q: データをキャプチャしていない拡張イベント セッションをトラブルシューティングするにはどうすればよいですか?

A: セッションが開始されていることを確認し、述語がすべてのイベントをフィルタリングしていないことを確認し、ターゲット構成を確認し、システム DMV を使用して権限を確認します。

Q: 拡張イベントの管理を自動化できますか?

A: はい、使用してください SQL Server エージェントのジョブは、セッションの開始/停止、イベントファイルの分析、保持ポリシーの実装、および検出された状況への対応を行います。

参考情報


著者について

袁勝 10年以上の経験を持つ上級データベース管理者(DBA)です。 SQL Server 環境およびエンタープライズデータベース管理に精通しており、金融サービス、医療、製造業など、様々な組織において数百件のデータベース復旧シナリオを解決してきました。

ユアンの専門は SQL Server データベースの復旧、 高可用性ソリューション、パフォーマンスの最適化など、幅広い実務経験を有しています。彼の豊富な実務経験には、マルチテラバイトデータベースの管理、 Always On 可用性グループ、ミッションクリティカルなビジネス システム向けの自動バックアップおよびリカバリ戦略を開発します。

Yuanは、技術的な専門知識と実践的なアプローチを通じて、データベース管理者やITプロフェッショナルが複雑な問題を解決するのに役立つ包括的なガイドの作成に重点を置いています。 SQL Server 効率的に課題に取り組みます。常に最新の SQL Server リリースと Microsoft の進化するデータベース テクノロジを活用し、定期的にリカバリ シナリオをテストして、推奨事項が実際のベスト プラクティスを反映していることを確認します。

について質問があります SQL Server 回復または追加のデータベーストラブルシューティングガイダンスが必要ですか?Yuanは歓迎します フィードバックと提案 これらの技術リソースを改善するためです。

今すぐ共有: