クイック スタート: SQL Server の拡張イベントQuick Start: Extended events in SQL Server

このトピックに適用されますはいSQL ServerはいAzure SQL DatabaseありませんAzure SQL Data Warehouseなし。並列データ ウェアハウスTHIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

この記事は、拡張イベントを初めて使用する SQL 開発者および数分でイベント セッションを作成したい SQL 開発者を対象としています。This article aims to help the SQL developer who is new to extended events, and who wants create an event session in just a few minutes. 拡張イベントを使用すると、SQL システムと自身のアプリケーションの内部処理に関する詳細を確認できます。By using extended events, you can see details about the inner operations of the SQL system and your application. 拡張イベント セッションを作成するときに、システムを以下のことを指示します。When you create an extended event session, you tell the system:

  • 興味がある事象Which occurrences you are interested in.
  • システムにデータを報告させる方法How you want the system to report the data to you.

この記事では、次のことを行います。This article does the following:

  • スクリーン ショットを使用して、イベント セッションを作成する SSMS.exe のクリックを示します。Uses screenshots to illustrate the clicks in SSMS.exe that create an event session.
  • スクリーン ショットを相当する TRANSACT-SQL ステートメントに関連付けます。Correlates the screenshots to equivalent Transact-SQL statements.
  • イベント セッションの用語と、クリックおよび T-SQL の背後にある概念を詳しく説明します。Explains in detail the terms and concepts behind the clicks and T-SQL for event sessions.
  • イベント セッションをテストする方法を示します。Demonstrates how to test your event session.
  • 結果を回避する代替策について説明します。Describes the alternatives around results:
    • 結果のストレージ キャプチャStorage capture of results.
    • 処理済み結果と生の結果の比較Processed versus raw results.
    • さまざまな方法および異なる時間単位で結果を表示するためのツールTools for viewing the results in different ways and on different time scales.
  • 使用可能なすべてのイベントの検索および検出方法を示します。Shows how you can search for and discover all the available events.
  • 拡張イベントの動的管理ビュー (DMV) 間の、主キーと外部キーの暗黙的なリレーションシップを提供します。Provides the primary key and foreign key relationships that are implicit among the dynamic management views (DMVs) for extended events.
  • 関連記事で学習できることについて説明します。Describes what more there is to learn in related articles.

ブログやくだけた会話では、拡張イベントは xeventという略称で呼ばれることがあります。Blogs and other informal conversations sometimes refer to extended events by the abbreviation xevents.

注意

Microsoft SQL Server と Azure SQL Database の拡張イベントの違いに関する詳細は、「 SQL データベースの拡張イベント」を参照してください。For information about extended event differences between Microsoft SQL Server and Azure SQL Database, see Extended events in SQL Database.

デモの準備Preparations before demo

次のデモを実際に行うには、以下の準備作業が必要になります。The following preliminaries would be required for you to actually perform the upcoming demonstration.

  1. SQL Server Management Studio (SSMS) のダウンロードDownload SQL Server Management Studio (SSMS)
    • 毎月更新される最新の SSMS を毎月インストールする必要があります。Each month you should install the latest monthly update of SSMS.
  2. Microsoft SQL Server 2014 以降にログインするか、 SELECT @@version が返す値の最初のノードが 12 以上の Azure SQL Database のデータベースにログインします。Log in to Microsoft SQL Server 2014 or higher, or in to an Azure SQL Database database where SELECT @@version returns a value whose first node is 12 or higher.
  3. 自身のアカウントに ALTER ANY EVENT SESSIONサーバー アクセス許可があることを確認します。Ensure that your account has the server permission of ALTER ANY EVENT SESSION.
    • 拡張イベントに関するセキュリティとアクセス権に興味がある場合は、この記事の末尾にある「 付録」で詳細を確認できます。If interested, more details about security and permissons related to extended events are available at the end of this article in the Appendix.

SSMS 統合のデモDemo of SSMS integration

SSMS.exe では、拡張イベント向けに優れたユーザー インターフェイス (UI) を提供しています。SSMS.exe provides an excellent user interface (UI) for extended events. この UI はとても優れているため、多くのユーザーは拡張イベントを扱うために、Transact-SQL や拡張イベントを対象とする動的管理ビュー (DMV) を使用する必要がありません。The UI is so good that many users have no need to engage with extended events by using Transact-SQL or the dynamic management views (DMVs) that target extended events.

このセクションでは、拡張イベントを作成し、レポート データを表示する UI の手順について確認できます。In this section you can see the UI steps to create an extended event, and to see the data it reports. この手順の後に、より深く理解するために手順に関係する概念について参照できます。After the steps, you can read about the concepts involved in the steps for a deeper understanding.

デモの手順Steps of demo

デモを行わない場合でも、手順を理解できます。You can understand the steps even if you decide not to perform them. デモにより [新しいセッション] ダイアログが起動します。The demonstration starts the New Session dialog. 次の 4 つのページを処理します。We process its four pages named:

  • 全般General
  • イベントEvents
  • データ ストレージData Storage
  • [詳細設定]Advanced

SSMS UI が数カ月または数年にわたって微調整されると、テキストとそれを補助するスクリーンショットが少し正確ではなくなる場合があります。The text and supporting screenshots can become slightly inexact when the SSMS UI is tweaked over the months or years. しかし、差異が小さいものであれば、スクリーンショットは説明には十分に役立ちます。Yet the screenshots remain effective for explanation if the discrepancies or only minor.

  1. SSMS と接続します。Connect with SSMS.

  2. オブジェクト エクスプローラーで、 [管理] > [拡張イベント] > [新しいセッション]をクリックします。In the Object Explorer, click Management > Extended Events > New Session. [新しいセッション] ダイアログと 新規セッション ウィザードは互いに似ていますが、[新しいセッション] をお勧めします。The New Session dialog is preferable to the New Session Wizard, although the two are similar to each other.

  3. 左上で、 [全般] ページをクリックします。In the upper-left, click the General page. [セッション名]テキスト ボックスに ” YourSession ” または任意の名前を入力します。Then type YourSession, or any name you like, into the Session name text box. [OK] ボタンはデモの終了時にのみ押すため、まだ 押さないで ください。Do not press the OK button yet, that comes only at the end of the demo.

    [新しいセッション] > [全般] > [セッション名]

  4. 左上で [イベント] ページをクリックして、 [選択] ボタンをクリックします。In the upper-left, click the Events page, and then click the Select button.

    [新しいセッション] > [イベント] > [選択] > [イベント ライブラリ]、選択されたイベント

  5. [イベント ライブラリ] の領域で、ドロップダウン リストから [イベント名のみ]を選択します。In the Event library area, in the drop-down list, choose Event names only.

    • テキスト ボックスに ” sql" を入力します。これは、 contains 演算子を使用して、使用可能なイベントの長いリストをフィルター処理して短くします。Into the text box, type in sql, which filters and reduces the long list of available events by using a contains operator.
    • スクロールして、 sql_statement_completedという名前のイベントをクリックします。Scroll and click the event named sql_statement_completed.
    • 右矢印ボタン > をクリックして、イベントを [選択したイベント] ボックスに移動します。Click the right arrow button > to move the event to the Selected events box.
  6. [イベント] ページで、右端にある [構成] ボタンをクリックします。Staying on the Events page, click the Configure button at the far right.

    • 見やすくするために左側を切り取った次のスクリーンショットで、 [イベントの構成オプション] 領域を確認できます。With the left side chopped off for better display, in the following screenshot you can see the Event configuration options area.

      [新しいセッション] > [イベント] > [構成] > [フィルター (述語)] > [フィールド]

  7. [フィルター (述語)] タブをクリックします。次に、HAVING 句を含むすべての SQL SELECT ステートメントをキャプチャするため、 [句を追加するにはここをクリックします]をクリックします。Click the Filter (Predicate) tab. Next, click Click here to add a clause, for the intention of capturing all SQL SELECT statements that have a HAVING clause.

  8. [フィールド] ドロップ ダウン リストから、 [sqlserver.sql_text]を選択します。In the Field drop-down list, and choose sqlserver.sql_text.

    • [演算子] に LIKE 演算子を選択します。For Operator choose a LIKE operator.
    • [値] に " %SELECT%HAVING%” を入力します。For Value type in %SELECT%HAVING%.

      注意

      この 2 部構成の名前では、 sqlserver がパッケージ名、 sql_text がフィールド名です。In this two part name, sqlserver is the package name, and sql_text is the field name. 前の手順で選択したイベント sql_statement_completed は、選択したフィールドと同じパッケージ内にある必要があります。The event we chose earlier, sql_statement_completed must be in the same package as the field we choose.

  9. 左上で、 [データ ストレージ] ページをクリックします。In the upper-left, click the Data Storage page.

  10. [ターゲット] 領域で、 [ここをクリックしてターゲットを追加]をクリックします。In the Targets area, click Click here to a target.

    • [種類] ドロップダウン リストで、 [event_file]を選択します。In the Type drop-down list, choose event_file.
    • これは、イベント データが表示可能なファイルに格納されることを意味します。This means the event data will be stored in a file that we can view.

    [新しいセッション] > [データ ストレージ] > [ターゲット] > [種類] > [event_file]

  11. [プロパティ] 領域で、 [サーバー上のファイル名] テキスト ボックスに完全パスとファイル名を入力します。In the Properties area, type in a full path and file name into the File name on server text box.

    • ファイル名の拡張子は .xelにする必要があります。The file name extension must be .xel.
    • この簡単なテストでは、1 MB 未満のファイル サイズが必要になります。Our little test will need less than 1 MB of file size.

    [新しいセッション] > [詳細] > [ディスパッチの最大待機時間] > [OK]

  12. 左上で、 [詳細] ページをクリックします。In the upper-left, click the Advanced page.

    • [ディスパッチの最大待機時間] を 3 秒に減らします。Reduce the Maximum dispatch latency down to 3 seconds.
    • 最後に、下部にある [OK] ボタンをクリックします。Finally, click the OK button at the bottom.
  13. オブジェクト エクスプローラーに戻り、 [管理] > [セッション]の順に展開して、 YourSessionの新しいノードを表示します。Back in the Object Explorer, expand Management > Sessions, and see the new node for YourSession.

    オブジェクト エクスプローラーで [管理] > [拡張イベント] > [セッション] の下に表示される YourSession という名前の新しい *イベント セッション* のノード

イベント セッションの編集Edit your event session

SSMS オブジェクト エクスプローラーでイベント セッションを編集するには、そのノードを右クリックして、 [プロパティ]をクリックします。In the SSMS Object Explorer, you can edit your event session by right-clicking its node, and then clicking Properties. 同じマルチページのダイアログが表示されます。The same multi-page dialog is displayed.

イベント セッションに対応する T-SQLCorresponding T-SQL for your event session

SSMS UI を使用して、イベント セッションを作成した T-SQL スクリプトを生成しました。You used the SSMS UI to generate a T-SQL script that created your event session. 生成されたスクリプトは、次の手順で表示できます。You can see the generated script as follows:

  • セッション ノードを右クリックし、 [セッションをスクリプト化] > [CREATE] > [クリップボード]の順にクリックします。Right-click your session node, click Script Session as > CREATE to > Clipboard.
  • 任意のテキスト エディターに貼り付けます。Paste into any text editor.

次は、UI でのクリックで生成された、 YourSessionの T-SQL CREATE EVENT SESSION ステートメントです。Next is the T-SQL CREATE EVENT SESSION statement for YourSession, which was generated by your clicks in the UI:

CREATE EVENT SESSION [YourSession]
    ON SERVER 
    ADD EVENT sqlserver.sql_statement_completed
    (
        ACTION(sqlserver.sql_text)
        WHERE
        ( [sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text], N'%SELECT%HAVING%')
        )
    )
    ADD TARGET package0.event_file
    (SET
        filename = N'C:\Junk\YourSession_Target.xel',
        max_file_size = (2),
        max_rollover_files = (2)
    )
    WITH (
        MAX_MEMORY = 2048 KB,
        EVENT_RETENTION_MODE = ALLOW_MULTIPLE_EVENT_LOSS,
        MAX_DISPATCH_LATENCY = 3 SECONDS,
        MAX_EVENT_SIZE = 0 KB,
        MEMORY_PARTITION_MODE = NONE,
        TRACK_CAUSALITY = OFF,
        STARTUP_STATE = OFF
    );
GO

注意

Azure SQL Database の場合、上記の CREATE EVENT SESSION ステートメントの ON SERVER 句は ON DATABASE になります。For Azure SQL Database, in the preceding CREATE EVENT SESSION statement, the ON SERVER clause would be instead be ON DATABASE.

Microsoft SQL Server と Azure SQL Database の拡張イベントの違いに関する詳細は、「 SQL データベースの拡張イベント」を参照してください。For more information about extended event differences between Microsoft SQL Server and Azure SQL Database, see Extended events in SQL Database.

イベント セッションの事前 DROPPre-DROP of the event session

CREATE EVENT SESSION ステートメントの前に、名前が既に存在する場合に備えて、DROP EVENT SESSION を条件付きで発行することができます。Before the CREATE EVENT SESSION statement, you might want to conditionally issue a DROP EVENT SESSION in case the name already exists.

