Aracılığıyla paylaş


Genişletilmiş Olaylar için Sistem Görünümlerinden SELECT'ler ve JOIN'ler

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Bu makalede, Genişletilmiş Olaylar ile ilgili iki sistem görünümü kümesi açıklanmaktadır. Makalede şunlar gösterilmektedir:

  • Çeşitli sistem görünümleri nasıl yapılır JOIN .
  • Sistem görünümlerinden belirli türdeki bilgileri nasıl alırsınız.

Genişletilmiş Olaylar için iki sistem görünümü kümesi vardır:

Katalog görünümleri

  • Bu görünümler CREATE EVENT SESSION (Transact-SQL) tarafından oluşturulan her olay oturumunun tanımı hakkındaki bilgileri depolar. Ancak bu görünümler herhangi bir oturumun çalışmaya başlayıp başlamadığı hakkında hiçbir şey bilmez.
    • Örneğin, SSMS Nesne Gezgini tanımlı bir olay oturumu göstermiyorsa, görünümden sys.server_event_session_targets SELECT işlemi sıfır satır döndürür.
  • Örneklerin çoğu SQL Server ve Azure SQL Yönetilen Örneği için yazılmıştır. Ancak, küçük düzenlemeler ile Azure SQL Veritabanı'nda ve Fabric'teki SQL veritabanında, DMV adındaki server öğesini database olarak değiştirerek çalıştırabilirsiniz.
    • sys.server_event_session* SQL Server ve Azure SQL Yönetilen Örneği'nin ad ön ekidir.
    • sys.database_event_session* , Azure SQL Veritabanı ve Fabric'teki SQL veritabanı için ad ön ekidir.
    • Her biriyle ilgili daha fazla bilgi için bkz. Genişletilmiş Olaylar Kataloğu Görünümleri.

