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

はじめに

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

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

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

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

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

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

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

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

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

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

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

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

2.2 イベントパッケージ

SQL Server 拡張イベントは機能をパッケージにまとめます。各パッケージには、関連するイベント、アクション、型、述語などが含まれます。 tar取得します。一般的なパッケージには、sqlserver、sqlos、package0 などがあります。

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

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

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

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

2.4つのアクション

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

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

2.5 Tarを取得

Tarイベント データが保存される方法と場所を決定します。 SQL Server 拡張イベントは複数の tar次のようなタイプを取得します:

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

2.6 述語(フィルタ)

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

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

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

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

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

  • CREATE EVENT SESSION文は新しいセッションを定義しますが、tar明示的にアクティブ化されるまで、セッションは停止状態で存在します。
  • ALTER EVENT SESSION文はセッション構成を変更したり、停止状態と実行状態の間で状態を変更したりします。tarテッド。
  • DROP EVENT SESSION ステートメントは、セッション定義をサーバーから完全に削除します。

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

各セッションにはイベント、アクション、 tar取得、述語などです。セッションには、そのスコープと動作を定義する暗黙の境界があります。設定オプションは、メモリ割り当て、イベントの保持、ディスパッチの遅延を制御します。

セッションの特性には、サーバーリソース間で持続するかどうかが含まれます。tarts、最大メモリ割り当て、そしてメモリ不足への対処方法。これらの設定は、セッションの動作とリソース消費に大きな影響を与えます。

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

セッション境界はイベント間の関係を定義します。 tar取得、パッケージ。あるパッケージのイベントが別のパッケージのアクションをトリガーできるため、データ収集戦略に柔軟性が生まれます。

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

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

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

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

それを確認する SQL Server Management Studioがインストールされ、 tarインスタンスを取得します。監視要件を理解し、どのイベントと tarあなたのニーズに最適なものになります。

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

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

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

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

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

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

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

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

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

4.3.1 一般的なページ構成

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

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

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

4.3.2 イベントページの設定

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

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

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

4.3.3 データストレージ構成

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

  1. まず データストレージ 左からのページ ページを選択 パネル。
  2. Tarを取得 エリアを選択してください tarドロップダウンからタイプを取得します。

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

(1) イベントファイル Tar取得する

イベントファイル target は、.xel 拡張子を持つディスク ファイルにデータを保存します。

  1. 選択する イベントファイル tarタイプドロップダウンを取得します。
  2. C:\temp\YourSession_ などのファイルパスを指定します。Tar.xel を取得します。
  3. 最大ファイル サイズとファイル数を設定してディスク領域を管理するためのロールオーバー オプションを構成します。
  4. その target は、セッションが停止するか、ストレージ制限に達するまで、イベントを継続的に書き込みます。

セッションを設定する tarSSMSでevent_fileにアクセスする

(2)リングバッファ Tar取得する

リングバッファ target は、ディスク I/O なしですばやくアクセスできるようにイベントをメモリに保存します。

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

をセットする  tar拡張イベントセッションのring_bufferにアクセスする SQL Server ManagementStudio。

(3)イベントカウンター Tar取得する

イベントカウンタ target は、詳細なデータを保存せずにイベントの発生回数をカウントするだけです。頻度情報のみが必要な場合、オーバーヘッドは最小限に抑えられます。

をセットする  tar拡張イベントセッションのevent_counterを取得する SQL Server ManagementStudio。

(4)ヒストグラム Tar取得する

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

をセットする  tar拡張イベントセッションのヒストグラムを取得する SQL Server ManagementStudio。

(5) ペアマッチング Tar取得する

ペアマッチング target は、ロックの取得と解放といった関連イベントを相関させます。これにより、ペアになった操作とそのタイミング関係を分析できます。

セッションを設定する tarSSMSでpair_matchingを実行する

4.3.4詳細設定

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

  1. まず 高機能 左からのページ ページを選択 パネル。
  2. 構成 イベント保持モード メモリ不足の状態でイベントを処理する方法を制御します。
  3. 作成セッションプロセスで 最大ディスパッチ遅延 リアルタイム処理とシステムパフォーマンスのバランスをとるため。
  4. 構成 最大メモリサイズ の三脚と 最大イベントサイズ 監視要件に基づいて。
  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. サプリメントを追加するアクションを選択tardatabase_name や client_app_name などの y 情報。
    イベントのアクションを構成します。
  5. 確認 イベントフィールド 自動的にキャプチャされるフィールドを確認するには、このセクションを参照してください。
  6. 不要なフィールドをクリアしてデータ量を削減します。
    イベントのフィールドを構成します。

4.6 Starセッションの管理

セッションを設定したら、tarそれを実行し、その動作を監視します。

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

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

5.1 CREATE EVENT SESSION構文

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

基本的な構文には、セッション名、各イベントのADD EVENT句、ADDが含まれます。 TARストレージの宛先を指定する GET 句と、セッション構成を指定するオプションの WITH 句。

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