IF EXISTS (SELECT *
      FROM sys.server_event_sessions    -- If Microsoft SQL Server.
    --FROM sys.database_event_sessions  -- If Azure SQL Database in the cloud.
      WHERE name = 'YourSession')
BEGIN
    DROP EVENT SESSION YourSession
          ON SERVER;    -- If Microsoft SQL Server.
        --ON DATABASE;  -- If Azure SQL Database.
END
go

イベント セッションを開始または停止するための ALTERALTER to start and stop the event session

イベント セッションを作成する際の既定は、自動的に実行を開始しないです。When you create an event session, the default is for it to not start running automatically. 次の T-SQL ALTER EVENT SESSION ステートメントを使用して、いつでもイベント セッションを開始または停止することができます。You can start or stop your event session any time by using the following T-SQL ALTER EVENT SESSION statement.

ALTER EVENT SESSION [YourSession]
      ON SERVER
    --ON DATABASE
    STATE = START;   -- STOP;

SQL Server インスタンスの開始時に、自動的に開始するようにイベント セッションに指示することもできます。You have the option of telling the event session to automatically start when the SQL Server instance is started. CREATE EVENT SESSION でキーワード STARTUP STATE = ON を参照してください。See the STARTUP STATE = ON keyword on CREATE EVENT SESSION.

  • SSMS UI は [新しいセッション] > [全般] ページで対応するチェック ボックスを提供しています。The SSMS UI offers a corresponding check box on New Session > General page.

イベント セッションのテストTest your event session

次の簡単な手順を使って、イベント セッションをテストします。Test your event session with these simple steps:

  1. SSMS オブジェクト エクスプローラーで、イベント セッション ノードを右クリックし、 [セッションの開始]をクリックします。In the SSMS Object Explorer, right-click your event session node, and then click Start Session.
  2. 次の SELECT...HAVING ステートメントを 2 回実行します。Run the following SELECT...HAVING statement a couple times.
    • 理想的には、2 回の実行の間に HAVING Count の値を2 と 3 に切り替えます。Ideally you might change the HAVING Count value between the two runs, toggling between 2 and 3. これにより結果の違いを確認することができます。This enables you to see the differences in the results.
  3. セッション ノードを右クリックして、 [セッションの停止]をクリックします。Right-click your session node, and then click Stop Session.
  4. 次のサブセクションで、 SELECT を使用して結果を表示する方法についてお読みください。Read the next subsection about how to SELECT and view the results.
SELECT
        c.name,
        Count(*)  AS [Count-Per-Column-Repeated-Name]
    FROM
             sys.syscolumns  AS c
        JOIN sys.sysobjects  AS o

            ON o.id = c.id
    WHERE
        o.type = 'V'
        AND
        c.name like '%event%'
    GROUP BY
        c.name
    HAVING
        Count(*) >= 3   --2     -- Try both values during session.
    ORDER BY
        c.name;

完全を期すためだけに、上記の SELECT...HAVING からおおよその出力を以下に示します。Just for completeness, here is the approximate output from the preceding SELECT...HAVING.

/*** Approximate output, 6 rows, all HAVING Count >= 3:
name                   Count-Per-Column-Repeated-Name
---------------------  ------------------------------
event_group_type       4
event_group_type_desc  4
event_session_address  5
event_session_id       5
is_trigger_event       4
trace_event_id         3
***/

XML での完全な結果の SELECTSELECT the full results as XML

SSMS で、次の T-SQL SELECT を実行し、各行が 1 つのイベントの発生に関するデータを提供する結果を返します。In SSMS, run the following T-SQL SELECT to return results where each row provides the data about one event occurrence. CAST AS XML は、結果を見やすく表示します。The CAST AS XML makes viewing the results easy.

注意

イベント システムは常に指定した .xel event_file ファイル名に long 型の値を付加します。The event system always appends a long number to the .xel event_file file name you specified. ファイルから次の SELECT を実行するには、事前にシステムによって付与された完全名をコピーして、SELECT 内に貼り付ける必要があります。Before you can run the following SELECT from the file, you must copy the full name given by the system, and paste it into the SELECT.

SELECT
        object_name,
        file_name,
        file_offset,
        event_data,
        'CLICK_NEXT_CELL_TO_BROWSE_XML RESULTS!'
                AS [CLICK_NEXT_CELL_TO_BROWSE_XML_RESULTS],

        CAST(event_data AS XML) AS [event_data_XML]
                -- TODO: In ssms.exe results grid, double-click this xml cell!
    FROM
        sys.fn_xe_file_target_read_file(
            'C:\Junk\YourSession_Target_0_131085363367310000.xel',
            null, null, null
        );

