SQL Database の拡張イベント

このトピックでは、Azure SQL Database での拡張イベントの実装が Microsoft SQL Server の拡張イベントの場合と若干異なる点について説明します。

  • SQL Database V12 では 2015 年の後半に拡張イベント機能が追加されました。
  • SQL Server には 2008 年から拡張イベント機能があります。
  • SQL Database での拡張イベントの機能セットは SQL Server における機能の堅牢なサブセットです。

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

Azure SQL Database と Microsoft SQL Server の拡張イベントについては、次のトピックをご覧ください。

前提条件

このトピックは、以下の知識をお持ちのユーザーを想定しています。

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

コード サンプル

関連するトピックで次の&2; つのコード サンプルを提供します。

Transact-SQL の相違点

  • CREATE EVENT SESSION コマンドを SQL Server で実行する際は、 ON SERVER 句を使用します。 ところが、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 イベント セッションの各イベントに対する操作ごとに行を返します。
sys.database_event_session_events イベント セッションのイベントごとに行を返します。
sys.database_event_session_fields イベントとターゲットに明示的に設定されたカスタマイズ可能な列ごとに行を返します。
sys.database_event_session_targets イベント セッションに対してイベント ターゲットごとに行を返します。
sys.database_event_sessions SQL Database のデータベース内のイベント セッションごとに行を返します。

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 と Microsoft SQL Server の両方に共通した DMV も存在します。

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

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

簡単な SQL SELECT を実行して、使用可能なイベント、アクション、ターゲットのリストを取得できます。

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;

 

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

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

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

制限

SQL Database のクラウド環境に利点となるセキュリティ関連の相違点を次にいくつか挙げます。

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

権限モデル

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

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

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

  • 読み取り
  • 書き込み
  • 一覧表示

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

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

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

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

ネットワーク待ち時間

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

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

関連リンク

拡張イベントの他のコード サンプル トピックは次のリンクから入手可能です。 ただし、対象が Azure SQL Database または Microsoft SQL Server のどちらかを確認するために、サンプルを定期的にチェックする必要があります。 それにより、サンプルを実行するのにわずかな変更が必要かどうか判断できます。