Varolan bir sql izleme komut dosyasını dönüştürmek için bir Genişletilmiş olayları oturumu

Genişletilmiş olayları oturumu için dönüştürmek istediğiniz varolan bir sql izleme komut dosyası varsa, eşdeğer Genişletilmiş olayları oturumu oluşturmak için bu konudaki yordamları kullanabilirsiniz. Bilgileri kullanarak trace_xe_action_mapve trace_xe_event_mapsistem tabloları, dönüştürme yapmak için gereken bilgileri toplamak.

Adımlar şunlardır:

  1. sql izleme oturumu oluşturmak için varolan komut dosyasını yürütün ve Izleme Kımlığı elde edilir.

  2. Kullanan bir sorgu çalıştırmak fn_trace_geteventinfoeşdeğer Genişletilmiş olayları olay ve eylemlerin her sql izleme olay sınıfı ve onun ilişkili sütunları bulmak için işlevi.

  3. Kullanın fn_trace_getfilterinfofiltreleri ve kullanmaya eşdeğer Genişletilmiş olayları eylemler listesi işlevi.

  4. El ile eşdeğer olayları genişletilmiş olaylar, eylemler ve yüklemler (filtreler) kullanılarak bir Genişletilmiş olayları oturumu oluşturun.

Izleme Kımlığı edinme

  1. sql izleme komut sorgu Düzenleyicisi'nde açın ve izleme oturumu oluşturmak için komut dosyasını yürütün. Not izleme oturumu, bu yordamı tamamlamak için çalışıyor olması gerekmez.

  2. Izleme Kımlığı elde edilir. Bunu yapmak için aşağıdaki sorgu kullanın:

    SELECT * FROM sys.traces
    GO
    

    [!NOT]

    Izleme Kımlığı 1 genellikle varsayılan izleme gösterir.

Genişletilmiş olayları karşılıkları belirlemek için

  1. Eylem, aşağıdaki sorguyu çalıştırma ve eşdeğer olayları genişletilmiş olayları belirlemek için nereye trace_idiçin önceki yordamda edindiğiniz Izleme Kımlığı değerini ayarla.

    [!NOT]

    Bu örnekte varsayılan izleme (1) izleme kimliği kullanılır.

    USE MASTER;
    GO
    DECLARE @trace_id int
    SET @trace_id = 1
    SELECT DISTINCT el.eventid, em.package_name, em.xe_event_name AS 'event'
       , el.columnid, ec.xe_action_name AS 'action'
    FROM (sys.fn_trace_geteventinfo(@trace_id) AS el
       LEFT OUTER JOIN sys.trace_xe_event_map AS em
          ON el.eventid = em.trace_event_id)
    LEFT OUTER JOIN sys.trace_xe_action_map AS ec
       ON el.columnid = ec.trace_column_id
    WHERE em.xe_event_name IS NOT NULL AND ec.xe_action_name IS NOT NULL
    

    Eşdeğer Genişletilmiş olayları olay kimliği, paket adı, olay adı, sütun Kımlığı ve eylem adı döndürülür. "Genişletilmiş olayları oturumu oluşturmak için" yordamında bu çıktıyı kullanır Bu konudaki.

    Bazı durumlarda, varsayılan olarak genişletilmiş olayları olay dahil bir olay veri alanı süzülmüş sütun eşleştirir. Bu nedenle, "Extended_Events_action_name" sütun null olacaktır. Bu durumda, hangi veri alanı süzülmüş sütuna denk olduğunu belirlemek için aşağıdakileri yapmanız gerekir:

    1. null dönmek için eylemleri, hangi sql izleme olay sınıflarını komut içeren filtre uygulanan sütunu tanımlar.

      Örneğin, kullanmış SP:StmtCompletedolay sınıfı ve filtre belirtilen Durationizleme sütun adı (sql izleme olay sınıfı kimliği 45 ve sql izleme sütun Kımlığı 13). Bu durumda, eylem adı görünür olarak boş sorgu sonuçlarında.

    2. Önceki adımda belirlediğiniz her sql izleme olay sınıfı, eşdeğer Genişletilmiş olayları olay adı bulun. (Eşdeğer olay adını bilmiyorsanız, sorguyu konusundaki kullanın Genişletilmiş olayları eşdeğerleri sql izleme olay sınıflarını görüntülemek.)

    3. Önceki adımda tanımlanan olayları için doğru veri alanlarını tanımlamak için aşağıdaki sorgu kullanın. "Event_field" Genişletilmiş olayları veri alanları sorgu gösterir sütun. Sorguda, yerini <event_name>önceki adımda belirtilen olay adı.

      SELECT xp.name package_name, xe.name event_name
         ,xc.name event_field, xc.description
      FROM sys.trace_xe_event_map AS em
      INNER JOIN sys.dm_xe_objects AS xe
         ON em.xe_event_name = xe.name
      INNER JOIN sys.dm_xe_packages AS xp
         ON xe.package_guid = xp.guid AND em.package_name = xp.name
      INNER JOIN sys.dm_xe_object_columns AS xc
         ON xe.name = xc.object_name
      WHERE xe.object_type = 'event' AND xc.column_type <> 'readonly'
         AND em.xe_event_name = '<event_name>'
      

      Örneğin, SP:StmtCompletedolay sınıfı eşler için sp_statement_completedGenişletilmiş olayları olay. If you specify sp_statement_completedolay adı sorgu, "event_field" sütun varsayılan olay eklenen alanları gösterir. Alanlarda bakarak, "süre" olduğunu görebilirsiniz alan. Filtre eşdeğer Genişletilmiş olayları oturum oluşturmak için bir yüklem gibi eklersiniz "nerede süresi > 0". Bir örnek için bkz: "Genişletilmiş olayları oturumu oluşturmak için" Bu konudaki yordam.

Genişletilmiş olayları oturumu oluşturmak için

Genişletilmiş olayları oturum oluşturma ve hedef için çıktı yazmak için sorgu Düzenleyicisi kullanın. Aşağıdaki adımlarda, sorguyu oluşturmak nasıl size göstermek için açıklamalar ile tek bir sorguda açıklanmaktadır. Tam sorgu örneği için bkz: "örnek" Bu konu Bölüm.

  1. S yerine olay oturumu oluşturmak için ifadeleri ekleyin ession_name Genişletilmiş olayları oturumu için kullanmak istediğiniz adı.

    IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='session_name')
       DROP EVENT SESSION [Session_Name] ON SERVER;
    CREATE EVENT SESSION [Session_Name]
    ON SERVER
    
  2. Genişletilmiş olayları eklemek olay ve eylemlerin yordamı çıktı olarak döndürülen "Genişletilmiş olayları karşılıkları belirleme" ve "komut dosyasında kullanılan filtreler belirlemek için" yordamında size tanımlanan yüklemler (filtreler) ekleyin.

    Aşağıdaki örnek içeren sql izleme komut dosyası kullanan SQL:StmtStartingve SP:StmtCompletedolay sınıfları, oturum kimliği ve süre için filtreleri ile. Örnek çıktı "Genişletilmiş olayları karşılıkları belirleme" in sorgu Yordam aşağıdaki sonuç kümesi verir:

    Eventid  package_name  event                   columnid  action
    44       sqlserver     sp_statement_starting   6         nt_username
    44       sqlserver     sp_statement_starting   9         client_pid
    44       sqlserver     sp_statement_starting   10        client_app_name
    44       sqlserver     sp_statement_starting   11        server_principal_name
    44       sqlserver     sp_statement_starting   12        session_id
    45       sqlserver     sp_statement_completed  6         nt_username
    45       sqlserver     sp_statement_completed  9         client_pid
    45       sqlserver     sp_statement_completed  10        client_app_name
    45       sqlserver     sp_statement_completed  11        server_principal_name
    45       sqlserver     sp_statement_completed  12        session_id
    

    Bu Genişletilmiş olayları eşdeğer, dönüştürmek için sqlserver.sp_statement_startingve sqlserver.sp_statement_completedolaylar, Eylemler listesini içeren eklenir. Doğrulama deyimleri gibi where yan tümceleri dahil edilir.

    ADD EVENT sqlserver.sp_statement_starting
       (ACTION
          (
          sqlserver.nt_username,
          sqlserver.client_pid,
          sqlserver.client_app_name,
          sqlserver.server_principal_name,
          sqlserver.session_id
          )
       WHERE sqlserver.session_id = 59 
       ),
    
    ADD EVENT sqlserver.sp_statement_completed
       (ACTION
          (
          sqlserver.nt_username,
          sqlserver.client_pid,
          sqlserver.client_app_name,
          sqlserver.server_principal_name,
          sqlserver.session_id
          )
       WHERE sqlserver.session_id = 59 AND duration > 0
       )
    
  3. Dosya yolları çıkış kaydetmek istediğiniz konumu değiştirme zaman uyumsuz dosya hedef ekleyin. Dosya hedef belirlerken, bir günlük dosyası ve meta dosya yolunu içermelidir.

    ADD TARGET package0.asynchronous_file_target(
       SET filename='c:\temp\ExtendedEventsStoredProcs.xel', metadatafile='c:\temp\ExtendedEventsStoredProcs.xem')
    

Başlatma veya durdurma olay oturumu (isteğe bağlı)

Sonuçları görüntülemek için

  1. Sen-ebilmek kullanma sys.fn_xe_file_target_read_filegörebilmek için işlevi. Bunu yapmak için dosya yolları belirtilen yollarla yerine aşağıdaki sorguyu çalıştırın:

    SELECT *, CAST(event_data as XML) AS 'event_data_XML'
    FROM sys.fn_xe_file_target_read_file('c:\temp\ExtendedEventsStoredProcs*.xel', 'c:\temp\ExtendedEventsStoredProcs*.xem', NULL, NULL)
    

    [!NOT]

    Olay verileri xml olarak döküm isteğe bağlıdır.

    Hakkında daha fazla bilgi için sys.fn_xe_file_target_read_fileişlevi, bakın fn_xe_file_target_read_file (Transact-sql).

Örnek

IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='session_name')
   DROP EVENT SESSION [session_name] ON SERVER;
CREATE EVENT SESSION [session_name]
ON SERVER

ADD EVENT sqlserver.sp_statement_starting
   (ACTION
   (
      sqlserver.nt_username,
      sqlserver.client_pid,
      sqlserver.client_app_name,
      sqlserver.server_principal_name,
      sqlserver.session_id
   )
   WHERE sqlserver.session_id = 59 
   ),

ADD EVENT sqlserver.sp_statement_completed
   (ACTION
   (
      sqlserver.nt_username,
      sqlserver.client_pid,
      sqlserver.client_app_name,
      sqlserver.server_principal_name,
      sqlserver.session_id
   )
   WHERE sqlserver.session_id = 59 AND duration > 0
   )

ADD TARGET package0.asynchronous_file_target
   (SET filename='c:\temp\ExtendedEventsStoredProcs.xel', metadatafile='c:\temp\ExtendedEventsStoredProcs.xem')

Ayrıca bkz.

Kavramlar

Genişletilmiş olayları eşdeğerleri sql izleme olay sınıflarını görüntülemek

Diğer Kaynaklar

How to: Delete an Extended Events Session