Dinamik yönetim görünümleri (DMV' ler)

  • Olay oturumlarını çalıştırmanın geçerli etkinliği hakkındaki bilgileri depolayın. Ancak bu DMV'ler oturumların tanımı hakkında çok az şey bilir.

    • Tüm olay oturumları şu anda durdurulmuş olsa bile, SELECT çeşitli paketler etkin belleğe yüklendiği için bir sunucu başlatıldığında görünümde sys.dm_xe_packages hala satır döndürülür.
    • Aynı nedenle, sys.dm_xe_objects ve sys.dm_xe_object_columns yine de satır döndürüyor.
  • Genişletilmiş Olaylar dinamik yönetim görünümleri (DMV'ler) için ön ek:

    • sys.dm_xe_* SQL Server ve Azure SQL Yönetilen Örneği'nin ad ön ekidir.
    • sys.dm_xe_database_* genellikle Azure SQL Veritabanı ve Microsoft Fabric platformundaki SQL veritabanı için ad ön ekidir.

Permissions

Sistem görünümlerine erişim için SELECT aşağıdaki izin gereklidir:

  • SQL Server 2019 (15.x) ve önceki sürümler sunucuda izin gerektirir VIEW SERVER STATE .
  • SQL Server 2022 (16.x) ve sonraki sürümleri sunucuda izin gerektirir VIEW SERVER PERFORMANCE STATE .
  • Azure SQL Veritabanı ve Azure Fabric'teki SQL veritabanı, veritabanında VIEW DATABASE PERFORMANCE STATE izni gerektirir.

Katalog görünümleri

Bu sayfanın amaçları doğrultusunda SSMS veyaT-SQL ile genişletilmiş olaylar oturumu oluşturun. SQL Server Management Studio'nun (SSMS) en son sürümünü yükleyin.

SQL Server Management Studio'da (SSMS) oturum oluşturma

SSMS'de, Nesne Gezgini'ndeYönetim> genişleterek Yeni Oturum iletişim kutusunu başlatabilir ve ardından Oturumlar>Yeni Oturum'a sağ tıklayabilirsiniz.

Büyük Yeni Oturum iletişim kutusunda, Genel etiketli ilk bölümünde Olay oturumunu sunucu başlangıcında başlat seçeneğinin belirlendiğini görüyoruz.

SSMS'ten Yeni Oturum'a ait ekran görüntüsü > Genel, Sunucu başlatıldığında olay oturumunu başlat.

Ardından Olaylar bölümünde olayın seçildiğini görüyoruz lock_deadlock . Bu olay için üç Eylem'in seçildiğini görüyoruz. Bu, Yapılandır düğmesinin seçildiği ve bunun seçilmesinin ardından griye döndüğü anlamına gelir.

SSMS'den Yeni Oturum > Olayları, Küresel Alanlar (Eylemler) ekran görüntüsü.

Ardından, Olaylar>Yapılandır bölümünde resource_type ayarlandığını PAGEgörüyoruz. Bu, resource_type değeri dışındaPAGEbir değerse olay altyapısından hedefe olay verilerinin gönderilmeyeceği anlamına gelir.

Veritabanı adı ve sayaç için ek koşul filtreleri görüyoruz.

> Events, Filter Predicate Fields (Actions).

Veri Depolama bölümünde event_file hedef olarak seçildiğini görüyoruz. Ayrıca Dosya rol devretmeyi etkinleştir seçeneğinin belirlendiğini görüyoruz.

> Data Storage, eventfile_enablefileroleover.

Son olarak Gelişmiş bölümünde Maksimum dağıtım gecikme süresi değerinin 4 saniyeye düşürüldüğünü görüyoruz.

Yeni Oturum > Gelişmiş, Maksimum dağıtım gecikme süresi SSMS'den ekran görüntüsü.

T-SQL'de olay oturumu oluşturma

Bir olay oturumu tanımının nasıl oluşturulduğundan bağımsız olarak, SSMS'den oturum mükemmel bir şekilde eşleşen bir Transact-SQL betiğine dönüştürülebilir. Yukarıdaki Yeni Oturum ekran görüntülerini inceleyebilir ve görünür belirtimlerini aşağıdaki oluşturulan T-SQL CREATE EVENT SESSION betiğindeki yan tümcelerle karşılaştırabilirsiniz.

Bir olay oturumuna ters mühendislik uygulamak için , Nesne Gezgini'nde oturum düğümünüzü sağ tıklatıp Betik Oturumu olarak>CREATE ** >Pano seçeneğini belirleyebilirsiniz.

CREATE EVENT SESSION [event_session_test3]
    ON SERVER  -- Or, if on Azure SQL Database, ON DATABASE.

    ADD EVENT sqlserver.lock_deadlock
    (
        SET
            collect_database_name = (1)
        ACTION
        (
            package0.collect_system_time,
            package0.event_sequence,
            sqlserver.client_hostname
        )
        WHERE
        (
            [database_name]           = N'InMemTest2'
            AND [package0].[counter] <= (16)
            AND [resource_type]       = (6)
        )
    )

    ADD TARGET package0.event_file
    (
        SET
            filename           = N'c:\temp\\event_session_test3_EF.xel',
            max_file_size      = (20),
            max_rollover_files = (2)
    )

    WITH
    (
        MAX_MEMORY            = 4096 KB,
        EVENT_RETENTION_MODE  = ALLOW_SINGLE_EVENT_LOSS,
        MAX_DISPATCH_LATENCY  = 4 SECONDS,
        MAX_EVENT_SIZE        = 0 KB,
        MEMORY_PARTITION_MODE = NONE,
        TRACK_CAUSALITY       = OFF,
        STARTUP_STATE         = ON
    );

Katalog görünümü SELECT JOIN UNION

Aşağıdaki T-SQL SELECT deyimi, birkaç küçük SELECT'in UNION'lar ile birleştirilmesi nedeniyle uzundur. Küçük SELECT'lerden herhangi biri kendi başına çalıştırılabilir. Küçük SELECT'ler, çeşitli sistem kataloglama görünümlerinin birlikte nasıl joINed edilmesi gerektiğini gösterir.

SELECT
        s.name        AS [Session-Name],
        '1_EVENT'     AS [Clause-Type],
        'Event-Name'  AS [Parameter-Name],
        e.name        AS [Parameter-Value]
    FROM
              sys.server_event_sessions         AS s
        JOIN  sys.server_event_session_events   AS e

            ON  e.event_session_id = s.event_session_id
    WHERE
        s.name = 'event_session_test3'

UNION ALL
SELECT
        s.name         AS [Session-Name],
        '2_EVENT_SET'  AS [Clause-Type],
        f.name         AS [Parameter-Name],
        f.value        AS [Parameter-Value]
    FROM
              sys.server_event_sessions         AS s
        JOIN  sys.server_event_session_events   AS e

            ON  e.event_session_id = s.event_session_id

        JOIN  sys.server_event_session_fields   As f

            ON  f.event_session_id = s.event_session_id
            AND f.object_id        = e.event_id
    WHERE
        s.name = 'event_session_test3'

UNION ALL
SELECT
        s.name              AS [Session-Name],
        '3_EVENT_ACTION'    AS [Clause-Type],

        a.package + '.' + a.name
                            AS [Parameter-Name],

        '(Not_Applicable)'  AS [Parameter-Value]
    FROM
              sys.server_event_sessions         AS s
        JOIN  sys.server_event_session_events   AS e

            ON  e.event_session_id = s.event_session_id

        JOIN  sys.server_event_session_actions  As a

            ON  a.event_session_id = s.event_session_id
            AND a.event_id         = e.event_id
    WHERE
        s.name = 'event_session_test3'

UNION ALL
SELECT
        s.name                AS [Session-Name],
        '4_EVENT_PREDICATES'  AS [Clause-Type],
        e.predicate           AS [Parameter-Name],
        '(Not_Applicable)'    AS [Parameter-Value]
    FROM
              sys.server_event_sessions         AS s
        JOIN  sys.server_event_session_events   AS e

            ON  e.event_session_id = s.event_session_id
    WHERE
        s.name = 'event_session_test3'

UNION ALL
SELECT
        s.name              AS [Session-Name],
        '5_TARGET'          AS [Clause-Type],
        t.name              AS [Parameter-Name],
        '(Not_Applicable)'  AS [Parameter-Value]
    FROM
              sys.server_event_sessions         AS s
        JOIN  sys.server_event_session_targets  AS t

            ON  t.event_session_id = s.event_session_id
    WHERE
        s.name = 'event_session_test3'

UNION ALL
SELECT
        s.name          AS [Session-Name],
        '6_TARGET_SET'  AS [Clause-Type],
        f.name          AS [Parameter-Name],
        f.value         AS [Parameter-Value]
    FROM
              sys.server_event_sessions         AS s
        JOIN  sys.server_event_session_targets  AS t

            ON  t.event_session_id = s.event_session_id

        JOIN  sys.server_event_session_fields   As f

            ON  f.event_session_id = s.event_session_id
            AND f.object_id        = t.target_id
    WHERE
        s.name = 'event_session_test3'

UNION ALL
SELECT
        s.name               AS [Session-Name],
        '7_WITH_MAX_MEMORY'  AS [Clause-Type],
        'max_memory'         AS [Parameter-Name],
        s.max_memory         AS [Parameter-Value]
    FROM
              sys.server_event_sessions  AS s
    WHERE
        s.name = 'event_session_test3'

UNION ALL
SELECT
        s.name                  AS [Session-Name],
        '7_WITH_STARTUP_STATE'  AS [Clause-Type],
        'startup_state'         AS [Parameter-Name],
        s.startup_state         AS [Parameter-Value]
    FROM
              sys.server_event_sessions  AS s
    WHERE
        s.name = 'event_session_test3'

ORDER BY
    [Session-Name],
    [Clause-Type],
    [Parameter-Name]
;

Çıktı

Aşağıdaki tabloda, önceki SELECT JOIN UNION çalıştırıldığında elde edilen çıktı gösterilmektedir. Çıkış parametresi adları ve değerleri, önceki CREATE EVENT SESSION ifadede açıkça görünen adlarla eşleşir.

Oturum Adı Madde Türü Parametre Adı Parametre-Değer
event_session_test3 1_ETKİNLİK Etkinlik Adı kilit_kilitlenme
event_session_test3 2_EVENT_SET veritabanı_adı_topla 1
event_session_test3 3_EVENT_ACTION sqlserver.client_hostname (Not_Applicable)
event_session_test3 3_EVENT_ACTION sqlserver.collect_system_time (Not_Applicable)
event_session_test3 3_EVENT_ACTION sqlserver.event_sequence (SQL Server olay dizisi) (Not_Applicable)
event_session_test3 4_EVENT_PREDICATES ([sqlserver]. [equal_i_sql_unicode_string]([database_name],N'InMemTest2') AND [package0]. [counter]<=(16)) (Not_Applicable)
event_session_test3 5_TARGET etkinlik_dosyası (Not_Applicable)
event_session_test3 6_TARGET_SET filename c:\temp\event_session_test3_EF.xel
event_session_test3 6_TARGET_SET maksimum_dosya_boyutu 20
event_session_test3 6_TARGET_SET maksimum_devir_dosyaları 2
event_session_test3 7_WITH_MAX_MEMORY maksimum bellek (max_memory) 4096
event_session_test3 7_WITH_STARTUP_STATE başlatma_durumu 1

Bu işlem katalog görünümlerindeki bölümü tamamlar.

Dinamik yönetim görünümleri (DMV' ler)

Bu bölümde, her birinin belirli bir yararlı iş amacına hizmet eden çeşitli Transact-SQL SELECT deyimleri sağlanır. Ayrıca, SELECT'ler DMV'leri istediğiniz yeni kullanımlar için birlikte nasıl kullanabileceğinizi JOIN gösterir.

DMV'lerin başvuru belgeleri Genişletilmiş Olaylar Dinamik Yönetim Görünümleri'nde sağlanır

Genişletilmiş olaylar alanında kullanabileceğiniz tüm nesneler sisteme yüklenen paketlerden gelir. Bu bölümde tüm paketler ve açıklamaları listelenir.

SELECT  --C.1
        p.name         AS [Package],
        p.description  AS [Package-Description]
    FROM
        sys.dm_xe_packages  AS p
    ORDER BY
        p.name;

Çıktı

Paketlerin listesi aşağıdadır.

Package Paket Açıklaması
filestream SQL Server FILESTREAM ve FileTable için genişletilmiş olaylar
package0 Varsayılan paket. Tüm standart türleri, haritaları, karşılaştırma işleçlerini, eylemlerini ve hedeflerini içerir
qds Sorgu Deposu için genişletilmiş olaylar
SecAudit Güvenlik Denetimi Olayları
sqlclr Genişletilmiş olaylar için SQL CLR
sqlos SQL İşletim Sistemi için genişletilmiş olaylar
SQLSatellite SQL Server Machine Learning Services için Genişletilmiş Olaylar
sqlserver Microsoft SQL Server için genişletilmiş olaylar
sqlsni Microsoft SQL Server için genişletilmiş olaylar
ucs Birleşik İletişim Platformu için genişletilmiş olaylar
XtpCompile XTP Derlemesi için genişletilmiş olaylar
XtpEngine XTP Motoru için genişletilmiş olaylar
XtpRuntime XTP Çalışma Zamanı için genişletilmiş olaylar

Önceki baş harflerin tanımları:

  • clr = .NET'in Ortak Dil Çalışma Zamanı
  • qds = Sorgu Veri Mağazası
  • sni = Sunucu Ağ Arabirimi
  • ucs = Birleşik İletişim Yığını
  • xtp = Yoğun İşlem İşleme

Türe göre sıralanmış tüm kullanılabilir öğeleri SEÇ

Aşağıdaki SELECT , her nesne için bir satır döndürür.

SELECT  --C.3
        o.object_type  AS [Type-of-Item],
        p.name         AS [Package],
        o.name         AS [Item],
        o.description  AS [Item-Description]
    FROM
             sys.dm_xe_objects  AS o
        JOIN sys.dm_xe_packages AS p  ON o.package_guid = p.guid
    WHERE
        o.object_type IN ('action' , 'target' , 'pred_source')
        AND
        (
            (o.capabilities & 1) = 0
            OR
            o.capabilities IS NULL
        )
    ORDER BY
        [Type-of-Item],
        [Package],
        [Item];

Etkinliğiniz için kullanılabilir veri alanları

Aşağıda SELECT , olay türünüz için özel olan tüm veri alanları döndürülmektedir.

  • WHERE Maddeye dikkat edin: column_type = 'data'.
  • Ayrıca, WHERE için o.name = yan tümce değerini düzenlemeniz gerekir.
SELECT  -- C.4
        p.name         AS [Package],
        c.object_name  AS [Event],
        c.name         AS [Column-for-Predicate-Data],
        c.description  AS [Column-Description]
    FROM
              sys.dm_xe_object_columns  AS c
        JOIN  sys.dm_xe_objects         AS o

            ON  o.name = c.object_name

        JOIN  sys.dm_xe_packages        AS p

            ON  p.guid = o.package_guid
    WHERE
        c.column_type = 'data'
        AND
        o.object_type = 'event'
        AND
        o.name        = '\<EVENT-NAME-HERE!>'  --'lock_deadlock'
    ORDER BY
        [Package],
        [Event],
        [Column-for-Predicate-Data];

Çıktı

Önceki SELECT ve WHERE o.name = 'lock_deadlock' tarafından aşağıdaki satırlar döndürüldü.

  • Her satır, olay için isteğe bağlı bir filtreyi sqlserver.lock_deadlock temsil eder.
  • Aşağıdaki gösterimden sütun Column-Description çıkarılmıştır. Değeri genellikle NULLşeklindedir.
  • Bu, genellikle NULLolan atlanan Açıklama sütunu dışında gerçek çıktıdır.
  • Bu satırlar şeklindedir WHERE object_type = 'lock_deadlock'.
Package Event Predicate-Data için sütun
sqlserver lock_deadlock associated_object_id
sqlserver lock_deadlock database_id
sqlserver lock_deadlock database_name
sqlserver lock_deadlock deadlock_id
sqlserver lock_deadlock duration
sqlserver lock_deadlock lockspace_nest_id
sqlserver lock_deadlock lockspace_sub_id
sqlserver lock_deadlock lockspace_workspace_id
sqlserver lock_deadlock mode
sqlserver lock_deadlock object_id
sqlserver lock_deadlock owner_type
sqlserver lock_deadlock resource_0
sqlserver lock_deadlock resource_1
sqlserver lock_deadlock resource_2
sqlserver lock_deadlock resource_description
sqlserver lock_deadlock resource_type
sqlserver lock_deadlock transaction_id

sys.dm_xe_map_values ve olay alanları

Aşağıdaki SELECT, JOIN görünümüne bir sys.dm_xe_map_values içerir.

öğesinin SELECT amacı, olay oturumunuz için seçebileceğiniz çok sayıda alanı görüntüler. Olay alanları iki şekilde kullanılabilir:

  • Hedefinize hangi alan değerlerinin yazılacağını her olay oluşumu için seçmek.
  • Hedefinize hangi olay oluşumlarının gönderileceğini ve hangilerinin gönderilmeyeceğini filtrelemek için.
SELECT  --C.5
        dp.name         AS [Package],
        do.name         AS [Object],
        do.object_type  AS [Object-Type],
        'o--c'     AS [O--C],
        dc.name         AS [Column],
        dc.type_name    AS [Column-Type-Name],
        dc.column_type  AS [Column-Type],
        dc.column_value AS [Column-Value],
        'c--m'     AS [C--M],
        dm.map_value    AS [Map-Value],
        dm.map_key      AS [Map-Key]
    FROM      sys.dm_xe_objects         AS do
        JOIN  sys.dm_xe_object_columns  AS dc
            ON  dc.object_name = do.name
        JOIN  sys.dm_xe_map_values      AS dm
            ON  dm.name = dc.type_name
        JOIN  sys.dm_xe_packages        AS dp
            ON  dp.guid = do.package_guid
    WHERE
        do.object_type = 'event'
        AND
        do.name        = '\<YOUR-EVENT-NAME-HERE!>'  --'lock_deadlock'
    ORDER BY
        [Package],
        [Object],
        [Column],
        [Map-Value];

Çıktı

Sırada, bir önceki T-SQL'den SELECT elde edilen 100'den fazla gerçek çıktı satırının bir örneklemesi bulunmaktadır. Bu makalenin başka bir yerindeki resource_type örneğinde kullanılan öncül filtrelemesi ile satırı ilgilidir.

/***  5 sampled rows from the actual rows returned.
    NOTE:  'resource_type' under 'Column'.

Package     Object          Object-Type   O--C   Column          Column-Type-Name     Column-Type   Column-Value   C--M   Map-Value        Map-Key
-------     ------          -----------   ----   ------          ----------------     -----------   ------------   ----   ---------        -------
sqlserver   lock_deadlock   event         o--c   CHANNEL         etw_channel          readonly      2              c--m   Operational      4
sqlserver   lock_deadlock   event         o--c   KEYWORD         keyword_map          readonly      16             c--m   access_methods   1024
sqlserver   lock_deadlock   event         o--c   mode            lock_mode            data          NULL           c--m   IX               8
sqlserver   lock_deadlock   event         o--c   owner_type      lock_owner_type      data          NULL           c--m   Cursor           2
sqlserver   lock_deadlock   event         o--c   resource_type   lock_resource_type   data          NULL           c--m   PAGE             6

Therefore, on your CREATE EVENT SESSION statement, in its ADD EVENT WHERE clause,
you could put:
    WHERE( ... resource_type = 6 ...)  -- Meaning:  6 = PAGE.
***/

Hedefler için parametreler

Aşağıdaki SELECT , hedefiniz için her parametreyi döndürür. Her parametre zorunlu olup olmadığını belirtmek için etiketlendi. Parametrelere atadığınız değerler hedefin davranışını etkiler.

  • WHERE Maddeye dikkat edin: object_type = 'customizable'.
  • Ayrıca, WHERE için o.name = yan tümce değerini düzenlemeniz gerekir.
SELECT  --C.6
        p.name        AS [Package],
        o.name        AS [Target],
        c.name        AS [Parameter],
        c.type_name   AS [Parameter-Type],

        CASE c.capabilities_desc
            WHEN 'mandatory' THEN 'YES_Mandatory'
            ELSE 'Not_mandatory'
        END  AS [IsMandatoryYN],

        c.description AS [Parameter-Description]
    FROM
              sys.dm_xe_objects   AS o
        JOIN  sys.dm_xe_packages  AS p

            ON  o.package_guid = p.guid

        LEFT OUTER JOIN  sys.dm_xe_object_columns  AS c

            ON  o.name        = c.object_name
            AND c.column_type = 'customizable'  -- !
    WHERE
        o.object_type = 'target'
        AND
        o.name     LIKE '%'    -- Or '\<YOUR-TARGET-NAME-HERE!>'.
    ORDER BY
        [Package],
        [Target],
        [IsMandatoryYN]  DESC,
        [Parameter];

Çıktı

Aşağıdaki parametre satırları, önceki SELECTtarafından döndürülenlerin küçük bir alt kümesidir.

/***  Actual output, all rows, where target name = 'event_file'.
Package    Target       Parameter            Parameter-Type       IsMandatoryYN   Parameter-Description
-------    ------       ---------            --------------       -------------   ---------------------
package0   event_file   filename             unicode_string_ptr   YES_Mandatory   Specifies the location and file name of the log
package0   event_file   increment            uint64               Not_mandatory   Size in MB to grow the file
package0   event_file   lazy_create_blob     boolean              Not_mandatory   Create blob upon publishing of first event buffer, not before.
package0   event_file   max_file_size        uint64               Not_mandatory   Maximum file size in MB
package0   event_file   max_rollover_files   uint32               Not_mandatory   Maximum number of files to retain
package0   event_file   metadatafile         unicode_string_ptr   Not_mandatory   Not used
***/

DMV SELECT target_data sütununu XML'ye dönüştürme

Bu DMV SELECT, aktif olay oturumunuzun hedefinden veri satırları döndürür. Veriler XML'e yayınlanır ve bu da döndürülen hücrenin SSMS'de kolayca görüntülenmesi için seçilebilir olmasını sağlar.

  • Olay oturumunuz durdurulursa, bu SELECT işlem sıfır satır döndürür.
  • WHERE yan tümce değerini s.name = için düzenlemeniz gerekir.
SELECT  --C.7
        s.name,
        t.target_name,
        CAST(t.target_data AS XML)  AS [XML-Cast]
    FROM
              sys.dm_xe_session_targets  AS t
        JOIN  sys.dm_xe_sessions         AS s

            ON s.address = t.event_session_address
    WHERE
        s.name = '\<Your-Session-Name-Here!>';

Çıktı, yalnızca XML hücresini de içeren tek satırdır.

İşte önceki SELECT çıktısından alınan tek satır. Sütun XML-Cast , SSMS'nin XML olduğunu anladığı bir XML dizesi içerir. Bu nedenle SSMS, XML-Cast hücresini seçilebilir hale getirmesi için gerektiğini anlar.

Bu işlem için:

  • Değer, s.name = olayı için bir olay oturumunda checkpoint_begin olarak ayarlandı.
  • Hedef bir ring_buffer.
name                              target_name   XML-Cast
----                              -----------   --------
checkpoint_session_ring_buffer2   ring_buffer   <RingBufferTarget truncated="0" processingTime="0" totalEventsProcessed="2" eventCount="2" droppedCount="0" memoryUsed="104"><event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T01:28:23.508Z"><data name="database_id"><type name="uint32" package="package0" /><value>5</value></data></event><event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T01:28:26.975Z"><data name="database_id"><type name="uint32" package="package0" /><value>5</value></data></event></RingBufferTarget>

Çıkış, hücre seçildiğinde XML güzel görüntüleniyor

XML-Cast hücre seçildiğinde aşağıdaki güzel ekran görüntülenir.

<RingBufferTarget truncated="0" processingTime="0" totalEventsProcessed="2" eventCount="2" droppedCount="0" memoryUsed="104">
  <event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T01:28:23.508Z">
    <data name="database_id">
      <type name="uint32" package="package0" />
      <value>5</value>
    </data>
  </event>
  <event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T01:28:26.975Z">
    <data name="database_id">
      <type name="uint32" package="package0" />
      <value>5</value>
    </data>
  </event>
</RingBufferTarget>

İşlevden SELECT kullanarak disk sürücüsünden event_file verilerini alın

Etkinlik oturumunun bazı veriler topladıktan sonra durdurulduğunu varsayalım. Oturumunuz event_file hedefini kullanacak şekilde tanımlanmışsa işlevini sys.fn_xe_target_read_fileçağırarak verileri almaya devam edebilirsiniz.

  • Bunu çalıştırmadan SELECTönce, yolunuz ve dosya adınızı işlev çağrısının parametresinde düzenlemeniz gerekir.
    • Oturumunuzu her yeniden başlattığınızda, SQL sistemi tarafından gerçek .XEL dosya adlarınıza eklenen fazladan basamaklara dikkat etmeyin. Normal kök adını ve uzantısını vermeniz yeter.
SELECT  --C.8
        f.module_guid,
        f.package_guid,
        f.object_name,
        f.file_name,
        f.file_offset,
        CAST(f.event_data AS XML)  AS [Event-Data-As-XML]
    FROM
        sys.fn_xe_file_target_read_file(

            '\<YOUR-PATH-FILE-NAME-ROOT-HERE!>*.xel',
            --'c:\temp\\Checkpoint_Begins_ES*.xel',  -- Example.

            NULL, NULL, NULL
        )  AS f;

Çıkış, SELECT FROM fonksiyonu tarafından döndürülen satırlar

Sonraki satırlar, önceki SELECT FROM işlev tarafından döndürülen satırlardır. Event-Data-As-XML XML sütunu, özellikle olay oluşumuyla ilgili verileri içerir.

module_guid                            package_guid                           object_name        file_name                                                           file_offset   Event-Data-As-XML
-----------                            ------------                           -----------        ---------                                                           -----------   -----------------
D5149520-6282-11DE-8A39-0800200C9A66   03FDA7D0-91BA-45F8-9875-8B6DD0B8E9F2   checkpoint_begin   c:\temp\\Checkpoint_Begins_ES_20160615bb-_0_131125086091700000.xel   5120          <event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T03:30:14.023Z"><data name="database_id"><value>5</value></data><action name="session_id" package="sqlserver"><value>60</value></action><action name="database_id" package="sqlserver"><value>5</value></action></event>
D5149520-6282-11DE-8A39-0800200C9A66   03FDA7D0-91BA-45F8-9875-8B6DD0B8E9F2   checkpoint_end     c:\temp\\Checkpoint_Begins_ES_20160615bb-_0_131125086091700000.xel   5120          <event name="checkpoint_end" package="sqlserver" timestamp="2016-07-09T03:30:14.025Z"><data name="database_id"><value>5</value></data></event>
D5149520-6282-11DE-8A39-0800200C9A66   03FDA7D0-91BA-45F8-9875-8B6DD0B8E9F2   checkpoint_begin   c:\temp\\Checkpoint_Begins_ES_20160615bb-_0_131125086091700000.xel   5632          <event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T03:30:17.704Z"><data name="database_id"><value>5</value></data><action name="session_id" package="sqlserver"><value>60</value></action><action name="database_id" package="sqlserver"><value>5</value></action></event>
D5149520-6282-11DE-8A39-0800200C9A66   03FDA7D0-91BA-45F8-9875-8B6DD0B8E9F2   checkpoint_end     c:\temp\\Checkpoint_Begins_ES_20160615bb-_0_131125086091700000.xel   5632          <event name="checkpoint_end" package="sqlserver" timestamp="2016-07-09T03:30:17.709Z"><data name="database_id"><value>5</value></data></event>

Çıkış, bir XML hücresi

Burada, önceki döndürülen satır kümesindeki ilk XML hücresinin içeriği yer alır.

<event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T03:30:14.023Z">
  <data name="database_id">
    <value>5</value>
  </data>
  <action name="session_id" package="sqlserver">
    <value>60</value>
  </action>
  <action name="database_id" package="sqlserver">
    <value>5</value>
  </action>
</event>