SQL Database の拡張イベントExtended events in SQL Database

このトピックでは、Azure SQL Database での拡張イベントの実装が Microsoft SQL Server の拡張イベントの場合と若干異なる点について説明します。This topic explains how the implementation of extended events in Azure SQL Database is slightly different compared to extended events in Microsoft SQL Server.

  • SQL Database V12 では 2015 年の後半に拡張イベント機能が追加されました。SQL Database V12 gained the extended events feature in the second half of calendar 2015.
  • SQL Server には 2008 年から拡張イベント機能があります。SQL Server has had extended events since 2008.
  • SQL Database での拡張イベントの機能セットは SQL Server における機能の堅牢なサブセットです。The feature set of extended events on SQL Database is a robust subset of the features on SQL Server.

XEvents は「拡張イベント」の非公式のニックネームで、ブログや他の非公式な場所で使われます。XEvents is an informal nickname that is sometimes used for 'extended events' in blogs and other informal locations.

Azure SQL Database と Microsoft SQL Server の拡張イベントについては、次のトピックをご覧ください。Additional information about extended events, for Azure SQL Database and Microsoft SQL Server, is available at:

前提条件Prerequisites

このトピックは、以下の知識をお持ちのユーザーを想定しています。This topic assumes you already have some knowledge of:

イベント ファイルを ターゲットとして選択する際、以下の項目についての知識が役立ちます。Prior exposure to the following items is helpful when choosing the Event File as the target:

コード サンプルCode samples

関連するトピックで次の 2 つのコード サンプルを提供します。Related topics provide two code samples:

Transact-SQL の相違点Transact-SQL differences

  • CREATE EVENT SESSION コマンドを SQL Server で実行する際は、 ON SERVER 句を使用します。When you execute the CREATE EVENT SESSION command on SQL Server, you use the ON SERVER clause. ところが、SQL Database では ON DATABASE 句を使用します。But on SQL Database you use the ON DATABASE clause instead.

  • ON DATABASE 句も ALTER EVENT SESSION および DROP EVENT SESSION Transact-SQL コマンドに適用されます。The ON DATABASE clause also applies to the ALTER EVENT SESSION and DROP EVENT SESSION Transact-SQL commands.

  • CREATE EVENT SESSION または ALTER EVENT SESSION ステートメントで STARTUP_STATE = ON のイベント セッション オプションを含ませるベスト プラクティス。A best practice is to include the event session option of STARTUP_STATE = ON in your CREATE EVENT SESSION or ALTER EVENT SESSION statements.

    • = ON 値は、フェールオーバーに伴う論理データベース再構成の後の自動再起動をサポートします。The = ON value supports an automatic restart after a reconfiguration of the logical database due to a failover.

新しいカタログ ビューNew catalog views

拡張イベント機能をサポートする カタログ ビューがいくつかあります。The extended events feature is supported by several catalog views. カタログ ビューでは、現在のデータベースにおけるユーザー作成のイベント セッションの メタデータまたは定義 がわかります。Catalog views tell you about metadata or definitions of user-created event sessions in the current database. ビューでは、アクティブなイベント セッションのインスタンスについてはわかりません。The views do not return information about instances of active event sessions.

カタログ ビューの名前Name of
カタログ ビューcatalog view
説明Description
sys.database_event_session_actionssys.database_event_session_actions イベント セッションの各イベントに対する操作ごとに行を返します。Returns a row for each action on each event of an event session.
sys.database_event_session_eventssys.database_event_session_events イベント セッションのイベントごとに行を返します。Returns a row for each event in an event session.
sys.database_event_session_fieldssys.database_event_session_fields イベントとターゲットに明示的に設定されたカスタマイズ可能な列ごとに行を返します。Returns a row for each customize-able column that was explicitly set on events and targets.
sys.database_event_session_targetssys.database_event_session_targets イベント セッションに対してイベント ターゲットごとに行を返します。Returns a row for each event target for an event session.
sys.database_event_sessionssys.database_event_sessions SQL Database のデータベース内のイベント セッションごとに行を返します。Returns a row for each event session in the SQL Database database.

Microsoft SQL Server では、同様のカタログ ビュー名には .database_ ではなく、.server_ が含まれています。In Microsoft SQL Server, similar catalog views have names that include .server_ instead of .database_. 名前のパターンは、sys.server_event_% のようになっています。The name pattern is like sys.server_event_%.

新しい動的管理ビュー (DMV)New dynamic management views (DMVs)

Azure SQL Database には、拡張イベントをサポートする 動的管理ビュー (DMV) があります。Azure SQL Database has dynamic management views (DMVs) that support extended events. DMV では アクティブな イベント セッションについて参照できます。DMVs tell you about active event sessions.

DMV の名前Name of DMV 説明Description
sys.dm_xe_database_session_event_actionssys.dm_xe_database_session_event_actions イベント セッション アクションに関する情報を返します。Returns information about event session actions.
sys.dm_xe_database_session_eventssys.dm_xe_database_session_events セッション イベントに関する情報を返します。Returns information about session events.
sys.dm_xe_database_session_object_columnssys.dm_xe_database_session_object_columns セッションにバインドされているオブジェクトの構成の値を示します。Shows the configuration values for objects that are bound to a session.
sys.dm_xe_database_session_targetssys.dm_xe_database_session_targets セッション ターゲットに関する情報を返します。Returns information about session targets.
sys.dm_xe_database_sessionssys.dm_xe_database_sessions 現在のデータベースを対象としたイベント セッションごとに行を返します。Returns a row for each event session that is scoped to the current database.

Microsoft SQL Server では、同様のカタログ ビューは次のように名前から _database 部分を削除した命名がなされています。In Microsoft SQL Server, similar catalog views are named without the _database portion of the name, such as:

  • sys.dm_xe_sessions名前の代わりsys.dm_xe_sessions, instead of name
    sys.dm_xe_database_sessionssys.dm_xe_database_sessions.

両者に共通の DMVDMVs common to both

拡張イベントについては、次のような Azure SQL Database と Microsoft SQL Server の両方に共通した DMV も存在します。For extended events there are additional DMVs that are common to both Azure SQL Database and Microsoft SQL Server:

  • sys.dm_xe_map_valuessys.dm_xe_map_values
  • sys.dm_xe_object_columnssys.dm_xe_object_columns
  • sys.dm_xe_objectssys.dm_xe_objects
  • sys.dm_xe_packagessys.dm_xe_packages

使用可能な拡張イベント、アクション、ターゲットを検索Find the available extended events, actions, and targets

簡単な SQL SELECT を実行して、使用可能なイベント、アクション、ターゲットのリストを取得できます。You can run a simple SQL SELECT to obtain a list of the available events, actions, and target.

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 イベント セッションのターゲットTargets for your SQL Database event sessions

SQL Database のイベント セッションから結果を取得できるターゲットを次に挙げます。Here are targets that can capture results from your event sessions on SQL Database:

Event Tracing for Windows (ETW) API は SQL Database の拡張イベントでは使用できません。The Event Tracing for Windows (ETW) API is not available for extended events on SQL Database.

制限Restrictions

SQL Database のクラウド環境に利点となるセキュリティ関連の相違点を次にいくつか挙げます。There are a couple of security-related differences befitting the cloud environment of SQL Database:

  • 拡張イベントは単一テナントの分離モデルが元になっています。Extended events are founded on the single-tenant isolation model. あるデータベースのイベント セッションが他のデータベースからのデータやイベントにアクセスすることはできません。An event session in one database cannot access data or events from another database.
  • マスター データベースのコンテキストで、CREATE EVENT SESSION ステートメントを実行することはできません。You cannot issue a CREATE EVENT SESSION statement in the context of the master database.

権限モデルPermission model

CREATE EVENT SESSION ステートメントを実行するには、データベースでコントロール権限が必要です。You must have Control permission on the database to issue a CREATE EVENT SESSION statement. データベース所有者 (dbo) には コントロール 権限があります。The database owner (dbo) has Control permission.

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

Azure Storage コンテナーのために生成した SAS トークンには、権限として rwl を指定する必要があります。The SAS token you generate for your Azure Storage container must specify rwl for the permissions. rwl 値により次のアクセスが許可されます。The rwl value provides the following permissions:

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

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

システム全体にとって不健全と言える程、拡張イベントの使い過ぎによるアクティブメモリの蓄積が起きるシナリオがあります。There are scenarios where intensive use of extended events can accumulate more active memory than is healthy for the overall system. そのため、Azure SQL Database システムはイベント セッションによって蓄積され得るアクティブ メモリの量に対する制限を動的に設定、調整します。Therefore the Azure SQL Database system dynamically sets and adjusts limits on the amount of active memory that can be accumulated by an event session. 多くの要因が動的な計算に影響します。Many factors go into the dynamic calculation.

メモリの最大量が使用されたというエラー メッセージを受信した場合、次の修正措置を実行することができます。If you receive an error message that says a memory maximum was enforced, some corrective actions you can take are:

  • 同時実行するイベント セッションを減少させる。Run fewer concurrent event sessions.
  • イベント セッションの CREATEALTER ステートメントにより、MAX_MEMORY 句で指定するメモリ量を減少させる。Through your CREATE and ALTER statements for event sessions, reduce the amount of memory you specify on the MAX_MEMORY clause.

ネットワーク待ち時間Network latency

Azure Storage BLOB にデータを保持する際に、 イベント ファイル ターゲットでネットワークの遅延や障害が発生することがあります。The Event File target might experience network latency or failures while persisting data to Azure Storage blobs. ネットワーク通信の完了を待機する際に、SQL Database の他のイベントが遅延することがあります。Other events in SQL Database might be delayed while they wait for the network communication to complete. この遅延によってワークロードが遅くなる可能性があります。This delay can slow your workload.

  • このパフォーマンス リスクを防ぐため、イベント セッション定義の NO_EVENT_LOSS に対して EVENT_RETENTION_MODE オプションの設定を避けてください。To mitigate this performance risk, avoid setting the EVENT_RETENTION_MODE option to NO_EVENT_LOSS in your event session definitions.

拡張イベントの他のコード サンプル トピックは次のリンクから入手可能です。Other code sample topics for extended events are available at the following links. ただし、対象が Azure SQL Database または Microsoft SQL Server のどちらかを確認するために、サンプルを定期的にチェックする必要があります。However, you must routinely check any sample to see whether the sample targets Microsoft SQL Server versus Azure SQL Database. それにより、サンプルを実行するのにわずかな変更が必要かどうか判断できます。Then you can decide whether minor changes are needed to run the sample.