MENGUBAH SESI PERISTIWA (Transact-SQL)
Berlaku untuk: SQL Server Azure SQL Managed Instance
Memulai atau menghentikan sesi peristiwa atau mengubah konfigurasi sesi peristiwa.
Sintaks
ALTER EVENT SESSION event_session_name
ON SERVER
{
[ [ { <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 } ]
}
Argumen
Term | Definisi |
---|---|
event_session_name | Adalah nama sesi peristiwa yang ada. |
STATE = MULAI | STOP | Memulai atau menghentikan sesi peristiwa. Argumen ini hanya valid ketika ALTER EVENT SESSION diterapkan ke objek sesi peristiwa. |
TAMBAHKAN event_specifier PERISTIWA <> | Mengaitkan peristiwa yang diidentifikasi oleh <event_specifier>dengan sesi peristiwa. |
[event_module_guid].event_package_name.event_name | Adalah nama peristiwa dalam paket peristiwa, di mana: - event_module_guid adalah GUID untuk modul yang berisi peristiwa. - event_package_name adalah paket yang berisi objek tindakan. - event_name adalah objek peristiwa. Peristiwa muncul di tampilan sys.dm_xe_objects sebagai object_type 'peristiwa'. |
SET { event_customizable_attribute= <nilai> [ ,...n] } | Menentukan atribut yang dapat disesuaikan untuk peristiwa tersebut. Atribut yang dapat disesuaikan muncul dalam tampilan sys.dm_xe_object_columns sebagai column_type 'dapat disesuaikan' dan object_name = event_name. |
ACTION ( { [event_module_guid].event_package_name.action_name [ ,...n] } ) | Adalah tindakan untuk mengaitkan dengan sesi peristiwa, di mana: - event_module_guid adalah GUID untuk modul yang berisi peristiwa. - event_package_name adalah paket yang berisi objek tindakan. - action_name adalah objek tindakan. Tindakan muncul dalam tampilan sys.dm_xe_objects sebagai object_type 'tindakan'. |
WHERE <predicate_expression> | Menentukan ekspresi predikat yang digunakan untuk menentukan apakah suatu peristiwa harus diproses. Jika <predicate_expression> benar, peristiwa diproses lebih lanjut oleh tindakan dan target untuk sesi tersebut. Jika <predicate_expression> salah, pemrosesan tindakan dan target tidak terjadi untuk peristiwa ini. Ekspresi predikat dibatasi hingga 3.000 karakter, yang membatasi argumen string. |
event_field_name | Adalah nama bidang peristiwa yang mengidentifikasi sumber predikat. |
[event_module_guid].event_package_name.predicate_source_name | Adalah nama sumber predikat global di mana: - event_module_guid adalah GUID untuk modul yang berisi peristiwa. - event_package_name adalah paket yang berisi objek predikat. - predicate_source_name didefinisikan dalam tampilan sys.dm_xe_objects sebagai object_type 'pred_source'. |
[event_module_guid].event_package_name.predicate_compare_name | Adalah nama objek predikat untuk dikaitkan dengan peristiwa, di mana: - event_module_guid adalah GUID untuk modul yang berisi peristiwa. - event_package_name adalah paket yang berisi objek predikat. - predicate_compare_name adalah sumber global yang ditentukan dalam tampilan sys.dm_xe_objects sebagai object_type 'pred_compare'. |
HILANGKAN event_specifier PERISTIWA <> | Menghilangkan peristiwa yang diidentifikasi oleh <event_specifier>. <> event_specifier harus valid dalam sesi peristiwa. |
MENAMBAHKAN event_target_specifier TARGET <> | Mengaitkan target yang diidentifikasi oleh <event_target_specifier>dengan sesi peristiwa. |
[event_module_guid].event_package_name.target_name | Adalah nama target dalam sesi peristiwa, di mana: - event_module_guid adalah GUID untuk modul yang berisi peristiwa. - event_package_name adalah paket yang berisi objek tindakan. - target_name adalah tindakannya. Tindakan muncul dalam tampilan sys.dm_xe_objects sebagai object_type 'target'. |
SET { target_parameter_name= <value> [, ...n] } | Menetapkan parameter target. Parameter target muncul dalam tampilan sys.dm_xe_object_columns sebagai column_type 'dapat disesuaikan' dan object_name = target_name. Catatan: Jika Anda menggunakan target buffer cincin, sebaiknya atur parameter target max_memory ke 2.048 kilobyte (KB) untuk membantu menghindari kemungkinan pemotongan data output XML. Untuk informasi selengkapnya tentang kapan menggunakan jenis target yang berbeda, lihat Target Peristiwa Yang Diperluas SQL Server. |
DROP TARGET <event_target_specifier> | Menghilangkan target yang diidentifikasi oleh <event_target_specifier>. <> event_target_specifier harus valid dalam sesi peristiwa. |
EVENT_RETENTION_MODE = { ALLOW_SINGLE_EVENT_LOSS | ALLOW_MULTIPLE_EVENT_LOSS | NO_EVENT_LOSS } | Menentukan mode retensi peristiwa yang akan digunakan untuk menangani kehilangan peristiwa. ALLOW_SINGLE_EVENT_LOSS Peristiwa dapat hilang dari sesi. Satu peristiwa hanya dihilangkan ketika semua buffer peristiwa penuh. Kehilangan satu peristiwa ketika buffer peristiwa penuh memungkinkan karakteristik performa SQL Server yang dapat diterima, sekaligus meminimalkan hilangnya data dalam aliran peristiwa yang diproses. ALLOW_MULTIPLE_EVENT_LOSS Buffer peristiwa penuh yang berisi beberapa peristiwa dapat hilang dari sesi. Jumlah peristiwa yang hilang tergantung pada ukuran memori yang dialokasikan untuk sesi, partisi memori, dan ukuran peristiwa dalam buffer. Opsi ini meminimalkan dampak performa pada server ketika buffer peristiwa diisi dengan cepat, tetapi sejumlah besar peristiwa dapat hilang dari sesi. NO_EVENT_LOSS Tidak ada kehilangan peristiwa yang diperbolehkan. Opsi ini memastikan bahwa semua peristiwa yang diangkat dipertahankan. Menggunakan opsi ini memaksa semua tugas yang mengaktifkan peristiwa untuk menunggu hingga ruang tersedia dalam buffer peristiwa. Ini dapat menyebabkan masalah performa yang dapat dideteksi saat sesi peristiwa aktif. Koneksi pengguna mungkin terjaga saat menunggu peristiwa dibuang dari buffer. Untuk target file peristiwa di Azure SQL Database, berulah sama seperti ALLOW_SINGLE_EVENT_LOSS. Untuk informasi selengkapnya, lihat EVENT_RETENTION_MODE. |
MAX_DISPATCH_LATENCY = { detik DETIK | TAK TERBATAS } | Menentukan jumlah waktu peristiwa di-buffer dalam memori sebelum dikirim ke target sesi peristiwa. Nilai latensi minimum adalah 1 detik. Namun, 0 dapat digunakan untuk menentukan latensi INFINITE. Secara default, nilai ini diatur ke 30 detik. detik DETIK Waktu, dalam detik, untuk menunggu sebelum mulai menyiram buffer ke target. detik adalah bilangan bujur. TAK TERHINGGA Buffer flush ke target hanya ketika buffer penuh, atau ketika sesi peristiwa ditutup. Catatan: MAX_DISPATCH_LATENCY = 0 DETIK setara dengan MAX_DISPATCH_LATENCY = INFINITE. |
MAX_EVENT_SIZE =size [ KB | MB ] | Menentukan ukuran maksimum yang diperbolehkan untuk peristiwa. MAX_EVENT_SIZE hanya boleh diatur untuk mengizinkan peristiwa tunggal yang lebih besar dari MAX_MEMORY; mengaturnya ke kurang dari MAX_MEMORY menimbulkan kesalahan. ukuran adalah bilangan bulat dan dapat berupa nilai kilobyte (KB) atau megabyte (MB). Jika ukuran ditentukan dalam kilobyte, ukuran minimum yang diizinkan adalah 64 KB. Saat MAX_EVENT_SIZE diatur, dua buffer ukuran dibuat selain MAX_MEMORY. Ini berarti bahwa total memori yang digunakan untuk buffering peristiwa MAX_MEMORY + 2 * MAX_EVENT_SIZE. |
MEMORY_PARTITION_MODE = { NONE | PER_NODE | PER_CPU } | Menentukan lokasi tempat buffer peristiwa dibuat. NONE Satu set buffer dibuat dalam instans SQL Server. PER NODE - Satu set buffer dibuat untuk setiap simpul NUMA. PER CPU - Satu set buffer dibuat untuk setiap CPU. |
TRACK_CAUSALITY = { AKTIF | NONAKTIF } | Menentukan apakah kausalitas dilacak atau tidak. Jika diaktifkan, kausalitas memungkinkan peristiwa terkait pada koneksi server yang berbeda untuk dikorelasikan bersama-sama. |
STARTUP_STATE = { AKTIF | NONAKTIF } | Menentukan apakah akan memulai sesi kejadian ini secara otomatis atau tidak ketika SQL Server dimulai. Jika STARTUP_STATE=ON sesi peristiwa hanya dimulai jika SQL Server dihentikan lalu dimulai ulang. ON= Sesi kejadian dimulai saat startup. OFF = Sesi peristiwa TIDAK dimulai saat startup. |
Keterangan
Argumen ADD
dan DROP
tidak dapat digunakan dalam pernyataan yang sama.
Izin
Memerlukan ALTER ANY EVENT SESSION
izin.
Tip
SQL Server 2022 memperkenalkan sejumlah izin baru yang lebih terperinci untuk Acara yang Diperluas, untuk informasi selengkapnya lihat Blog: Izin terperinci baru untuk SQL Server 2022 dan Azure SQL untuk meningkatkan kepatuhan dengan PoLP.
Contoh
Contoh berikut memulai sesi peristiwa, mendapatkan beberapa statistik sesi langsung, lalu menambahkan dua peristiwa ke sesi yang ada.
-- Start the event session
ALTER EVENT SESSION test_session ON SERVER
STATE = start;
GO
-- Obtain live session statistics
SELECT * FROM sys.dm_xe_sessions;
SELECT * FROM sys.dm_xe_session_events;
GO
-- Add new events to the session
ALTER EVENT SESSION test_session ON SERVER
ADD EVENT sqlserver.database_transaction_begin,
ADD EVENT sqlserver.database_transaction_end;
GO