빠른 시작: SQL Server의 확장 이벤트Quick Start: Extended events in SQL Server

이 항목은 다음에 적용됩니다.예SQL Server(2014부터)예Azure SQL Database아니요Azure SQL Data Warehouse 아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO:yesSQL Server (starting with 2014)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

이 문서는 확장 이벤트를 사용해 본 적이 없고 몇 분 내에 이벤트 세션을 만들려는 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.

블로그 및 기타 비공식 대화에서는 확장 이벤트를 약어 xevents로 부르기도 합니다.Blogs and other informal conversations sometimes refer to extended events by the abbreviation xevents.

참고

Microsoft SQL Server 및 Azure SQL 데이터베이스의 확장 이벤트 간 차이점에 대해서는 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. SSMS(SQL Server Management Studio) 다운로드Download SQL Server Management Studio (SSMS)
    • 매월 SSMS의 최신 월별 업데이트를 설치해야 합니다.Each month you should install the latest monthly update of SSMS.
  2. Microsoft SQL Server 2014 이상 또는 Azure SQL 데이터베이스 데이터베이스에 로그인합니다. SELECT @@version 은 첫 번째 노드가 12 이상인 값을 반환합니다.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. 확인 단추는 데모 마지막에 눌러야 하므로 아직 누르지 마세요.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. 필터(조건자) 탭을 클릭합니다.Click the Filter (Predicate) tab. 그런 다음 절을 추가하려면 여기를 클릭하세요.를 클릭하여 HAVING 절을 포함하는 모든 SQL SELECT 문을 캡처합니다.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%.

      참고

      이 두 부분의 이름에서 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.
    • 작은 테스트의 파일 크기는 1MB 미만이어야 합니다.Our little test will need less than 1 MB of file size.

    새 세션 > 고급 > 최대 디스패치 대기 시간 > 확인

  12. 왼쪽 위에서 고급 페이지를 클릭합니다.In the upper-left, click the Advanced page.

    • 최대 디스패치 대기 시간 을 3초 미만으로 줄입니다.Reduce the Maximum dispatch latency down to 3 seconds.
    • 마지막으로 아래쪽의 확인 단추를 클릭합니다.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 데이터베이스의 경우 위의 CREATE EVENT SESSION 문에서 ON DATABASE 대신 ON SERVER 절을 사용합니다.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 데이터베이스의 확장 이벤트 간 차이점에 대해서는 SQL 데이터베이스의 확장 이벤트를 참조하세요.For more information about extended event differences between Microsoft SQL Server and Azure SQL Database, see Extended events in SQL Database.

이벤트 세션의 Pre-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 문을 두 번 실행합니다.Run the following SELECT...HAVING statement a couple times.
    • 두 번 실행 중 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. 다음 하위 섹션에서 결과 선택 및 확인 방법을 읽어 보세요.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로 선택SELECT the full results as XML

SSMS에서 다음 T-SQL SELECT를 실행하여 각 행에서 한 이벤트 항목에 관한 데이터를 제공하는 결과를 반환합니다.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는 지정된 이벤트 행의 전체 결과를 확인하는 두 가지 방법을 제공합니다.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.

하나의 이벤트에 대한 결과 표시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>

결과를 표시하는 SSMSSSMS 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 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 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 하나 이상의 이벤트와 동작 및 대상 등 지원되는 항목에 대한 구성입니다.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. 이벤트 세션이 원하는 대로 시작 및 중지되도록 변경할 수 있습니다.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.
targettarget 캡처한 이벤트에서 출력 데이터를 수신하는 항목입니다.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. 조금 더 복잡한 histogram 대상은 표시하기 전에 데이터를 일부 처리합니다.The fancier histogram target performs some processing of your data before displaying it.

모든 대상을 모든 이벤트 세션에 대해 사용할 수 있습니다.Any target can be used for any event session. 자세한 내용은 SQL Server에서 확장 이벤트에 대한 대상을 참조하세요.For details, see Targets for Extended Events in SQL Server.
actionaction 이벤트에 알려진 필드입니다.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 이벤트의 핵심과 관련된 항목 집합의 각 항목에 연결된 이름 한정자입니다.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. 하나의 이벤트가 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'이라는 세 자가 포함된 각 사용 가능 이벤트에 대해 행을 반환합니다.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

다른 검색 옵션은 이전 스크린샷에서 보여 준 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

ETW(Windows용 이벤트 추적) 및 확장 이벤트Event Tracing for Windows (ETW), with extended events

ETW(Windows용 이벤트 추적)에서 확장 이벤트 사용에 대한 설명은 다음 문서를 참조하세요.Descriptions of using extended events with Event Tracing for Windows (ETW) are available at:

Azure SQL 데이터베이스의 확장 이벤트에서는 ETW 이벤트를 사용할 수 없습니다.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 SESSIONALTER 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: