Azure SQL Database での拡張イベント

適用対象: Azure SQL Database

Azure SQL Database での拡張イベントの機能セットは SQL Server および Azure SQL Managed Instance における機能の堅牢なサブセットです。

XEvents は「拡張イベント」の非公式のニックネームで、ブログや他の非公式な場所で使われます。

拡張イベントの詳細については、以下を参照してください。

前提条件

この記事は、以下の知識をお持ちのユーザーを想定しています。

  • Azure SQL Database

  • 拡張イベント

  • 拡張イベントに関するドキュメントの大部分は、SQL Server、Azure SQL Database、および Azure SQL Managed Instance に適用されます。

イベント ファイルを ターゲットとして選択する際、以下の項目についての知識が役立ちます。

コード サンプル

関連記事には、次の 2 つのコード サンプルが含まれています。

Transact-SQL の相違点

  • CREATE EVENT SESSION コマンドを SQL Server で実行する際は、 ON SERVER 句を使用します。 ところが、Azure SQL Database では ON DATABASE 句を使用します。

  • ON DATABASE 句も ALTER EVENT SESSION および DROP EVENT SESSION Transact-SQL コマンドに適用されます。

  • CREATE EVENT SESSION または ALTER EVENT SESSION ステートメントで STARTUP_STATE = ON のイベント セッション オプションを含ませるのがベスト プラクティスです。

    • = ON 値は、フェールオーバーに伴う論理データベース再構成の後の自動再起動をサポートします。

新しいカタログ ビュー

拡張イベント機能をサポートする カタログ ビューがいくつかあります。 カタログ ビューでは、現在のデータベースにおけるユーザー作成のイベント セッションの メタデータまたは定義 がわかります。 ビューでは、アクティブなイベント セッションのインスタンスについてはわかりません。

カタログ ビューの名前
カタログ ビュー
説明
sys.database_event_session_actions イベント セッションの各イベントのアクションごとに 1 行のデータを返します。
sys.database_event_session_events イベント セッションのイベントごとに行を返します。
sys.database_event_session_fields イベントとターゲットに明示的に設定されたカスタマイズ可能な列ごとに行を返します。
sys.database_event_session_targets イベント セッションのイベント ターゲットごとに 1 行のデータを返します。
sys.database_event_sessions データベース内のイベント セッションごとに行を返します。

Microsoft SQL Server では、同様のカタログ ビュー名には .database_ ではなく、 .server_ が含まれています。 名前のパターンは sys.server_event_% のようになります。

新しい動的管理ビュー (DMV)

Azure SQL Database には、拡張イベントをサポートする 動的管理ビュー (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 現在のデータベースを対象としたイベント セッションごとに行を返します。

Microsoft SQL Server では、同様のカタログ ビューは次のように名前から _database 部分を削除した命名がなされています。

  • sys.dm_xe_sessions (sys.dm_xe_database_sessions の代わり)

両者に共通の DMV

拡張イベントについては、次のような Azure SQL Database、Azure SQL Managed Instance、および Microsoft SQL Server に共通した DMV も存在します。

  • sys.dm_xe_map_values
  • sys.dm_xe_object_columns
  • sys.dm_xe_objects
  • sys.dm_xe_packages

使用可能な拡張イベント、アクション、ターゲットを検索

使用可能なイベント、アクション、ターゲットの一覧を取得するには、サンプル クエリを使用します。

SELECT
        o.object_type,
        p.name         AS [package_name],
        o.name         AS [db_object_name],
        o.description  AS [db_obj_description]
    FROM
                   sys.dm_xe_objects  AS o
        INNER JOIN sys.dm_xe_packages AS p  ON p.guid = o.package_guid
    WHERE
        o.object_type in
            (
            'action',  'event',  'target'
            )
    ORDER BY
        o.object_type,
        p.name,
        o.name;

 

Azure SQL Database イベント セッションのターゲット

Azure SQL Database のイベント セッションから結果を取得できるターゲットを次に挙げます。

Event Tracing for Windows (ETW) API は Azure SQL Database の拡張イベントでは使用できません。

制限

Azure SQL Database のクラウド環境にふさわしいセキュリティ関連の相違点を次にいくつか挙げます。

  • 拡張イベントは単一テナントの分離モデルが元になっています。 あるデータベースのイベント セッションが他のデータベースからのデータやイベントにアクセスすることはできません。
  • master データベースのコンテキストで、CREATE EVENT SESSION ステートメントを実行することはできません。

権限モデル

CREATE EVENT SESSION ステートメントを実行するには、データベースで コントロール 権限が必要です。 データベース所有者 (dbo) には コントロール 権限があります。

ストレージ コンテナーの承認

Azure Storage コンテナーのために生成した SAS トークンには、権限として rwl を指定する必要があります。 rwl 値により次のアクセスが許可されます。

  • Read
  • Write
  • List

パフォーマンスに関する考慮事項

システム全体にとって不健全と言える程、拡張イベントの使い過ぎによるアクティブメモリの蓄積が起きるシナリオがあります。 そのため、Azure SQL Database はイベント セッションによって蓄積され得るアクティブ メモリの量に対する制限を動的に設定、調整します。 多くの要因が動的な計算に影響します。

次の場合、Azure SQL Database の XEvent セッションで使用できるメモリに上限があります。

  • DTU 購入モデルの単一の Azure SQL Database では、各データベースで最大 128 MB を使用できます。 これは、Premium レベルでのみ 256 MB に引き上げられます。
  • 仮想コア購入モデルの単一の Azure SQL Database では、各データベースで最大 128 MB を使用できます。
  • エラスティック プールでは、個々のデータベースは単一データベースの制限によって制限され、合計で 512 MB を超えることはできません。

メモリの最大量が使用されたというエラー メッセージを受信した場合、次の修正措置を実行することができます。

  • 同時実行するイベント セッションを減少させる。
  • イベント セッションの CREATEALTER ステートメントにより、MAX_MEMORY 句で指定するメモリ量を減少させる。

ネットワーク待ち時間

Azure Storage BLOB にデータを保持する際に、 イベント ファイル ターゲットでネットワークの遅延や障害が発生することがあります。 ネットワーク通信の完了を待機する際に、Azure SQL Database の他のイベントが遅延することがあります。 この遅延によってワークロードが遅くなる可能性があります。

  • このパフォーマンス リスクを防ぐため、イベント セッション定義の NO_EVENT_LOSS に対して EVENT_RETENTION_MODE オプションの設定を避けてください。