Aracılığıyla paylaş


ETKINLIK OTURUMU OLUŞTUR (Transact-SQL)

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

Toplayacak olayları, olay oturumu hedeflerini ve olay oturumu seçeneklerini tanımlayan bir Genişletilmiş Olaylar oturumu oluşturur.

Transact-SQL söz dizimi kuralları

Sözdizimi

CREATE EVENT SESSION event_session_name
ON { SERVER | DATABASE }
{
    <event_definition> [ , ...n ]
    [ <event_target_definition> [ , ...n ] ]
    [ WITH ( <event_session_options> [ , ...n ] ) ]
}
;

<event_definition>::=
{
    ADD EVENT [event_module_guid].event_package_name.event_name
         [ ( {
                 [ SET { event_customizable_attribute = <value> [ , ...n ] } ]
                 [ ACTION ( { [event_module_guid].event_package_name.action_name [ , ...n ] } ) ]
                 [ WHERE <predicate_expression> ]
        } ) ]
}

<predicate_expression> ::=
{
    [ NOT ] <predicate_factor> | { ( <predicate_expression> ) }
    [ { AND | OR } [ NOT ] { <predicate_factor> | ( <predicate_expression> ) } ]
    [ , ...n ]
}

<predicate_factor>::=
{
    <predicate_leaf> | ( <predicate_expression> )
}

<predicate_leaf>::=
{
      <predicate_source_declaration> { = | < > | != | > | >= | < | <= } <value>
    | [event_module_guid].event_package_name.predicate_compare_name ( <predicate_source_declaration> , <value> )
}

<predicate_source_declaration>::=
{
    event_field_name | ( [event_module_guid].event_package_name.predicate_source_name )
}

<value>::=
{
    number | 'string'
}

<event_target_definition>::=
{
    ADD TARGET [event_module_guid].event_package_name.target_name
        [ ( SET { target_parameter_name = <value> [ , ...n ] } ) ]
}

<event_session_options>::=
{
    [       MAX_MEMORY = size [ KB | MB ] ]
    [ [ , ] EVENT_RETENTION_MODE = { ALLOW_SINGLE_EVENT_LOSS | ALLOW_MULTIPLE_EVENT_LOSS | NO_EVENT_LOSS } ]
    [ [ , ] MAX_DISPATCH_LATENCY = { seconds SECONDS | INFINITE } ]
    [ [ , ] MAX_EVENT_SIZE = size [ KB | MB ] ]
    [ [ , ] MEMORY_PARTITION_MODE = { NONE | PER_NODE | PER_CPU } ]
    [ [ , ] TRACK_CAUSALITY = { ON | OFF } ]
    [ [ , ] STARTUP_STATE = { ON | OFF } ]
    [ [ , ] MAX_DURATION = { <time duration> { SECONDS | MINUTES | HOURS | DAYS } | UNLIMITED } ]
}

Arguments

event_session_name

Olay oturumu için kullanıcı tanımlı ad. event_session_name alfasayısaldır, en çok 128 karakter olabilir, SQL Server örneğinde benzersiz olmalıdır ve Veritabanı tanımlayıcıları kurallarına uymalıdır.

{ SUNUCU | VERITABANI }

Olay oturumunun sunucu veya veritabanı bağlamında olup olmadığını belirler.

Azure SQL Database ve SQL database in Microsoft Fabric requires DATABASE.

ADD EVENT [event_module_guid]. event_package_name. event_name

Olay oturumuyla ilişkilendirilecek olay, burada:

  • event_module_guid , olayı içeren modülün GUID değeridir.
  • event_package_name , olayı içeren pakettir.
  • event_name olay adıdır.

Kullanılabilir olaylar aşağıdaki sorgu yürütülerek bulunabilir:

SELECT o.name AS event_name,
       o.description AS event_description,
       p.name AS package_name,
       p.description AS package_description
FROM sys.dm_xe_objects AS o
     INNER JOIN sys.dm_xe_packages AS p
         ON o.package_guid = p.guid
WHERE o.object_type = 'event'
ORDER BY event_name ASC;

SET { event_customizable_attribute = <value> [ ,... n ] }

Olay için özelleştirilebilir öznitelikler.

Belirli bir olay için özelleştirilebilir öznitelikler aşağıdaki sorgu yürütülerek bulunabilir:

SELECT object_name,
       name AS column_name,
       type_name,
       column_value,
       description
FROM sys.dm_xe_object_columns
WHERE object_name = 'event-name-placeholder'
      AND column_type = 'customizable'
ORDER BY column_name ASC;

ACTION ( { [event_module_guid].event_package_name. action_name [ ,... n ] })

Olayla ilişkilendirilecek eylem, burada:

  • event_module_guid , eylemi içeren modülün GUID değeridir.
  • event_package_name eylemi içeren pakettir.
  • action_name eylemin adıdır.

Aşağıdaki sorgu yürütülerek kullanılabilir eylemler bulunabilir:

SELECT o.name AS action_name,
       o.description AS action_description,
       p.name AS package_name,
       p.description AS package_description
FROM sys.dm_xe_objects AS o
     INNER JOIN sys.dm_xe_packages AS p
         ON o.package_guid = p.guid
WHERE o.object_type = 'action'
ORDER BY action_name ASC;

NEREDE <predicate_expression>

Bir olayın işlenip işlenmediğini belirlemek için kullanılan koşul ifadesini belirtir. predicate_expression< doğruysa>, olay oturuma yönelik eylemler ve hedefler tarafından daha fazla işlenir. predicate_expression< false ise>, ek eylem ve hedef işlemeden kaçınarak olay bırakılır. Her koşul ifadesi 3.000 karakterle sınırlıdır.

event_field_name

Koşul kaynağını tanımlayan olay alanının adı.

Bir olayın alanları aşağıdaki sorgu yürütülerek bulunabilir:

SELECT oc.name AS field_name,
       oc.type_name AS field_type,
       oc.description AS field_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
INNER JOIN sys.dm_xe_object_columns AS oc
ON o.name = oc.object_name
   AND
   o.package_guid = oc.object_package_guid
WHERE o.object_type = 'event'
      AND
      o.name = 'event-name-placeholder'
      AND
      oc.column_type = 'data'
ORDER BY field_name ASC;

[event_module_guid]. event_package_name. predicate_source_name

Genel koşul kaynağının adı:

  • event_module_guid , olayı içeren modülün GUID değeridir.
  • event_package_name koşul kaynak nesnesini içeren pakettir.
  • predicate_source_name koşul kaynağının adıdır.

Koşul kaynakları aşağıdaki sorgu yürütülerek bulunabilir:

SELECT o.name AS predicate_source_name,
       o.description AS predicate_source_description,
       p.name AS package_name,
       p.description AS package_description
FROM sys.dm_xe_objects AS o
     INNER JOIN sys.dm_xe_packages AS p
         ON o.package_guid = p.guid
WHERE o.object_type = 'pred_source'
ORDER BY predicate_source ASC;

[event_module_guid]. event_package_name. predicate_compare_name

Koşul karşılaştırıcı nesnesinin adı, burada:

  • event_module_guid , olayı içeren modülün GUID değeridir.
  • event_package_name , koşul karşılaştırıcı nesnesini içeren pakettir.
  • predicate_compare_name , koşul karşılaştırıcı adıdır.

Koşul karşılaştırıcıları aşağıdaki sorgu yürütülerek bulunabilir:

SELECT o.name AS predicate_comparator_name,
       o.description AS predicate_comparator_description,
       p.name AS package_name,
       p.description AS package_description
FROM sys.dm_xe_objects AS o
     INNER JOIN sys.dm_xe_packages AS p
         ON o.package_guid = p.guid