上記の SELECT では、任意のイベント行の完全な結果を表示するために 2 とおりの方法を提供しています。The preceding SELECT gives you two ways to view the full results of any given event row:

  • SSMS で SELECT を実行し、 event_data_XML 列内のセルをクリックします。Run the SELECT in SSMS, and then click a cell in the event_data_XML column. これは非常に便利です。This is very handy.
  • event_data 列内のセルから長い XML 文字列をコピーします。Copy the long XML string from a cell in the event_data column. 文字列を Notepad.exe のようなシンプルなテキスト エディターに貼り付けて、ファイルを .XML 拡張子で保存します。Paste into any simple text editor like Notepad.exe, and save the string in a file with extension .XML. 次に、ブラウザーを使用して .XML ファイルを開きます。Then open the .XML file with a browser.

1 つのイベントの結果の表示Display of results for one event

次に、XML 形式で結果の一部を確認します。Next we see part of the results, which are in XML format. ここでの XML は、表示を短くするために編集されています。The XML here is edited here to make it shorter for display. <data name="row_count">6の値を表示します。これは、上記で表示した 6 つの結果の行に一致します。Note that <data name="row_count"> displays a value of 6, which matches our 6 result rows displayed earlier. SELECT ステートメント全体を表示できます。And we can see the whole SELECT statement.

<event name="sql_statement_completed" package="sqlserver" timestamp="2016-05-24T04:06:08.997Z">
  <data name="duration">
    <value>111021</value>
  </data>
  <data name="cpu_time">
    <value>109000</value>
  </data>
  <data name="physical_reads">
    <value>0</value>
  </data>
  <data name="last_row_count">
    <value>6</value>
  </data>
  <data name="offset">
    <value>0</value>
  </data>
  <data name="offset_end">
    <value>584</value>
  </data>
  <data name="statement">
    <value>SELECT
        c.name,
        Count(*)  AS [Count-Per-Column-Repeated-Name]
    FROM
             sys.syscolumns  AS c
        JOIN sys.sysobjects  AS o

            ON o.id = c.id
    WHERE
        o.type = 'V'
        AND
        c.name like '%event%'
    GROUP BY
        c.name
    HAVING
        Count(*) &gt;= 3   --2     -- Try both values during session.
    ORDER BY
        c.name</value>
  </data>
</event>

SSMS を使用して結果を表示するSSMS to display results

拡張イベントからキャプチャされたデータを表示ために使用できる SSMS UI には、いくつかの高度な機能があります。There are several advanced features in the SSMS UI you can use to view the data that is captured from an extended event. 詳細については、以下を参照してください。Details are at:

基本は、 [ターゲット データの表示][ライブ データの監視]のラベルが付いた、ショートカット メニュー オプションで始めます。The basics start with context menu options labeled View Target Data and Watch Live Data.

[ターゲット データの表示]View Target Data

SSMS オブジェクト エクスプローラーで、イベント セッション ノードの下にあるターゲット ノードを右クリックします。In the SSMS Object Explorer, you can right-click the target node which is under your event session node. コンテキスト メニューで [ターゲット データの表示]をクリックします。In the context menu you click View Target Data. SSMS でデータが表示されます。SSMS displays the data.

新しいデータはイベントで報告されているため、表示は更新されません。The display is not updated as new data is reported by the event. しかし、 [ターゲット データの表示] をもう一度クリックできます。But you can click View Target Data again.

[ターゲット データの表示]、SSMS で、[管理] > [拡張イベント] > [セッション] > [YourSession] > [package0.event_file]、右クリック

[ライブ データの監視]Watch Live Data

SSMS オブジェクト エクスプローラーで、イベント セッション ノードを右クリックします。In the SSMS Object Explorer, you can right-click your event session node. コンテキスト メニューで [ライブ データの監視]をクリックします。In the context menu you click Watch Live Data. SSMS では、受信データがリアルタイムで引き続き到着するため、受信データが表示されます。SSMS displays incoming data as it continues to arrive in real time.

[ライブ データの監視]、SSMS で、[管理] > [拡張イベント] > [セッション] > [YourSession]、右クリック

シナリオScenarios

拡張イベントの効果的な使用には、多くのシナリオがあります。There are innumerable scenarios for the effective use of extended events. 次の記事では、クエリ中に取得したロックに関連するシナリオの例を示します。The following articles provide example scenarios that involve the locks taken during queries.

ロックの評価を目的としたイベント セッションの具体的なシナリオは、次の記事で説明しています。Specific scenarios for event sessions aimed at assessing locks are described in the following articles. これらの記事では、 @dbidの使用や、動的な EXECUTE (@YourSqlString)の使用など、高度な技法もいくつか紹介しています。The articles also show some advanced techniques, such as using @dbid, and using the dynamic EXECUTE (@YourSqlString):

拡張イベントの用語と概念Terms and concepts in extended events

次の表は、拡張イベントで使用される用語とその意味を示しています。The following table lists the terms used for extended events, and describes their meanings.

項目Term 説明Description
イベント セッションevent session 1 つ以上のイベントを中心にしたコンストラクトと、アクションなどのサポート アイテムがターゲットです。A construct centered around one or more events, plus supporting items like actions are targets. CREATE EVENT SESSION ステートメントは、各イベント セッションを構築します。The CREATE EVENT SESSION statement constructs each event session. ALTER を使用してイベント セッションを任意に開始、停止できます。You can ALTER an event session to start and stop it at will.

イベント セッションは、文脈から イベント セッションを指していることが明らかな場合には、単に セッションと呼ばれることがあります。An event session is sometimes referred to as just a session, when the context clarifies it means event session.

イベント セッションの詳細は、「 SQL Server 拡張イベント セッション」で説明しています。Further details about event sessions are described in: SQL Server Extended Events Sessions.
イベントevent アクティブなイベント セッションによって監視されるシステムでの内の特定の事象です。A specific occurrence in the system that is watched for by an active event session.

たとえば、 sql_statement_completed イベントは、指定された T-SQL ステートメントが完了した時点を表します。For example, the sql_statement_completed event represents the moment that any given T-SQL statement completes. イベントは、その継続時間とその他のデータを報告できます。The event can report its duration and other data.
ターゲット (target)target キャプチャしたイベントからの出力データを受信するアイテムです。A item that receives the output data from a captured event. ターゲットはデータを表示します。The target displays the data to you.

例には、 event_fileと、それに類似する便利な軽量メモリ ring_bufferが含まれています。Examples include the event_file, and its handy light-weight cousin the memory ring_buffer. より魅力的な ヒストグラム ターゲットが、データを表示する前にいくつかの処理を実行します。The fancier histogram target performs some processing of your data before displaying it.

どのターゲットも任意のイベント セッションに使用できます。Any target can be used for any event session. 詳細については、「 Targets for Extended Events in SQL Server」 (SQL Server の拡張イベントのターゲット) を参照してください。For details, see Targets for Extended Events in SQL Server.
アクション (action)action イベントにとって既知のフィールドです。A field known to the event. フィールドのデータは、ターゲットに送信されます。Data from the field is sent to the target. アクション フィールドは 述語フィルターに密接に関係しています。The action field is closely related to the predicate filter.
述語フィルターpredicate filter イベント発生の興味のあるサブセットのみがターゲットに送信されるように使用される、イベント フィールド内のデータのテストです。A test of data in an event field, used so that only an interesting subset of event occurrences are sent to the target.

たとえば、フィルターには、T-SQL ステートメントが文字列 HAVING を含めている、これらの sql_statement_completedイベント発生のみを含めることができます。For example, a filter could include only those sql_statement_completed event occurrences where the T-SQL statement contained the string HAVING.
パッケージ (package)package イベントのコアを軸として展開するアイテム セット内の各アイテムにアタッチされている名前修飾子です。A name qualifier attached to each item in a set of items that centers around a core of events.

たとえば、パッケージには、T-SQL テキストに関するイベントを含めることができます。For example, a package might have events about T-SQL text. 1 つのイベントが、GO 区切り文字のバッチ内のすべての T-SQL に関係する場合があります。One event could be about all the T-SQL in a GO-delimited batch. 一方、個別の T-SQL ステートメントに関する別のより狭義のイベントもあります。Meanwhile another narrower event is about individual T-SQL statements. さらに、どの T-SQL ステートメントにも、開始イベントと完了イベントがあります。Further, for any one T-SQL statement, there is are start and completed events.

イベントに適したフィールドも、イベントとともにパッケージされています。Fields appropriate for the events are also in the package with the events. ほとんどのターゲットが package0 内にあり、その他の多くのパッケージからのイベントとともに使用されます。Most targets are in package0 and are used with events from many other packages.

パッケージ内で使用可能なイベントを見つける方法How to discover the available events in packages

次の T-SQL SELECT は、名前に 'sql' の 3 文字を含む使用可能な各イベントの行を返します。The following T-SQL SELECT returns a row for each available event whose name contains the three character string 'sql'. もちろん、LIKE 値を編集して別のイベント名を検索することもできます。Of course, you can edit the LIKE value to search for different event names. 行は、イベントを含むパッケージにも名前を付けます。The rows also name the package that contains the event.

SELECT   -- Find an event you want.
        p.name         AS [Package-Name],
        o.object_type,
        o.name         AS [Object-Name],
        o.description  AS [Object-Descr],
        p.guid         AS [Package-Guid]
    FROM
              sys.dm_xe_packages  AS p
        JOIN  sys.dm_xe_objects   AS o

                ON  p.guid = o.package_guid
    WHERE
        o.object_type = 'event'   --'action'  --'target'
        AND
        p.name LIKE '%'
        AND
        o.name LIKE '%sql%'
    ORDER BY
        p.name, o.object_type, o.name;

次の表示は返された行を示しています。ここでは列名 = 値の形式に編集されています。The following display shows the returned row, edited here into the format of column name = value. データは、前の手順の例で使用された sql statement_completed イベントからのものです。The data is from the sql-statement_completed event that was used in the preceding example steps. Object-Descr 列の文が特に便利です。The sentence for the Object-Descr column is particularly helpful.

Package-Name = sqlserver
object_type  = event
Object-Name  = sql_statement_completed
Object-Descr = Occurs when a Transact-SQL statement has completed.
Package-Guid = 655FD93F-3364-40D5-B2BA-330F7FFB6491

もう 1 つの検索オプションは、前述のスクリーンショットで示した [新しいセッション] > [イベント] > [イベント ライブラリ] ダイアログに SSMS UI を使用することです。Another search option is to use the SSMS UI for New Session > Events > Event library dialog that is shown in a preceding screenshot.

SQL トレース イベント クラスと拡張イベントSQL Trace event classes, with extended events

拡張イベントと SQL トレース イベント クラスおよび列の使用に関する説明は、「 SQL トレースのイベント クラスと等価な拡張イベントを確認する」をご覧ください。A description of using extended events with SQL Trace event classes and columns is available at: View the Extended Events Equivalents to SQL Trace Event Classes

Windows イベント トレーシング (ETW) と拡張イベントEvent Tracing for Windows (ETW), with extended events

拡張イベントと Windows イベント トレーシング (ETW) の使用に関する説明は、以下をご覧ください。Descriptions of using extended events with Event Tracing for Windows (ETW) are available at:

ETW イベントは、Azure SQL Database の拡張イベントではご利用いただけません。The ETW events are not available in extended events on Azure SQL Database.

その他のアイテムAdditional items

このセクションでは、その他のアイテムについて簡単に紹介します。This section briefly mentions a couple of miscellaneous items.

SQL Server でインストールされるイベント セッションEvent sessions installed with SQL Server

SQL Server には、作成済みの拡張イベントがいくつか付属します。SQL Server comes with a few extended events already created. いずれも SQL システムを起動すると開始されるように設定されています。All are configured to start whenever the SQL system is started. これらのイベント セッションは、システム エラーが発生した場合に役立つデータを収集します。These event sessions gather data that might be helpful in case of a system error. すべての拡張イベントと同様に、これらのセッションはほんの少しのリソースしか消費しないため、実行したままにしておくことをお勧めします。Like all extended events, they consume only tiny a amount of resources, and Microsoft recommends that they be left alone to run.

これらのイベント セッションは、 [管理] [拡張イベント] [セッション] > の下の SSMS > オブジェクト エクスプローラーで確認できます。You can see these event sessions in the SSMS Object Explorer under Management > Extended Events > Sessions. 2016年 6 月時点での、これらのインストール済みのイベント セッションの一覧は次のとおりです。As of June 2016, the list of these installed event sessions is:

  • AlwaysOn_healthAlwaysOn_health
  • system_healthsystem_health
  • telemetry_eventstelemetry_events

拡張イベントの PowerShell プロバイダーPowerShell provider for extended events

SQL Server PowerShell を使用して、SQL Server 拡張イベントを管理することができます。You can manage SQL Server extended events by using the SQL Server PowerShell provider. 詳細は、「 拡張イベントへの PowerShell プロバイダーの使用」をご覧ください。Details are at: Use the PowerShell Provider for Extended Events

拡張イベントのシステム ビューSystem views for extended events

拡張イベントのシステム ビューには次のものが含まれます。The system views for extended events include:

  • カタログ ビュー: CREATE EVENT SESSION によって定義されているイベント セッションに関する情報を表示します。Catalog views: for information about event sessions that have been defined by CREATE EVENT SESSION.

  • 動的管理ビュー (DMV): 現在アクティブに実行中のイベント セッションに関する情報を表示します。Dynamic management views (DMVs): for information about event sessions are actively running at present.

SQL Server の拡張イベントに対するシステム ビューからの SELECT と JOIN - 次に関する情報を提供します。SELECTs and JOINs From System Views for Extended Events in SQL Server - provides information about:

  • ビューを互いに結合する方法How to join the views to each other.

  • いくつかの便利なビューからの SELECTSeveral useful SELECTs from the views.

  • 次の間の相関関係The correlation between:

    • ビュー列The view columns.
    • CREATE EVENT SESSION 句CREATE EVENT SESSION clauses.
    • SSMS UI コントロールThe SSMS UI controls.

付録: アクセス許可の所有者を事前に確認するための SELECTAppendix: SELECTs to ascertain permission owner in advance

この記事で言及されているアクセス許可は次のとおりです。The permissions mentioned in this article are:

  • サーバー アクセス許可ALTER ANY EVENT SESSION
  • VIEW SERVER STATEVIEW SERVER STATE
  • CONTROL SERVERCONTROL SERVER

次の Transact-SQL SELECT ステートメントは、誰がこれらのアクセス許可を持っているかをレポートすることができます。The following Transact-SQL SELECT statements can report who has these permissions.

UNION はアクセス許可とロール派生のアクセス許可を送信するUNION direct permissions plus role derived permissions

次の SELECT...UNION ALL ステートメントは、イベント セッションの作成および拡張イベントのシステム カタログ ビューを照会するために必要な権限を持つユーザーを示す行を返します。The following SELECT...UNION ALL statement returns rows that show who has the necessary permissions for creating event sessions and querying the system catalog views for extended events.

-- Ascertain who has the permissions listed in the ON clause.
-- 'CONTROL SERVER' permission includes the permissions
-- 'ALTER ANY EVENT SESSION' and 'VIEW SERVER STATE'.
SELECT
        'Owner-is-Principal'  AS [Type-That-Owns-Permission],
        NULL                  AS [Role-Name],
        prin.name             AS [Owner-Name],

        perm.permission_name
            COLLATE Latin1_General_CI_AS_KS_WS
            AS [Permission-Name]
    FROM
             sys.server_permissions  AS perm
        JOIN sys.server_principals   AS prin

            ON prin.principal_id = perm.grantee_principal_id
    WHERE
        perm.permission_name IN
            ('ALTER ANY EVENT SESSION',
            'VIEW SERVER STATE',
            'CONTROL SERVER')
UNION ALL

-- Plus check for members of the 'sysadmin' fixed server role,
-- because 'sysadmin' includes the 'CONTROL SERVER' permission.
SELECT
        'Owner-is-Role',
        prin.name,  -- [Role-Name]

        CAST( (IsNull(pri2.name, N'No members'))
            AS nvarchar(128)),

        NULL
    FROM
                         sys.server_role_members  AS rolm
        RIGHT OUTER JOIN sys.server_principals    AS prin

            ON prin.principal_id = rolm.role_principal_id

        LEFT OUTER JOIN sys.server_principals     AS pri2

            ON rolm.member_principal_id = pri2.principal_id
    WHERE
        prin.name = 'sysadmin'
    ORDER BY
        1,2,3,4;

HAS_PERMS_BY_NAME 関数HAS_PERMS_BY_NAME function

次の SELECT はユーザーのアクセス許可を報告します。The follow SELECT reports your permissions. これは組み込み関数 HAS_PERMS_BY_NAMEに依存します。It relies on the built-in function HAS_PERMS_BY_NAME.

さらに、一時的に他のアカウントを 偽装する 権限がある場合は、 EXECUTE AS LOGIN および REVERT ステートメントをコメント解除して、他のアカウントを照会することができます。Further, if you have authority to temporarily impersonate other accounts, you can uncomment the EXECUTE AS LOGIN and REVERT statements, to inquire about other accounts.

--EXECUTE AS LOGIN = 'AccountNameHere';
SELECT HAS_PERMS_BY_NAME(
    null, null,
    'ALTER ANY EVENT SESSION'
    );
--REVERT;

これらの SELECT およびアクセス許可に関するドキュメントのリンクを次に示します。Here are links to documentation related to these SELECTs, and to permissions: