Aracılığıyla paylaş


ALTER EVENT SESSION (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL Yönetilen Örneği

Olay oturumlarını başlatır veya durdurur ya da olay oturumu yapılandırmasını değiştirir.

Transact-SQL söz dizimi kuralları

Sözdizimi

ALTER EVENT SESSION event_session_name
ON { SERVER | DATABASE }
{
    [ [ {  <add_drop_event> [ , ...n ] }
       | { <add_drop_event_target> [ , ...n ] } ]
    [ WITH ( <event_session_options> [ , ...n ] ) ]
    ]
    | [ STATE = { START | STOP } ]
}

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

<event_specifier> ::=
{
[event_module_guid].event_package_name.event_name
}
<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'
}

<add_drop_event_target>::=
{
    ADD TARGET <event_target_specifier>
        [ ( SET { target_parameter_name = <value> [ , ...n ] } ) ]
    | DROP TARGET <event_target_specifier>
}

<event_target_specifier>::=
{
    [event_module_guid].event_package_name.target_name
}

<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

Mevcut bir olay oturumunun adı.

STATE = START | DURMAK

Olay oturumunu başlatır veya durdurur. Bağımsız STATE değişken kendi başına belirtilmelidir. Aynı ALTER EVENT SESSION deyimdeki diğer bağımsız değişkenlerle birleştirilemiyor.

OLAY <event_specifier EKLEME>

Olay oturumuyla ilişkilendirilecek bir olayı tanımlar. < > event_specifier [event_module_guid] biçimindedir.event_package_name. event_name, burada:

  • event_module_guid , olayı içeren modülün GUID değeridir.
  • event_package_name , olayı içeren pakettir.
  • event_name olayın 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.

DROP ETKINLIĞI <event_specifier>

Olay oturumundan kaldırılacak bir olayı tanımlar. Olay tanımlayıcısı [event_module_guid] biçimindedir. event_package_name. event_name, nerede:

  • event_module_guid , olayı içeren modülün GUID değeridir.

  • event_package_name , eylem nesnesini içeren pakettir.

  • event_name olay nesnesidir.

    < > event_specifier daha önce olay oturumuna eklenmiş bir olayı tanımlaması gerekir.

HEDEF <event_target_specifier EKLE>

Bir olay oturumuyla ilişkilendirilecek hedefi tanımlar. Olay hedef tanımlayıcısı [event_module_guid] biçimindedir. event_package_name. target_name, burada:

  • event_module_guid , olayı içeren modülün GUID değeridir.
  • event_package_name , eylem nesnesini içeren pakettir.
  • target_name hedefin 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.

HEDEF <ATKI event_target_specifier>

Olay oturumundan kaldırılacak hedefi tanımlar. Olay hedef tanımlayıcısı [event_module_guid] biçimindedir. event_package_name. target_name, burada:

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

Olay hedef tanımlayıcısı, olay oturumuna daha önce eklenmiş olan bir hedefi tanımlamalıdır.

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 dolu 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 ve Azure SQL Yönetilen Örneği'ndeki ( SQL Server 2025 veya Always-up-to-dategüncelleştirme ilkesi ile) olay dosyası hedefleri için Haziran NO_EVENT_LOSS 2024'ten itibaren ile aynı ALLOW_SINGLE_EVENT_LOSSşekilde davranır. 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 Veritabanı ve Azure SQL Yönetilen Örneği'ne yönelik gelecek güncelleştirmelerde desteklenen EVENT_RETENTION_MODE bir bağımsız değişken 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.

  • Saniye SANİYE

    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 }

Olay nedenselliğinin 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 }

Veritabanı Altyapısı başlatıldığında bu olay oturumunun 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

    Bir olay oturumunun bir kez başlatıldıktan sonra, deyimini kullanmayı ALTER EVENT SESSION ... STATE = STOP durdurana kadar süresiz olarak çalışmasına neden olur.

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

    Oturum başladıktan sonra belirtilen süre geçtikten sonra bir olay oturumunun otomatik olarak durmasına neden olur. 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ı.

ADD ve DROP bağımsız değişkenleri aynı deyimde kullanılamaz.

Permissions

SQL Server ve Azure SQL Yönetilen Örneği için izin gerekir ALTER ANY EVENT SESSION .

Azure SQL Veritabanı, veritabanında izin gerektirir ALTER 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. Olay oturumlarını başlatma ve durdurma

Bu örneği veritabanı olay oturumlarıyla kullanmak için değerini ile ON SERVERdeğiştirinON DATABASE.

ALTER EVENT SESSION test_session ON SERVER STATE = START;
ALTER EVENT SESSION test_session ON SERVER STATE = STOP;

B. Mevcut oturuma yeni olaylar ekleme

Bu örneği veritabanı olay oturumlarıyla kullanmak için değerini ile ON SERVERdeğiştirinON DATABASE.

ALTER EVENT SESSION test_session ON SERVER
ADD EVENT sqlserver.database_transaction_begin,
ADD EVENT sqlserver.database_transaction_end;

C. Oturum istatistiklerini görüntüleme

Bu örneği veritabanı olay oturumlarıyla kullanmak için değerini ve sys.dm_xe_sessions ile sys.dm_xe_database_sessionssys.dm_xe_session_eventsdeğiştirinsys.dm_xe_database_session_events.

SELECT *
FROM sys.dm_xe_sessions
WHERE name = 'test_session';

SELECT se.*
FROM sys.dm_xe_session_events AS se
WHERE EXISTS (SELECT 1
              FROM sys.dm_xe_sessions AS s
              WHERE s.address = se.event_session_address
                    AND s.name = 'test_session');