Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Database SQL di Microsoft Fabric
Membuat sesi Extended Events yang mengidentifikasi peristiwa yang akan dikumpulkan, target sesi peristiwa, dan opsi sesi peristiwa.
Sintaks
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 } ]
}
Argumen
event_session_name
Nama yang ditentukan pengguna untuk sesi peristiwa. event_session_name alfanumerik, dapat mencapai 128 karakter, harus unik dalam instans SQL Server, dan harus mematuhi aturan untuk pengidentifikasi Database.
DI { SERVER | DATABASE }
Menentukan apakah sesi peristiwa berada dalam konteks server atau database.
Azure SQL Database dan SQL database di Microsoft Fabric memerlukan DATABASE.
TAMBAHKAN EVENT [event_module_guid]. event_package_name. event_name
Peristiwa yang akan dikaitkan dengan sesi peristiwa, di mana:
- event_module_guid adalah GUID untuk modul yang berisi peristiwa.
- event_package_name adalah paket yang berisi peristiwa.
- event_name adalah nama peristiwa.
Peristiwa yang tersedia dapat ditemukan dengan menjalankan kueri berikut:
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 = <nilai> [ ,... n ] }
Atribut yang dapat disesuaikan untuk peristiwa tersebut.
Atribut yang dapat disesuaikan untuk peristiwa tertentu dapat ditemukan dengan menjalankan kueri berikut:
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 ] })
Tindakan untuk mengaitkan dengan peristiwa, di mana:
- event_module_guid adalah GUID untuk modul yang berisi tindakan.
- event_package_name adalah paket yang berisi tindakan.
- action_name adalah nama tindakan.
Tindakan yang tersedia dapat ditemukan dengan menjalankan kueri berikut:
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;
DI MANA <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, peristiwa dihilangkan, menghindari tindakan tambahan dan pemrosesan target. Setiap ekspresi predikat dibatasi hingga 3.000 karakter.
event_field_name
Nama bidang peristiwa yang mengidentifikasi sumber predikat.
Bidang untuk peristiwa dapat ditemukan dengan menjalankan kueri berikut:
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
Nama sumber predikat global di mana:
- event_module_guid adalah GUID untuk modul yang berisi peristiwa.
- event_package_name adalah paket yang berisi objek sumber predikat.
- predicate_source_name adalah nama sumber predikat.
Sumber predikat dapat ditemukan dengan menjalankan kueri berikut:
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
Nama objek komparator predikat, di mana:
- event_module_guid adalah GUID untuk modul yang berisi peristiwa.
- event_package_name adalah paket yang berisi objek komparator predikat.
- predicate_compare_name adalah nama komparator predikat.
Komparatata predikat dapat ditemukan dengan menjalankan kueri berikut:
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;
nomor
Jenis numerik apa pun yang dapat direpresentasikan sebagai bilangan bulat 64-bit.
'string'
Baik string ANSI atau Unicode sebagaimana diperlukan oleh komparatata predikat. Tidak ada konversi jenis string implisit yang dilakukan untuk predikat membandingkan fungsi. Meneruskan nilai jenis yang tidak terduga menghasilkan kesalahan.
TAMBAHKAN TARGET [event_module_guid].event_package_name.target_name
Adalah target untuk dikaitkan dengan sesi peristiwa, di mana:
- event_module_guid adalah GUID untuk modul yang berisi target.
- event_package_name adalah paket yang berisi target.
- target_name adalah nama target.
Target yang tersedia dapat ditemukan dengan menjalankan kueri berikut:
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;
Sesi peristiwa dapat memiliki target nol, satu, atau banyak. Semua target yang ditambahkan ke sesi peristiwa harus berbeda. Misalnya, Anda tidak dapat menambahkan target kedua event_file ke sesi yang sudah memiliki event_file target.
Untuk informasi selengkapnya, termasuk contoh penggunaan untuk target yang umum digunakan, lihat Target Peristiwa yang Diperluas.
SET { target_parameter_name = <value> [ , ... n ] }
Menetapkan parameter target.
Untuk melihat semua parameter target dan deskripsinya, jalankan kueri berikut, ganti target-name-placeholder dengan nama target, seperti event_file, , ring_bufferhistogram, dll.:
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';
Penting
Jika Anda menggunakan target buffer cincin, kami sarankan Anda mengatur MAX_MEMORY parameter target (berbeda dari MAX_MEMORY parameter sesi) menjadi 1.024 kilobyte (KB) atau kurang untuk membantu menghindari kemungkinan pemotongan data output XML.
Untuk informasi selengkapnya tentang jenis target, lihat Target Peristiwa yang Diperluas.
WITH ( <event_session_options> [ ,... n ] )
Menentukan opsi yang akan digunakan dengan sesi peristiwa.
MAX_MEMORY = ukuran [ KB | MB ]
Menentukan jumlah maksimum memori yang akan dialokasikan ke sesi untuk buffering peristiwa. Defaultnya adalah 4 MB. ukuran adalah bilangan bulat dan dapat berupa nilai kilobyte (KB) atau megabyte (MB). Jumlah maksimum tidak boleh melebihi 2 GB (2.048 MB). Namun, menggunakan nilai memori dalam rentang GB tidak disarankan.
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 sepenuhnya meminimalkan dampak performa sekaligus meminimalkan hilangnya data dalam eventstream 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 umumnya menghindari 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. Menggunakan NO_EVENT_LOSS dapat menyebabkan masalah performa yang dapat dideteksi saat sesi peristiwa aktif. Sesi dan kueri pengguna mungkin mengulur waktu sambil menunggu peristiwa dibuang dari buffer.
Catatan
Untuk target file peristiwa di Azure SQL Database, database SQL di Microsoft Fabric, dan Azure SQL Managed Instance (dengan kebijakan pembaruan SQL Server 2025 atau Always-up-to-date), mulai Juni 2024,
NO_EVENT_LOSSberperilaku sama sepertiALLOW_SINGLE_EVENT_LOSS. Jika Anda menentukanNO_EVENT_LOSS, peringatan dengan ID pesan 25665, tingkat keparahan 10, dan pesanThis target doesn't support the NO_EVENT_LOSS event retention mode. The ALLOW_SINGLE_EVENT_LOSS retention mode is used instead.dikembalikan, dan sesi dibuat.Perubahan ini menghindari batas waktu koneksi, penundaan failover, dan masalah lain yang dapat mengurangi ketersediaan database saat
NO_EVENT_LOSSdigunakan dengan target file peristiwa di penyimpanan blob Azure.NO_EVENT_LOSSdirencanakan untuk dihapus sebagai argumen yang didukungEVENT_RETENTION_MODEdalam pembaruan mendatang untuk Azure SQL Database, database SQL di Microsoft Fabric, dan Azure SQL Managed Instance. Hindari menggunakan fitur ini dalam pekerjaan pengembangan baru, dan rencanakan untuk memodifikasi aplikasi yang saat ini menggunakan fitur ini.
MAX_DISPATCH_LATENCY = { detik DETIK | TAK TERBATAS }
Menentukan jumlah waktu peristiwa di-buffer dalam memori sebelum dikirim ke target sesi peristiwa. Secara default, nilai ini diatur ke 30 detik.
Detik
SECONDSWaktu, dalam detik, untuk menunggu sebelum mulai menyiram buffer ke target. detik adalah bilangan bujur. Nilai latensi minimum adalah 1 detik. Namun, 0 dapat digunakan untuk menentukan latensi INFINITE.
TAK TERHINGGA
Buffer flush ke target hanya ketika buffer penuh, atau ketika sesi peristiwa ditutup.
MAX_EVENT_SIZE = ukuran [ 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, dan total memori yang digunakan untuk buffering peristiwa MAX_MEMORY + 2 * MAX_EVENT_SIZE.
MEMORY_PARTITION_MODE = { TIDAK ADA | PER_NODE | PER_CPU }
Menentukan afinitas buffer peristiwa. Opsi selain NONE menghasilkan lebih banyak buffer dan konsumsi memori yang lebih tinggi, tetapi dapat menghindari pertikaian dan meningkatkan performa pada komputer yang lebih besar.
TIDAK
Satu set buffer dibuat dalam instans Mesin Database.
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.
Catatan
Jika STARTUP_STATE = ON, sesi peristiwa dimulai ketika Mesin Database dihentikan lalu dimulai ulang. Untuk segera memulai sesi peristiwa, gunakan ALTER EVENT SESSION ... ON SERVER STATE = START.
AKTIF
Sesi peristiwa dimulai saat startup.
TIDAK AKTIF
Sesi peristiwa tidak dimulai saat startup.
MAX_DURATION = { durasi waktu { DETIK | MENIT | JAM | DAYS } | UNLIMITED }
Berlaku untuk: SQL Server 2025 (17.x)
UNLIMITED
Membuat sesi peristiwa yang berjalan tanpa batas waktu setelah dimulai, hingga berhenti menggunakan
ALTER EVENT SESSION ... STATE = STOPpernyataan. Ini adalah default jikaMAX_DURATIONtidak ditentukan.durasi waktu DETIK | MENIT | JAM | HARI
Membuat sesi peristiwa yang berhenti secara otomatis setelah waktu yang ditentukan berlalu setelah sesi dimulai. Durasi maksimum yang didukung adalah 2.147.483 detik, atau 35.792 menit, atau 596 jam, atau 24 hari.
Untuk informasi selengkapnya, lihat Sesi peristiwa terikat waktu.
Keterangan
Untuk informasi selengkapnya tentang argumen sesi peristiwa, lihat Sesi acara yang Diperluas.
Urutan prioritas untuk operator logis adalah NOT (tertinggi), diikuti oleh AND, diikuti oleh OR.
Izin
SQL Server dan Azure SQL Managed Instance memerlukan CREATE ANY EVENT SESSION (diperkenalkan di SQL Server 2022), atau ALTER ANY EVENT SESSION izin.
Azure SQL Database dan database SQL di Microsoft Fabric memerlukan CREATE ANY DATABASE EVENT SESSION izin dalam database.
Tip
SQL Server 2022 memperkenalkan izin 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
A. Contoh SQL Server dan Azure SQL Managed Instance
Contoh berikut menunjukkan cara membuat sesi peristiwa bernama test_session. Contoh ini menambahkan dua peristiwa dan menggunakan event_file target, membatasi ukuran setiap file hingga 256 MB dan membatasi jumlah file yang dipertahankan menjadi 10.
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. Contoh Azure SQL Database
Misalnya panduan, tinjau Membuat sesi peristiwa dengan target event_file di Azure Storage dan Membuat sesi peristiwa dengan target ring_buffer dalam memori.
Contoh kode dapat berbeda untuk Azure SQL Database dan SQL Managed Instance
Beberapa contoh kode Transact-SQL yang ditulis untuk SQL Server memerlukan perubahan kecil untuk dijalankan di Azure SQL Database atau database SQL di Fabric. Satu kategori contoh kode tersebut melibatkan tampilan katalog yang awalan namanya berbeda tergantung pada jenis mesin database:
-
server_- awalan untuk SQL Server dan Azure SQL Managed Instance -
database_- awalan untuk Azure SQL Database, database SQL di Fabric, dan SQL Managed Instance
Azure SQL Database dan database SQL di Fabric hanya mendukung sesi peristiwa cakupan database. SQL Server Management Studio (SSMS) mendukung sesi peristiwa cakupan database untuk Azure SQL Database: simpul Peristiwa Diperpanjang yang berisi sesi cakupan database muncul di bawah setiap database di Object Explorer.
Azure SQL Managed Instance mendukung sesi cakupan database dan sesi cakupan server. SSMS sepenuhnya mendukung sesi cakupan server untuk SQL Managed Instance: node Extended Events yang berisi semua sesi cakupan server muncul di bawah folder Manajemen untuk setiap instans terkelola di Object Explorer.
Catatan
Sesi peristiwa cakupan server direkomendasikan untuk Azure SQL Managed Instance.
Sesi peristiwa yang dilingkup database tidak ditampilkan di Object Explorer di SSMS untuk Azure SQL Managed Instance. Pada instans terkelola SQL, sesi peristiwa cakupan database hanya dapat dikueri dan dikelola dengan Transact-SQL.
Untuk ilustrasi, tabel berikut mencantumkan dan membandingkan dua subset tampilan katalog. Subset memiliki awalan nama yang berbeda karena mendukung jenis mesin database yang berbeda.
| Nama di SQL Server dan Azure SQL Managed Instance | Nama di Azure SQL Database, database SQL di Fabric, dan Azure SQL Managed Instance |
|---|---|
sys.server_event_session_actionssys.server_event_session_eventssys.server_event_session_fieldssys.server_event_session_targetssys.server_event_sessions |
sys.database_event_session_actionssys.database_event_session_eventssys.database_event_session_fieldssys.database_event_session_targetssys.database_event_sessions |