WHERE o.object_type = 'pred_compare'
ORDER BY predicate_comparator ASC;

sayı

64 bit tamsayı olarak temsil edilebilen herhangi bir sayısal tür.

'string'

Koşul karşılaştırıcısının gerektirdiği şekilde bir ANSI veya Unicode dizesi. Koşul karşılaştırma işlevleri için örtük dize türü dönüştürme işlemi yapılmaz. Beklenmeyen bir türün değerinin geçirilmesi hatayla sonuçlanır.

HEDEF EKLE [event_module_guid]. event_package_name. target_name

Olay oturumuyla ilişkilendirilecek hedef, burada:

  • event_module_guid , hedefi içeren modülün GUID değeridir.
  • event_package_name , hedefi içeren pakettir.
  • target_name hedef adıdır.

Kullanılabilir hedefler aşağıdaki sorgu yürütülerek bulunabilir:

SELECT o.name AS target_name,
       o.description AS target_description,
       o.capabilities_desc,
       p.name AS package_name,
       p.description AS package_description
FROM sys.dm_xe_objects AS o
     INNER JOIN sys.dm_xe_packages AS p
         ON o.package_guid = p.guid
WHERE o.object_type = 'target'
ORDER BY target_name ASC;

Bir olay oturumu sıfır, bir veya çok hedefe sahip olabilir. Bir olay oturumuna eklenen tüm hedefler farklı olmalıdır. Örneğin, zaten hedefi olan bir oturuma ikinci event_file bir event_file hedef ekleyemezsiniz.

Yaygın olarak kullanılan hedefler için kullanım örnekleri de dahil olmak üzere daha fazla bilgi için bkz. Genişletilmiş Olaylar hedefleri.

SET { target_parameter_name = <value> [ , ... n ] }

Hedef parametreyi ayarlar.

Tüm hedef parametreleri ve açıklamalarını görmek için aşağıdaki sorguyu yürüterek öğesini , , target-name-placeholdervb. gibi event_filehedef adla değiştirinring_buffer: histogram

SELECT name AS target_parameter_name,
       column_value AS default_value,
       description
FROM sys.dm_xe_object_columns
WHERE column_type = 'customizable'
      AND object_name = 'target-name-placeholder';

Önemli

Kademe arabelleği hedefini kullanıyorsanız, XML çıkışının MAX_MEMORY olası veri kesilmesini önlemeye yardımcı olmak için hedef parametreyi (MAX_MEMORY parametresinden ayrı) 1.024 kilobayt (KB) veya daha az olarak ayarlamanızı öneririz.

Hedef türleri hakkında daha fazla bilgi için bkz. Genişletilmiş Olaylar hedefleri.

WITH ( <event_session_options> [ ,... n ] )

Olay oturumuyla kullanılacak seçenekleri belirtir.

MAX_MEMORY = boyut [ KB | MB ]

Olay arabelleğe alma için oturuma ayrılacak en fazla bellek miktarını belirtir. Varsayılan değer 4 MB'tır. boyut bir tamsayıdır ve kilobayt (KB) veya megabayt (MB) değeri olabilir. Maksimum miktar 2 GB'ı (2.048 MB) aşamaz. Ancak, GB aralığında bellek değerlerinin kullanılması önerilmez.

EVENT_RETENTION_MODE = { ALLOW_SINGLE_EVENT_LOSS | ALLOW_MULTIPLE_EVENT_LOSS | NO_EVENT_LOSS }

Olay kaybını işlemek için kullanılacak olay saklama modunu belirtir.

  • ALLOW_SINGLE_EVENT_LOSS

    Bir olay oturumdan kaybolabilir. Tek bir olay yalnızca tüm olay arabellekleri dolu olduğunda bırakılır. Olay arabellekleri tam olduğunda tek bir olayın kaybedilmesi performans etkisini en aza indirirken, işlenen olay akışındaki veri kaybını da en aza indirir.

  • ALLOW_MULTIPLE_EVENT_LOSS

    Birden çok olay içeren tam olay arabellekleri oturumdan kaybolabilir. Kaybedilen olayların sayısı oturuma ayrılan bellek boyutuna, belleğin bölümlenmesine ve arabellekteki olayların boyutuna bağlıdır. Bu seçenek genellikle olay arabellekleri hızla doldurulduğunda sunucu üzerindeki performans etkisini önler, ancak oturumdan çok sayıda olay kaybolabilir.

  • NO_EVENT_LOSS

    Olay kaybına izin verilmez. Bu seçenek, tetiklenen tüm olayların korunmasını sağlar. Bu seçeneğin kullanılması, olayları tetikleyen tüm görevleri bir olay arabelleğinde kullanılabilir alan oluncaya kadar beklemeye zorlar. NO_EVENT_LOSS kullanılması, olay oturumu etkinken algılanabilir performans sorunlarına neden olabilir. Kullanıcı oturumları ve sorguları, olayların arabellekten boşaltılması beklenirken durdurulabilir.

    Uyarı

    Azure SQL Veritabanı'ndaki olay dosyası hedefleri, Microsoft Fabric'teki SQL veritabanı ve Azure SQL Yönetilen Örnek ( SQL Server 2025 veya Always-up-totarihgüncelleme politikası ile) Haziran 2024'ten itibaren NO_EVENT_LOSS şu şekilde davranır ALLOW_SINGLE_EVENT_LOSS. belirtirseniz NO_EVENT_LOSS, ileti kimliği 25665, önem derecesi 10 ve ileti This target doesn't support the NO_EVENT_LOSS event retention mode. The ALLOW_SINGLE_EVENT_LOSS retention mode is used instead. olan bir uyarı döndürülür ve oturum oluşturulur.

    Bu değişiklik, Azure blob depolamada olay dosyası hedefleriyle kullanıldığında veritabanı kullanılabilirliğini NO_EVENT_LOSS azaltabilecek bağlantı zaman aşımlarını, yük devretme gecikmelerini ve diğer sorunları önler.

    NO_EVENT_LOSS Azure SQL Database, Microsoft Fabric'te SQL veritabanı ve Azure SQL Yönetilen Örnek güncellemelerinde desteklenen EVENT_RETENTION_MODE argüman olarak kaldırılması planlanmaktadır. Bu özelliği yeni geliştirme çalışmalarında kullanmaktan kaçının ve şu anda bu özelliği kullanan uygulamaları değiştirmeyi planlayın.

MAX_DISPATCH_LATENCY = { saniye SANIYE | SONSUZ }

Olayların olay oturumu hedeflerine dağıtılmadan önce bellekte arabelleğe alınabilecek süreyi belirtir. Varsayılan olarak, bu değer 30 saniye olarak ayarlanır.

  • SaniyeSECONDS

    Arabellekleri hedeflere boşaltmaya başlamadan önce bekleme süresi (saniye cinsinden). saniye bir tamsayıdır. En düşük gecikme süresi değeri 1 saniyedir. Ancak, SONSUZ gecikme süresini belirtmek için 0 kullanılabilir.

  • SONSUZ

    Arabellekleri yalnızca arabellekler dolu olduğunda veya olay oturumu kapatıldığında hedeflere boşaltın.

MAX_EVENT_SIZE = boyut [ KB | MB ]

Olaylar için izin verilen en büyük boyutu belirtir. MAX_EVENT_SIZE yalnızca MAX_MEMORY büyük tek olaylara izin verecek şekilde ayarlanmalıdır; MAX_MEMORY'den küçük olarak ayarlamak bir hataya neden olur. boyut bir tamsayıdır ve kilobayt (KB) veya megabayt (MB) değeri olabilir. Boyut kilobayt olarak belirtilirse izin verilen en düşük boyut 64 KB'tır. MAX_EVENT_SIZE ayarlandığında, MAX_MEMORY ek olarak iki boyutta arabellek oluşturulur ve olay arabelleği için kullanılan toplam bellek MAX_MEMORY + 2 * MAX_EVENT_SIZE olur.

MEMORY_PARTITION_MODE = { YOK | PER_NODE | PER_CPU }

Olay arabelleklerinin benzini belirtir. Bunun dışındaki NONE seçenekler daha fazla arabellek ve daha yüksek bellek tüketimine neden olur, ancak çakışmayı önleyebilir ve daha büyük makinelerde performansı artırabilir.

  • HİÇBİRİ

    Veritabanı Altyapısı örneğinde tek bir arabellek kümesi oluşturulur.

  • PER_NODE

    Her NUMA düğümü için bir arabellek kümesi oluşturulur.

  • PER_CPU

    Her CPU için bir arabellek kümesi oluşturulur.

TRACK_CAUSALITY = { ON | KAPALI }

Nedenselliğin izlenip izlenmeyeceğini belirtir. Etkinleştirilirse, nedensellik farklı sunucu bağlantılarında ilgili olayların birbiriyle ilişkilendirilmesine izin verir.

STARTUP_STATE = { ON | KAPALI }

SQL Server başlatıldığında bu olay oturumlarının otomatik olarak başlatılıp başlatılmayacağını belirtir.

Uyarı

ise STARTUP_STATE = ON, veritabanı altyapısı durdurulduğunda ve yeniden başlatıldığında olay oturumu başlatılır. Olay oturumunu hemen başlatmak için kullanın ALTER EVENT SESSION ... ON SERVER STATE = START.

  • AÇIK

    Olay oturumu başlangıçta başlatılır.

  • OFF

    Olay oturumu başlangıçta başlatılmaz.

MAX_DURATION = { süre { SANİYE | DAKİkA | SAAT | GÜN } | SINIRSIZ }

Uygulanır: SQL Server 2025 (17.x)

  • SINIRSIZ

    Deyimini kullanmayı ALTER EVENT SESSION ... STATE = STOP durdurana kadar, başlatıldıktan sonra süresiz olarak çalışan bir olay oturumu oluşturur. Belirtilmezse MAX_DURATION bu varsayılan değerdir.

  • süre SANİYE | DAKİkA | SAAT | GÜN

    Oturum başladıktan sonra belirtilen süre geçtikten sonra otomatik olarak durdurulan bir olay oturumu oluşturur. Desteklenen maksimum süre 2.147.483 saniye veya 35.792 dakika ya da 596 saat veya 24 gündür.

Daha fazla bilgi için bkz . Zamana bağlı olay oturumları.

Açıklamalar

Olay oturumu bağımsız değişkenleri hakkında daha fazla bilgi için bkz. Genişletilmiş Olaylar oturumları.

Mantıksal işleçler NOT için öncelik sırası (en yüksek), ardından ANDve ardından ORolur.

Permissions

SQL Server ve Azure SQL Yönetilen Örneği için (SQL Server 2022'de kullanıma sunulmuştur) veya CREATE ANY EVENT SESSION izni gerekir ALTER ANY EVENT SESSION .

Microsoft Fabric'teki Azure SQL Database ve SQL veritabanı veritabanında izin gerektirir CREATE ANY DATABASE EVENT SESSION .

Tip

SQL Server 2022, Genişletilmiş Olaylar için daha ayrıntılı izinler kullanıma sunulmuştur. Daha fazla bilgi için bkz . Blog: PoLP ile uyumluluğu geliştirmek için SQL Server 2022 ve Azure SQL için yeni ayrıntılı izinler.

Örnekler

A. SQL Server ve Azure SQL Yönetilen Örneği örneği

Aşağıdaki örnekte adlı test_sessionbir olay oturumunun nasıl oluşturulacağı gösterilmektedir. Bu örnek iki olay ekler ve hedefi kullanır event_file ve her dosyanın boyutunu 256 MB ile sınırlar ve korunan dosya sayısını 10 ile sınırlar.

IF EXISTS (SELECT 1
           FROM sys.server_event_sessions
           WHERE name = 'test_session')
    DROP EVENT SESSION test_session ON SERVER;

CREATE EVENT SESSION test_session ON SERVER
ADD EVENT sqlserver.rpc_starting,
ADD EVENT sqlserver.sql_batch_starting,
ADD EVENT sqlserver.error_reported
ADD TARGET package0.event_file
    (
    SET filename = N'C:\xe\test_session.xel',
        max_file_size = 256,
        max_rollover_files = 10
    )
WITH (MAX_MEMORY = 4 MB);

B. Azure SQL Veritabanı örnekleri

Örneğin izlenecek yollar için Azure Depolama'da event_file hedefi olan bir olay oturumu oluşturma ve Bellekte ring_buffer hedefi olan bir olay oturumu oluşturma makalesini gözden geçirin.

Kod örnekleri Azure SQL Veritabanı ve SQL Yönetilen Örneği için farklılık gösterebilir

SQL Server için yazılmış bazı Transact-SQL kod örnekleri, Azure SQL Veritabanı'nda veya Doku'daki SQL veritabanında çalıştırılacak küçük değişikliklere ihtiyaç duyar. Bu tür kod örneklerinin bir kategorisi, ad ön ekleri veritabanı altyapısı türüne bağlı olarak farklılık gösteren katalog görünümlerini içerir:

  • server_ - SQL Server ve Azure SQL Yönetilen Örneği ön eki
  • database_ - Azure SQL Veritabanı, Doku'daki SQL veritabanı ve SQL Yönetilen Örneği için ön ek

Doku'daki Azure SQL Veritabanı ve SQL veritabanı yalnızca veritabanı kapsamlı olay oturumlarını destekler. SQL Server Management Studio (SSMS), Azure SQL Veritabanı için veritabanı kapsamlı etkinlik oturumlarını destekler: Object Explorer'daki her veritabanının altında veritabanı kapsamlı oturumlar içeren bir Genişletilmiş Olaylar düğümü görünür.

Azure SQL Yönetilen Örneği hem veritabanı kapsamlı oturumları hem de sunucu kapsamlı oturumları destekler. SSMS, SQL Yönetilen Örneği için sunucu kapsamlı oturumları tam olarak destekler: Tüm sunucu kapsamlı oturumları içeren Genişletilmiş Olaylar düğümü, Nesne Gezgini'ndeki her yönetilen örneğin Yönetim klasörünün altında görünür.

Uyarı

Azure SQL Yönetilen Örneği için sunucu kapsamlı olay oturumları önerilir.

Veritabanına özgü olay oturumları, Azure SQL Yönetilen Örnek için SSMS'deki Nesne Gezgini'nde listelenmez. SQL yönetilen örneğinde veritabanı kapsamlı olay oturumları yalnızca Transact-SQL ile sorgulanabilir ve yönetilebilir.

Aşağıdaki tablo, çizim için katalog görünümlerinin iki alt kümesini listeler ve karşılaştırır. Alt kümeler farklı veritabanı altyapısı türlerini desteklediğinden farklı ad ön eklerine sahiptir.

SQL Server ve Azure SQL Yönetilen Örneği'ndeki ad Azure SQL Veritabanı'ndaki ad, Doku'daki SQL veritabanı ve Azure SQL Yönetilen Örneği
sys.server_event_session_actions
sys.server_event_session_events
sys.server_event_session_fields
sys.server_event_session_targets
sys.server_event_sessions
sys.database_event_session_actions
sys.database_event_session_events
sys.database_event_session_fields
sys.database_event_session_targets
sys.database_event_sessions