基本セッションは特定のイベントを監視し、結果を tar取得します。必須コンポーネントの構築方法は次のとおりです。

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

Starわかりやすい名前でセッションを作成します。

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 イベントの追加 Tarを取得

Tarイベント データが保存される場所と処理方法を定義します。

5.3.1年追加 TARGET構文

追加 tarADDを使用して取得 TARすべてのイベントが定義された後の GET 句:

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

package0プレフィックスは、 target はベース パッケージから取得されます。

5.3.2 設定 Tarパラメータを取得する

各 target型は特定のパラメータを受け入れます。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、およびcでのデータ完全保持を実現するNO_EVENT_LOSSが含まれます。ost 潜在的なパフォーマンスへの影響。

5.4.2 MAX_DISPATCH_LATENCY

イベントが書き込まれる前にバッファに留まれる最大時間を設定します。 tar取得:

WITH (
    MAX_DISPATCH_LATENCY=30 SECONDS
)

値が低いほど、cでより多くのリアルタイムデータが提供されます。ost I/O 操作の増加。

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

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

WITH (
    MEMORY_PARTITION_MODE=PER_CPU
)

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

5.5 Starセッションの開始、停止、変更

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

5.5.1 SのALTER EVENT SESSIONtart/停止

Star作成後のセッション:

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. イベントの操作 Tar詳細に

6.1 イベントファイル Tar設定を取得する

イベントファイル target は、柔軟な構成オプションを使用してイベント データの永続的なストレージを提供します。

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 リングバッファ Tar使用方法を取得する

リングバッファ target は最近のアクティビティにすばやくアクセスできるようにイベントをメモリに保存します。

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

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

ADD TARGET package0.ring_buffer

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

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 イベントカウンター Tar取得する

イベントカウンタ target は詳細なデータを保存せずに単純なカウントを提供します。

ADD TARGET package0.event_counter

この target は、最小限のオーバーヘッドでイベント頻度を追跡します。カウントのみが重要な大量監視に役立ちます。

6.4 ヒストグラム Tar取得する

ヒストグラム tarフィールド値でグループイベントを取得します。

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

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

6.5 ペアマッチング Tar取得する

ペアマッチング target は、ロックの取得と解放などの関連イベントを相関させます。

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からデータを抽出する tar取得:

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_tarを取得

表示 tarアクティブセッションに関連付けられます:

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: 利用可能なすべてのイベント、アクション、および tarを取得
  • 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)

作る tar汚職指標に焦点を当てたセッション:

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 イベントファイルの設定 Tarアラートを取得する

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

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 トークンが必要です。 tar取得します。接続文字列は、イベント ファイルが保存されるストレージ アカウントとコンテナーを参照します。

利用可能な10.2 TarAzureに入る

Azure SQL Databaseはこれらの拡張イベントをサポートしています tar取得:

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

イベントファイル target には、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 パフォーマンスへの影響を最小限に抑える

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

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

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

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

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

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

11.3 Tar選択ガイドラインを取得する

選択する tar分析要件に基づいて取得します。

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

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

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

  • 予想されるイベント量とサーバーリソースに基づいて MAX_MEMORY を設定します
  • mのオーバーヘッドを最小限に抑えるには、ALLOW_SINGLE_EVENT_LOSSを使用します。ost シナリオ
  • リアルタイムのニーズとパフォーマンスのバランスをとるために MAX_DISPATCH_LATENCY を設定します
  • マルチプロセッサ システムでは PER_CPU メモリ パーティショニングを使用します。
  • Sを避けるTAR継続的な監視が必要でない限り、TUP_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 一般的な問題と解決策

拡張イベントの一般的な問題には、セッションがデータをキャプチャしない、パフォーマンスの低下、ファイル tar問題が発生したり、予期しないセッション動作が発生したりする可能性があります。

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

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

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

12.3 パフォーマンスの低下

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

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

12.4ファイル Tar問題を取得する

File tar多くの場合、問題は権限またはディスク容量に関連しています。

  1. その SQL Server サービスアカウントには書き込み権限があります tarディレクトリを取得します。
  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 エージェント:

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

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

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

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

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

14.2 トレース定義の変換

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

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

14.3 性能比較

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

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

15. 結論

15.1 主要概念の要約

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

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

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

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

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

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

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: イベントは監視したい出来事です。アクションは補足情報を追加します。tarキャプチャされたイベントにy情報を追加します。述語は条件に基づいてイベントをフィルタリングし、データ量を削減します。

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

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

Q:何 tar拡張イベントにはどの get を使用すればよいですか?

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

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

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

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

A: セッションがsであることを確認しますtarテッド、チェック述語がすべてのイベントをフィルタリングしていないことを確認してください tarシステム DMV を使用して構成を取得し、権限を確認します。

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

A: はい、使用してください SQL Server エージェントの仕事tarセッションを停止/中断し、イベント ファイルを分析し、保持ポリシーを実装し、検出された状態に応答します。

参考情報


著者について

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

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

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

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

今すぐ共有: