Aracılığıyla paylaş


Genişletilmiş Olaylar hedefleri

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

Bu makalede Genişletilmiş Olaylar hedeflerinin ne zaman ve nasıl kullanılacağı açıklanmaktadır. Makalede her hedef için şunlar açıklanmaktadır:

  • Olay verilerini toplama ve raporlama yetenekleri
  • Hedefi kullanan etkinlik oturumlarına örnekler

Aşağıdaki tabloda, her hedef türün farklı SQL platformlarında kullanılabilirliği açıklanmaktadır.

Hedef türü SQL Sunucusu Azure SQL Veritabanı ve SQL Veritabanı içinde Fabric Azure SQL Yönetilen Varlık
etkinlik_dosyası Evet Evet Evet
ring_buffer Evet Evet Evet
event_stream Evet Evet Evet
Histogram Evet Evet Evet
etkinlik_sayacı Evet Evet Evet
çift_eşleştirme Evet Hayı Hayı
etw_classic_sync_target Evet Hayı Hayı

Farklı belirtilmediği sürece hedefler zaman uyumsuz olarak aldıkları verileri işler.

Bu makaleden en iyi şekilde yararlanmak için şunları yapmalısınız:

event_file hedefi

Hedef, event_file olay oturumu çıkışını bellek arabelleklerinden bir disk dosyasına veya Azure Depolama'daki bir bloba yazar.

  • filename parametresini ADD TARGET ifadesinde belirtirsiniz. Dosya uzantısı olmalıdır xel.

  • Seçtiğiniz dosya adı, sistem tarafından tarih ve saat tabanlı bir sayısal değer eklenerek xel uzantısıyla birlikte oluşturulan bir ön ek olarak kullanılır.

  • İsteğe bağlı olarak parametresini MAX_FILE_SIZE belirtebilirsiniz. Yeni bir dosya oluşturulmadan önce dosyanın büyüyebileceği en büyük boyutu megabayt (MB) cinsinden tanımlar.

  • İsteğe bağlı olarak, geçerli dosyaya ek olarak dosya sisteminde tutulacak en fazla dosya sayısını belirleme seçeneğini belirtebilirsiniz MAX_ROLLOVER_FILES . Varsayılan değer şudur: UNLIMITED. MAX_ROLLOVER_FILES değerlendirildiğinde, dosya sayısı MAX_ROLLOVER_FILES ayarını aşarsa, eski dosyalar silinir.

Önemli

Oturuma eklenen olaylara bağlı olarak, hedef tarafından event_file oluşturulan dosyalar hassas veriler içerebilir. Gereksiz okuma erişimi vermekten kaçınmak için dosya sistemini dikkatlice gözden geçirin ve devralınan erişim de dahil olmak üzere tek tek .xel dosyalar üzerindeki izinleri paylaşın. En az ayrıcalık ilkesini izleyin. Hassas verileri yanlışlıkla toplama riskini azaltmak için, hassas veriler toplayabilirlerse uzun süre çalışan olay oturumlarından kaçının.

Uyarı

Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği, parametrenin değeri olarak yalnızca filename blobları destekler. Azure SQL Veritabanı, Azure Fabric SQL veritabanı veya Azure SQL Yönetilen Örneği için event_file kod örneği arıyorsanız, Azure Depolama'da event_file hedefiyle olay oturumu oluşturma konusuna bakın.

Yerel dosya sisteminde event_file hedefiyle bir olay oturumu oluşturun.

SSMS veya T-SQL ile yerel dosya depolama kullanarak bir event_file etkinlik oturumu oluşturmaya yönelik bir kılavuz için bkz Hızlı Başlangıç: Genişletilmiş Olaylar.

Azure Depolama'da event_file hedefiyle olay oturumu oluşturma

Azure Depolama'da depolama hesabı oluşturma hakkında ayrıntılı bir açıklama için bkz. Depolama hesabı oluşturma. Azure portalı, PowerShell, Azure SQL, ARM şablonu veya Bicep şablonu kullanarak depolama hesabı oluşturabilirsiniz. Şu hesapları kullanın:

  • Bir Standard general-purpose v2 hesaptır.
  • Hot kullanır.
  • Azure Sanal Makinesi'nde (Azure VM) SQL Server kullanılıyorsa, depolama hesabı Azure VM'nizle aynı Azure bölgesinde olmalıdır.
  • Hiyerarşik ad alanı etkin değildir.

Ardından Azure portalını kullanarak bu depolama hesabında bir kapsayıcı oluşturun . PowerShell veyaAzure CLI kullanarak da kapsayıcı oluşturabilirsiniz.

Oluşturduğunuz depolama hesabının ve kapsayıcının adlarını not edin. Bunları aşağıdaki adımlarda kullanabilirsiniz.

Olay verilerini okumak ve yazmak için veritabanı altyapısı belirli bir erişim gerektirir. Bu erişimi, seçtiğiniz kimlik doğrulama türüne bağlı olarak farklı şekilde verirsiniz: yönetilen kimlik veya paylaşılan erişim imzası (SAS) belirteci ile gizli dizi tabanlı kimlik doğrulaması.

Veritabanı altyapısı, Azure Depolama'da kimlik doğrulaması yapmak için sunucu kapsamlı bir kimlik bilgisi veya veritabanı kapsamlı kimlik bilgisi gerektirir. Bu kimlik doğrulaması hangi tür kimlik doğrulamasının kullanılacağını bildirir ve gizli anahtar tabanlı kimlik doğrulaması için bir gizli anahtar sağlar. Bu kimlik bilgilerinin oluşturulması için veritabanı izni gerekir CONTROL .

SQL Server ve Azure SQL Yönetilen Örneği için bu izne master veritabanında gereklidir. Varsayılan olarak, db_owner veritabanı rolünün master üyeleri ve örnekteki sysadmin sunucu rolü üyeleri tarafından izin tutulur. Azure SQL Veritabanı ve Fabric'teki SQL veritabanı için bu izin, veritabanı sahibi dbo, veritabanı rolü db_owner üyeleri ve mantıksal sunucunun yöneticisi tarafından tutulur.

Kimlik bilgisi oluşturulduktan sonra, olay oturumu oluşturmanın kalan adımları için CONTROL iznine gerek yoktur. İzinler sayfasında gereken belirli izinleri görün.

Yönetilen kimliği kullanarak erişim izni verme

Microsoft Entra kimlik doğrulaması ile yönetilen kimlik kullanıyorsanız, kapsayıcı için Depolama Blob Verileri Katkıda Bulunanı RBAC rolünü veritabanı motoru tarafından kullanılan yönetilen kimliğe atarsınız. Daha fazla bilgi için SQL platformunu temel alan aşağıdakilere bakın:

RBAC rol ataması gerçekleştikten sonra aşağıdaki adımları kullanın:

  1. T-SQL kullanarak bir kimlik bilgisi oluşturun.

    Aşağıdaki T-SQL toplu işlemini yürütmeden önce aşağıdaki değişikliği yapın:

    • https://<storage-account-name>.blob.core.windows.net/<container-name> öğesinin her üç örneğinde de, <storage-account-name>’yi depolama hesabınızın adıyla ve <container-name>’yi kapsayıcınızın adıyla değiştirin. URL'nin sonunda eğik çizgi olmadığından emin olun.

    Sunucu düzeyinde kimlik bilgisi oluşturma: (SQL Server, Azure SQL Yönetilen Örneği için geçerlidir)

    SSMS gibi bir istemci aracı kullanarak yeni bir sorgu penceresi açın, olay oturumunu oluşturmak istediğiniz örnekteki veritabanına bağlanın master ve aşağıdaki T-SQL toplu işlemini yapıştırın.

    /* The name of the credential must match the URL of the blob container. */
    IF EXISTS (SELECT 1
               FROM sys.credentials
               WHERE name = 'https://<storage-account-name>.blob.core.windows.net/<container-name>')
        DROP CREDENTIAL
            [https://<storage-account-name>.blob.core.windows.net/<container-name>];
    
    /* When using managed identity, the credential does not contain a secret */
    CREATE CREDENTIAL
        [https://<storage-account-name>.blob.core.windows.net/<container-name>]
        WITH IDENTITY = 'MANAGED IDENTITY';
    

    Veritabanı kapsamlı bir kimlik bilgileri oluşturma: (Azure SQL Veritabanı, Azure SQL Yönetilen Örneği, Fabric'teki SQL veritabanı için geçerlidir)

    SSMS gibi bir istemci aracı kullanarak yeni bir sorgu penceresi açın, olay oturumunu oluşturduğunuz kullanıcı veritabanına bağlanın ve aşağıdaki T-SQL toplu işlemini yapıştırın. Veritabanına değil, kullanıcı veritabanınıza bağlı olduğunuzdan master emin olun.

    /* The name of the credential must match the URL of the blob container. */
    IF EXISTS (SELECT 1
               FROM sys.database_credentials
               WHERE name = 'https://<storage-account-name>.blob.core.windows.net/<container-name>')
        DROP DATABASE SCOPED CREDENTIAL
            [https://<storage-account-name>.blob.core.windows.net/<container-name>];
    
    /* When using managed identity, the credential does not contain a secret */
    CREATE DATABASE SCOPED CREDENTIAL
        [https://<storage-account-name>.blob.core.windows.net/<container-name>]
        WITH IDENTITY = 'MANAGED IDENTITY';
    
  2. Ardından, Azure Depolama'da event_file hedefi olan SSMS'de bir olay oturumu oluşturmak için adımları izleyin.

Paylaşılan erişim imzası (SAS) belirteci kullanarak erişim izni verme

Gizli dizi tabanlı kimlik doğrulaması kullanıyorsanız kapsayıcı için paylaşılan erişim imzası (SAS) belirteci oluşturursunuz. Bu kimlik doğrulama türünü kullanmak için depolama hesabı için Depolama hesabı anahtarı erişimine izin ver seçeneğinin etkinleştirilmesi gerekir. Daha fazla bilgi için bkz . Azure Depolama hesabı için Paylaşılan Anahtar yetkilendirmesini engelleme.

  1. Azure portalında, oluşturduğunuz depolama hesabına ve kapsayıcıya gidin. Kapsayıcıyı seçin ve Ayarlar > Paylaşılan erişim belirteçleri'ne gidin.

    SAS belirteci aşağıdaki gereksinimleri karşılamalıdır:

    • İzinlerRead, Write, Delete, List.
    • Başlangıç saati ve Süre Sonu süresi, olay oturumunun ömrünü içermelidir. Oluşturduğunuz SAS belirteci yalnızca bu zaman aralığı içinde çalışır.
    • Azure SQL Veritabanı, Azure SQL Yönetilen Örneği ve Fabric'teki SQL veritabanı için SAS belirtecinin IP adresi kısıtlamaları olmamalıdır.

    SAS belirteci ve URL oluştur düğmesini seçin. SAS belirteci Blob SAS belirteci kutusundadır. Sonraki adımda kullanmak üzere kopyalayabilirsiniz.

    Önemli

    SAS belirteci bu kapsayıcıya okuma ve yazma erişimi sağlar. Parola veya başka bir gizli bilgi gibi saklayın.

    Azure Depolama kapsayıcısı için Paylaşılan Erişim Belirteçleri ekranının ekran görüntüsü ve örnek bir kapsayıcı için oluşturulmuş SAS belirteci.

  2. T-SQL kullanarak SAS belirtecini depolamak için bir kimlik bilgisi oluşturun.

    Aşağıdaki T-SQL toplu işlemini yürütmeden önce şu değişiklikleri yapın:

    • Sunucu kapsamlı bir kimlik bilgisi oluşturuyor ve CREATE MASTER KEY deyimini kullanıyorsanız, <password> değerini ana anahtarı koruyan güçlü bir parolayla değiştirin. Daha fazla bilgi için bkz. CREATE MASTER KEY .

    • https://<storage-account-name>.blob.core.windows.net/<container-name> öğesinin her üç örneğinde de, <storage-account-name>’yi depolama hesabınızın adıyla ve <container-name>’yi kapsayıcınızın adıyla değiştirin.

    • Yan tümcede SECRET öğesini, önceki adımda kopyaladığınız SAS belirteciyle <sas-token> öğesi yerine değiştirin.

    Sunucu düzeyinde kimlik bilgisi oluşturma: (SQL Server, Azure SQL Yönetilen Örneği için geçerlidir)

    SSMS gibi bir istemci aracı kullanarak yeni bir sorgu penceresi açın, olay oturumunu master oluşturduğunuz örnekteki veritabanına bağlayın ve aşağıdaki T-SQL toplu işlemini yapıştırın.

    /* Create a master key to protect the secret of the credential */
    IF NOT EXISTS (SELECT 1
                   FROM sys.symmetric_keys
                   WHERE name = '##MS_DatabaseMasterKey##')
        CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>'
    
    /* The name of the credential must match the URL of the blob container. */;
    IF EXISTS (SELECT 1
               FROM sys.credentials
               WHERE name = 'https://<storage-account-name>.blob.core.windows.net/<container-name>')
        DROP CREDENTIAL
            [https://<storage-account-name>.blob.core.windows.net/<container-name>];
    
    /* The secret is the SAS token for the container. */
    CREATE CREDENTIAL
        [https://<storage-account-name>.blob.core.windows.net/<container-name>]
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
        SECRET = '<sas-token>';
    

    Veritabanı kapsamlı bir kimlik bilgileri oluşturma: (Azure SQL Veritabanı, Azure SQL Yönetilen Örneği, Fabric'teki SQL veritabanı için geçerlidir)

    SSMS gibi bir istemci aracı kullanarak yeni bir sorgu penceresi açın, olay oturumunu oluşturduğunuz veritabanına bağlanın ve aşağıdaki T-SQL toplu işlemini yapıştırın. Veritabanına değil, kullanıcı veritabanınıza bağlı olduğunuzdan master emin olun.

    /* The name of the credential must match the URL of the blob container. */
    IF EXISTS (SELECT 1
               FROM sys.database_credentials
               WHERE name = 'https://<storage-account-name>.blob.core.windows.net/<container-name>')
        DROP DATABASE SCOPED CREDENTIAL
            [https://<storage-account-name>.blob.core.windows.net/<container-name>];
    
    /* The secret is the SAS token for the container. */
    CREATE DATABASE SCOPED CREDENTIAL
        [https://<storage-account-name>.blob.core.windows.net/<container-name>]
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
        SECRET = '<sas-token>';
    
  3. Ardından, Azure Depolama'da event_file hedefi olan SSMS'de bir olay oturumu oluşturmak için sonraki bölümdeki adımları izleyin.

SSMS'de Azure Depolama içinde event_file hedefiyle bir olay oturumu oluşturun.

Depolama kapsayıcısına erişim sağlayan kimlik bilgisi oluşturulduktan sonra olay oturumunu oluşturabilirsiniz. Kimlik bilgilerini oluşturmaktan farklı olarak, olay oturumu oluşturmak CONTROL izni gerektirmez. Kimlik bilgisi oluşturulduktan sonra, daha kısıtlı izinleriniz olsa bile olay oturumları oluşturabilirsiniz. İzinler sayfasında gereken belirli izinleri görün.

SSMS'de yeni bir etkinlik oturumu oluşturmak için:

  1. SQL Server ve Azure SQL Yönetilen Örneği için Yönetim klasörünün altındaki Genişletilmiş Olaylar düğümünü genişletin. Azure SQL Veritabanı ve Fabric'te SQL veritabanı için, veritabanının altında Genişletilmiş Olaylar düğümünü genişletin.

  2. Oturumlar klasörüne sağ tıklayın ve Yeni Oturum... öğesini seçin.

  3. Genel sayfasında, oturum için aşağıdaki kod örneğine yönelik example-session bir ad girin.

  4. Olaylar sayfasında oturuma eklenecek bir veya daha fazla olayı seçin. Örneğin, sql_batch_starting olayını seçebilirsiniz.

  5. Veri Depolama sayfasında hedef tür olarak seçinevent_file. Depolama kapsayıcısının URL'sini Depolama URL'si kutusuna yapıştırın. Bu URL'nin sonuna bir eğik çizgi (/) ve ardından dosya (blob) adı yazın. Örneğin, https://<storage-account-name>.blob.core.windows.net/<container-name>/example-session.xel.

  6. Oturum yapılandırıldığına göre, daha sonra kaydetmek üzere isteğe bağlı olarak Betik düğmesini seçerek oturumun T-SQL betiğini oluşturabilirsiniz.

  7. Oturumu oluşturmak için Tamam'ı seçin.

  8. oluşturduğunuz olay oturumunu görmek için Nesne Gezgini Oturumlar klasörünü genişletin. Varsayılan olarak, oturum oluşturulduğunda başlatılmaz. Oturumu başlatmak için oturum adına sağ tıklayın ve Oturumu Başlat'ı seçin. Daha sonra oturum çalıştırıldıktan sonra Oturumu Durdur'u seçerek durdurabilirsiniz.

T-SQL toplu işlemleri yürütüldükçe, oturum sql_batch_starting etkinliklerini depolama kapsayıcısındaki example-session.xel blobuna yazar.

Uyarı

SQL Yönetilen Örneği için, depolama kapsayıcısı URL'sini Veri depolama sayfasına yapıştırmak yerine Betik düğmesini kullanarak oturumun T-SQL betiğini oluşturun. Bağımsız değişkenin değeri olarak kapsayıcı URL'sini filename belirtin ve betiği yürüterek oturumu oluşturun.

T-SQL'de Azure Depolama Alanı'nda event_file hedefi kullanarak bir olay oturumu oluşturun.

Aşağıda, bir Azure Depolama tabanlı CREATE EVENT SESSION hedefi ekleyen ADD TARGET with event_file yan tümcesinin bir örneği verilmiştir.

CREATE EVENT SESSION [example-session]
ON SERVER
ADD EVENT sqlserver.sql_batch_starting
ADD TARGET package0.event_file
(
    SET filename = N'https://<storage-account-name>.blob.core.windows.net/<container-name>/example-session.xel'
)
GO

Bu örneği Azure SQL Veritabanı'nda veya Fabric'deki SQL veritabanında kullanmak için ON SERVER değerini ON DATABASE ile değiştirin.

Azure Depolama'da event_file hedefi olan olay oturumlarıyla ilgili sorunları giderme

Aşağıdaki listede, Azure Depolama kullanan bir genişletilmiş olay oturumu başlatılırken karşılaşabileceğiniz hatalar ve hatanın olası açıklamaları yer alır.

  • İşletim sistemi hata 5 döndürdü: 'Erişim reddedildi.'
    • Yönetilen kimlik doğrulaması kullanılıyorsa:
      • Veritabanı altyapısı tarafından kullanılan yönetilen kimlikte gerekli RBAC rol ataması yoktur. Daha fazla bilgi için bkz. Yönetilen kimliği kullanarak erişim izni verme.
      • Depolama hesabı güvenlik duvarı etkinleştirilir ve güvenilen Azure hizmetlerinin depolama hesabına erişmesine izin veren bir özel durum da etkinleştirilir, ancak mantıksal sunucu için bir Microsoft.Sql/servers kaynak örneği erişim verilen kaynak örnekleri listesine eklenmemiştir. Daha fazla bilgi için bkz. Azure kaynak örneklerinden erişim verme.
      • Zorunlu modlu bir ağ güvenlik çevresi kullanıyorsanız, veritabanı ve depolama hesabı aynı çevre içinde değildir.
    • SAS belirteci kimlik doğrulaması kullanılıyorsa:
      • Depolama hesabı güvenlik duvarı etkinleştirildi. Bu, SAS belirteci kimlik doğrulaması kullanan olay oturumlarında desteklenmez.
      • SAS belirtecinin yeterli yetkileri yok veya süresi doldu. Daha fazla bilgi için bkz. SAS belirteci kullanarak erişim verme.
      • Zorunlu modlu bir ağ güvenlik çevresi kullanıyorsanız, veritabanından sınırsız giden iletişime ve depolama hesabına sınırsız gelen iletişime izin veren erişim kuralları uygulanmaz.
  • İşletim sistemi 86 hatasını döndürdü: 'Belirtilen ağ parolası doğru değil.'
    • Blob kapsayıcı URL'si ile eşleşen veritabanı kapsamlı kimlik bilgisi (Azure SQL Veritabanı için) veya sunucu kapsamlı kimlik bilgisi (Azure SQL Yönetilen Örneği veya SQL Server için) yoktur. Daha fazla bilgi için yönetilen kimlik kullanarak erişim verme veya SAS belirteci kullanarak erişim verme örneklerine göz atın.
    • Kimlik bilgisi adı, (/) ile biter. Kimlik bilgisi adı, sonunda eğik çizgi olmayan kapsayıcı adıyla bitmelidir.
  • İşletim sistemi 3 hatasını döndürdü: 'Sistem belirtilen yolu bulamıyor.'
    • Blob kapsayıcı URL'sinde belirtilen kapsayıcı mevcut değil.
  • İşletim sistemi 13. hata döndürdü: 'Veriler geçersiz.'
    • Blob kapsayıcısı üzerinde bir değişmezlik ilkesi vardır. Değiştirilemez depolama, olay oturumları için desteklenmez.
    • Depolama hesabında hiyerarşik ad alanı etkindir. Hiyerarşik ad alanı etkinleştirilmiş depolama hesapları, olay oturumları için desteklenmez.

sys.fn_xe_file_target_read_file() işlevi

Hedef, event_file aldığı verileri insan tarafından okunamayan bir ikili biçimde depolar. işlevi, sys.fn_xe_file_target_read_file bir xel dosyanın içeriğini ilişkisel satır kümesi olarak temsil etmenizi sağlar. Kullanım örnekleri de dahil olmak üzere daha fazla bilgi için bkz. sys.fn_xe_file_target_read_file.

ring_buffer hedefi

Hedef ring_buffer , bir olay oturumunu hızlı bir şekilde başlatmak ve olay verilerini yalnızca bellekte toplamak için kullanışlıdır. Halka arabelleğindeki kullanılabilir bellek olaylar tarafından kullanıldığında, önceki olaylar atılır. Olay oturumunu durdurduğunuzda, hedefe ilişkin ring_buffer tüm oturum çıkışı da atılır.

Aşağıdaki örnekte gösterildiği gibi, bir ring_buffer hedefteki verileri XML'ye dönüştürerek tüketirsiniz. Bu dönüştürme sırasında, 4 MB'lık XML belgesine sığmayan veriler atlanır. Bu nedenle, daha büyük MAX_MEMORY değerler kullanarak (veya bu parametreyi varsayılan değerinde bırakarak) halka arabelleğinde daha fazla olay yakalasanız bile, XML işaretleme ve Unicode dizelerinin ek yükünü göz önünde bulundurarak XML belge boyutundaki 4 MB sınırı nedeniyle bunların tümünü kullanamayabilirsiniz.

XML belgesinde truncated olarak ayarlanmışsa, halka arabelleğinin içeriğinin XML'e dönüştürme sırasında atlandığını biliyorsunuz. Örneğin:

<RingBufferTarget truncated="1" processingTime="0" totalEventsProcessed="284" eventCount="284" droppedCount="0" memoryUsed="64139">

Tavsiye

Hedef ring_buffer eklerken parametresini MAX_MEMORY 1.024 KB veya daha az olarak ayarlayın. Daha büyük değerler kullanmak bellek tüketimini gereksiz yere artırabilir.

Varsayılan olarak, MAX_MEMORY, ring_buffer hedef SQL Server'da sınırsızdır ve Azure SQL Veritabanı, Azure SQL Yönetilen Örneği ve Fabric'deki SQL veritabanında 32 MB ile sınırlıdır.

ring_buffer hedefiyle olay oturumu oluşturma

Aşağıda, bir ring_buffer hedef kullanarak lock_acquired olaylarını toplayacak ve halka arabelleğindeki toplam olay sayısını 100 ile sınırlayacak bir olay oturumu oluşturma örneği verilmiştir. Bu örnekte MAX_MEMORY parametre iki kez görüntülenir: bir kez hedef belleği 1.024 KB olarak, ring_buffer bir kez de olay oturumu arabellek belleğini 2 MB olarak ayarlamak için.

Bu örneği Azure SQL Veritabanı'nda veya Fabric'deki SQL veritabanında kullanmak için ON SERVER değerini ON DATABASE ile değiştirin.

CREATE EVENT SESSION ring_buffer_lock_acquired
ON SERVER
ADD EVENT sqlserver.lock_acquired
ADD TARGET package0.ring_buffer
(
SET MAX_EVENTS_LIMIT = 100,
    MAX_MEMORY = 1024
)
WITH
(
    MAX_MEMORY = 2 MB,
    MAX_DISPATCH_LATENCY = 3 SECONDS
);

Etkinlik oturumunu başlatabilmek için aşağıdaki işlemi yürütün:

ALTER EVENT SESSION ring_buffer_lock_acquired
ON SERVER
STATE = START;

Toplanan olay verilerini SSMS'deki halka arabelleğinde görüntülemek için oturum düğümünü genişletin ve package0.ping_buffer hedefini seçin. Veriler XML olarak görüntülenir.

Oturum etkinken bir ring_buffer hedeften gelen olay verilerini ilişkisel satır kümesinde görmek için, XML'yi ilişkisel verilere dönüştürmek için XQuery ifadelerini kullanırsınız. Örneğin:

;WITH
/* An XML document representing memory buffer contents */
RingBuffer AS
(
    SELECT CAST (xst.target_data AS XML) AS TargetData
    FROM sys.dm_xe_session_targets AS xst
         INNER JOIN sys.dm_xe_sessions AS xs
             ON xst.event_session_address = xs.address
    WHERE xs.name = N'ring_buffer_lock_acquired'
),
/* A row for each event in the buffer, represented as an XML fragment */
EventNode AS
(
    SELECT CAST (NodeData.query('.') AS XML) AS EventInfo
    FROM RingBuffer AS rb
    CROSS APPLY rb.TargetData.nodes('/RingBufferTarget/event') AS n(NodeData)
)

/* A relational rowset formed by using the XQuery value method */
SELECT EventInfo.value('(event/@timestamp)[1]','datetimeoffset') AS timestamp,
       EventInfo.value('(event/@name)[1]','sysname') AS event_name,
       EventInfo.value('(event/data/value)[1]','nvarchar(max)') AS sql_batch_text
FROM EventNode
ORDER BY timestamp DESC;

event_stream hedefi

Hedef event_stream yalnızca C# gibi dillerde yazılmış .NET programlarında kullanılabilir. Geliştiriciler, Microsoft.SqlServer.XEvents.Linq ad alanındaki .NET Framework sınıfları aracılığıyla bir olay akışına erişebilir. Bu hedef, herhangi bir olay oturumunda örtük olarak bulunur. T-SQL kullanılarak eklenemez.

Daha fazla bilgi için bkz. sys.fn_MSxe_read_event_stream.

25726 hatasıyla karşılaşırsanız, The event data stream was disconnected because there were too many outstanding events. To avoid this error either remove events or actions from your session or add a more restrictive predicate filter to your session. hedeften event_stream okurken, olay akışının verilerle istemcinin tüketim kapasitesinden daha hızlı dolduğunu ifade eder. Bu, Veritabanı Altyapısı performansını etkilememek için Veritabanı Altyapısı'nın olay akışı bağlantısını kesmesine neden olur.

histogram hedefi

Hedef, histogram bir alan veya eylemdeki ayrı değerler için olay oluşumlarının sayısını sayar. Her ayrı değer için ayrı bir sayı demeti kullanılır. Hedef, histogram aldığı verileri eşzamanlı olarak işler.

SOURCE_TYPE parametresi hedefin histogram davranışını denetler:

  • SOURCE_TYPE = 0: bir olay alanı için veri toplama.
  • SOURCE_TYPE = 1: bir eylem için veri toplama. Varsayılan değer budur.

Parametresinin SLOTS varsayılan değeri 256'dır. Başka bir değer atarsanız, değer 2'nin bir sonraki kuvvetine yuvarlanır. Örneğin, SLOTS = 59 64'e yuvarlanmış olabilir. Hedef için histogram en fazla histogram yuvası sayısı 16.384'tür.

histogram hedef olarak kullanıldığında bazen beklenmeyen sonuçlar görebilirsiniz. Bazı olaylar beklenen yuvalarda görünmeyebilirken, diğer yuvalar beklenenden daha yüksek olay sayısını gösterebilir. Yuvalara olay atarken karma çakışma oluşursa bu durum oluşabilir. Bu durum nadir olsa da, bir karma çakışması oluşursa, bir yuvada sayılması gereken bir olay başka bir yuvada sayılır. Bu nedenle, yalnızca belirli bir yuvadaki sayı sıfır olarak gösterildiği için bir olayın gerçekleşmediğini varsayarak dikkatli olunmalıdır.

Örneğin, aşağıdaki senaryoyu göz önünde bulundurun:

  • Saklı yordam yürütme istatistiklerini toplamak için histogram hedefini kullanarak ve olayları object_id ile gruplayarak bir Genişletilmiş Olaylar oturumu ayarlarsınız.
  • Saklı yordam A yürütürsünüz. Ardından saklı yordamını Byürütürsiniz.

Karma fonksiyonu her iki saklı yordam için object_id için aynı değeri döndürürse, histogramda A iki kez yürütülürken B görünmez.

Ayrı değerlerin sayısı görece az olduğunda bu sorunu azaltmak için, beklenen ayrı değerlerin karesinden daha yüksek histogram yuvalarının sayısını ayarlayın. Örneğin, hedef histogram olay alanına ayarlanmışsa SOURCEtable_name ve veritabanında 20 tablo varsa, 20*20 = 400. 2'nin 400'den büyük bir sonraki gücü 512'dir ve bu örnekte önerilen yuva sayısıdır.

Her histogram hedef tek bir kaynaktan (olay alanı veya eylem) verileri kabul eder ve yalnızca bir histogram içerir. Olay oturumu başına aynı türde birden fazla hedef eklemek mümkün değildir. Hedef başına histogram birden fazla kaynak türüne sahip olmak da mümkün değildir. Bu nedenle, farklı eylemleri veya olay alanlarını ayrı histogram bir hedefte izlemek için yeni bir olay oturumu gerekir.

Histogram hedefiyle olay oturumu oluşturma

Aşağıda bir hedefle olay oturumu oluşturma örneği verilmiştır histogram .

Bu örneği Azure SQL Veritabanı'nda veya Fabric'deki SQL veritabanında kullanmak için ON SERVER değerini ON DATABASE ile değiştirin.

CREATE EVENT SESSION histogram_lock_acquired
ON SERVER
ADD EVENT sqlserver.lock_acquired
(
    ACTION (sqlos.system_thread_id)
)
ADD TARGET package0.histogram
(
    SET FILTERING_EVENT_NAME = N'sqlserver.lock_acquired',
        SLOTS = 16,
        SOURCE = N'sqlos.system_thread_id',
        SOURCE_TYPE = 1
);

Hedef parametresi ADD TARGET ... (SET ...) yan tümcesinde SOURCE_TYPE olarak 1 ayarlanır, bu da histogram hedefin bir eylemi izlediği anlamına gelir.

ADD EVENT ... (ACTION ...) yan tümcesi sqlos.system_thread_id eylemi olaya ekler. SOURCE parametresi, sqlos.system_thread_id hedefi için veri kaynağı olarak bu eylem tarafından toplanan sistem iş parçacığı kimliğini kullanacak şekilde histogram olarak ayarlanır. histogram Bu örnekteki hedef, oturum etkinken kilitleri alan her sistem iş parçacığı için olay sayısını lock_acquired sayar.

Etkinlik oturumunu başlatabilmek için aşağıdaki işlemi yürütün:

ALTER EVENT SESSION histogram_lock_acquired
ON SERVER
STATE = START;

Toplanan histogram verilerini SSMS'de görüntülemek için oturum düğümünü genişletin ve hedefi seçin package0.histogram . Veriler iki sütunlu bir kılavuzda görüntülenir. Her satır, ayrı değerlerden oluşan bir demet ve yineleme sayısını temsil eder.

Bu örnekte, histogram hedefi tarafından yakalanan veriler şöyle görünebilir. value sütunundaki değerler system_thread_id değerleridir. Örneğin, sistem iş parçacığı 6540 tarafından toplam 236 kilit alındı.

value   count
-----   -----
 6540     236
 9308      91
 9668      74
10144      49
 5244      44
 2396      28

T-SQL ile bir histogram hedeften verileri okuma örneği aşağıda verilmişti:

WITH histogram_target
AS (SELECT TRY_CAST (st.target_data AS XML) AS target_data
    FROM sys.dm_xe_sessions AS s
         INNER JOIN sys.dm_xe_session_targets AS st
             ON s.address = st.event_session_address
    WHERE s.name = 'event-session-name-placeholder'),
 histogram
AS (SELECT hb.slot.value('(@count)[1]', 'bigint') AS slot_count,
           hb.slot.value('(value/text())[1]', 'nvarchar(max)') AS slot_value
    FROM histogram_target AS ht
CROSS APPLY ht.target_data.nodes('/HistogramTarget/Slot') AS hb(slot))
SELECT slot_value,
       slot_count
FROM histogram;

hedefi event_counter

Hedef, event_counter belirtilen her olayın kaç kez gerçekleştiğini sayar.

Hedefin event_counter parametresi yoktur ve aldığı verileri zaman uyumlu olarak işler.

event_counter hedefiyle olay oturumu oluşturma

Aşağıda bir hedefle olay oturumu oluşturma örneği verilmiştır event_counter . Oturum, ilk dört checkpoint_begin olayı sayar ve ardından koşulu hedeflere gönderilen olay sayısını dört ile sınırladığı için sayma işlemini durdurur. Bu örnek için olayı checkpoint_begin, CHECKPOINT komutunu yürüterek oluşturabilirsiniz.

Bu örneği Azure SQL Veritabanı'nda veya Fabric'deki SQL veritabanında kullanmak için ON SERVER değerini ON DATABASE ile değiştirin.

CREATE EVENT SESSION event_counter_checkpoint_begin
ON SERVER
ADD EVENT sqlserver.checkpoint_begin
(
    WHERE package0.counter <= 4
)
ADD TARGET package0.event_counter
WITH
(
    MAX_MEMORY = 4096 KB,
    MAX_DISPATCH_LATENCY = 3 SECONDS
);

Etkinlik oturumunu başlatabilmek için aşağıdaki işlemi yürütün:

ALTER EVENT SESSION event_counter_checkpoint_begin
ON SERVER
STATE = START;

Toplanan verileri SSMS'de görüntülemek için oturum düğümünü genişletin ve hedefi seçin package0.event_counter . Veriler üç sütunlu bir kılavuzda görüntülenir. Her satır, oluşumlarının sayısını içeren bir olayı temsil eder.

Bu örnekte event_counter hedefi tarafından yakalanmış verilerin dört kontrol noktası gerçekleştiğinde nasıl görünebileceği aşağıda gösterilmiştir.

package_name   event_name         count
------------   ----------------   -----
sqlserver      checkpoint_begin   4

pair_matching hedefi

Hedef, pair_matching karşılık gelen bir bitiş olayı olmadan gerçekleşen başlangıç olaylarını algılamanızı sağlar. Örneğin, uzun süreli bir işlemin kilitleri tuttuğunu gösteren eşleşmeyen bir lock_acquired olayını lock_released bir olaya sahip olmadan bulabilirsiniz.

Genişletilmiş Olaylar başlangıç ve bitiş olaylarıyla otomatik olarak eşleşmez. Bunun yerine, pair_matching hedef belirtimindeki CREATE EVENT SESSION ifadesinde eşleşme mantığını tanımlarsınız. Bir başlangıç ve bitiş olayı eşleştirildiğinde, hedef eşleşen olayı atar ancak eşleşmeyen başlangıç olaylarını korur.

eşleştirme hedefiyle etkinlik oturumu oluşturma

Bu örnekte, adlı T1bir örnek tablo oluştururuz, üç satır ekler ve bu tablonun değerini elde ederiz object_id . Kolaylık olması için, bu örnekte tempdb veritabanında tablo oluşturuyoruz. Farklı bir veritabanı kullanıyorsanız, aşağıdaki T-SQL örnek kodunda veritabanı adını ayarlayın.

CREATE TABLE T1 (id INT PRIMARY KEY);

INSERT INTO T1 (id)
VALUES (1), (2), (3);

SELECT OBJECT_ID('T1') AS object_id;
-- object_id = 1029578706

Aşağıdaki olay oturumu lock_acquired ve lock_released olmak üzere iki olayı toplar. Ayrıca iki hedefi vardır. Bunlardan biri, event_counter her olay için oluşum sayısını sağlayan hedeftir. Diğeri, pair_matching başlangıç lock_acquired olayıyla bitiş lock_released olayını çiftler halinde eşleştirmek için mantığı tanımlayan hedeftir.

BEGIN_MATCHING_COLUMNS ve END_MATCHING_COLUMNS'e atanan virgülle ayrılmış alanların dizisi aynı olmalıdır. Virgülle ayrılmış değerde belirtilen alanlar arasında hiçbir sekmeye veya yeni satıra izin verilmez, ancak boşluklara izin verilir.

Olay oturumu tanımında, tempdb tablosunun nesne kimliği ile eşleşen olayları toplamak için object_id veritabanındaki T1 olayında bir olay koşulunu kullanırız. Tablonuzun nesne kimliğini kullanmak için yan tümcesindeki WHERE koşulu ayarlayın.

Bu örneği Azure SQL Veritabanı'nda veya Fabric'deki SQL veritabanında kullanmak için ON SERVER değerini ON DATABASE ile değiştirin.

CREATE EVENT SESSION pair_matching_lock_acquired_released
ON SERVER
ADD EVENT sqlserver.lock_acquired
(
    SET COLLECT_DATABASE_NAME = 1,
        COLLECT_RESOURCE_DESCRIPTION = 1
    ACTION (sqlserver.transaction_id)
    WHERE (database_name = 'tempdb'
           AND object_id = 1029578706)
),
ADD EVENT sqlserver.lock_released
(
    SET COLLECT_DATABASE_NAME = 1,
        COLLECT_RESOURCE_DESCRIPTION = 1
    ACTION (sqlserver.transaction_id)
    WHERE (database_name = 'tempdb'
           AND object_id = 1029578706)
)
ADD TARGET package0.event_counter,
ADD TARGET package0.pair_matching
(
    SET BEGIN_EVENT = N'sqlserver.lock_acquired',
        BEGIN_MATCHING_COLUMNS = N'resource_0, resource_1, resource_2, transaction_id, database_id',
        END_EVENT = N'sqlserver.lock_released',
        END_MATCHING_COLUMNS = N'resource_0, resource_1, resource_2, transaction_id, database_id',
        RESPOND_TO_MEMORY_PRESSURE = 1
)
WITH
(
    MAX_MEMORY = 8192 KB,
    MAX_DISPATCH_LATENCY = 15 SECONDS
);

Etkinlik oturumunu başlatabilmek için aşağıdaki işlemi yürütün:

ALTER EVENT SESSION pair_matching_lock_acquired_released
ON SERVER
STATE = START;

T1 tablosunu güncelleyen bir işlem başlatın, ancak işlemi gerçekleştirmeyin veya geri almayın. Bu, elde edilen ancak serbest bırakılmayan kilitlerin mevcut olmasını garanti eder.

BEGIN TRANSACTION;
UPDATE T1
    SET id = id + 1;

SSMS'de etkinlik oturumunun her hedefinin çıkışını inceleyin.

Hedef event_counter aşağıdaki çıktıyı üretir ve kilitlerden birinin serbest bırakılmadığını gösteriyor. Ancak, bu hedef bu kilidin ayrıntılarını göstermez.

package_name   event_name      count
------------   ----------      -----
sqlserver      lock_acquired   4
sqlserver      lock_released   3

Hedef pair_matching , kısa olması için kesilmiş aşağıdaki çıktıya sahiptir. Çıktının event_counter önerdiği gibi, olay hakkında daha fazla ayrıntıyı içeren, eşleşmeyen lock_acquired olayı için gerçekten de tek bir satır görüyoruz.

package_name  event_name    timestamp                     associated_object_id  database_id  database_name
------------  ------------  ---------                     -------------         -----------  -------------
sqlserver    lock_acquired   2025-10-01 20:06:07.1890000  1029578706            2            tempdb

İşlemi geri alın.

ROLLBACK;

Hedef tarafından pair_matching toplanan bir olaya eylem eklerseniz, eylem verileri de toplanır. Örneğin, eylem tarafından sqlserver.sql_text sağlanan T-SQL metnini olayla birlikte ekleyebilirsiniz. Bu örnekte, kilidi alan sorguyu kaydeder.

etw_classic_sync_target hedefi

SQL Server'da Genişletilmiş Olaylar, sistem etkinliğini izlemek için Windows için Olay İzleme (ETW) ile birlikte çalışabilir. Daha fazla bilgi için bakınız:

Bu ETW hedefi, aldığı verileri zaman uyumlu olarak işler.