1. Pengantar
1.1 Apa Itu SQL Server Acara yang Diperpanjang?
SQL Server Extended Events adalah sistem pemantauan kinerja ringan yang memungkinkan administrator dan pengembang mengumpulkan dan menganalisis data aktivitas server secara detail. Sistem ini terintegrasi ke dalam SQL Server Mesin Basis Data dan menyediakan wawasan menyeluruh terhadap operasi normal dan skenario pemecahan masalah.
1.2 Mengapa Menggunakan Extended Events untuk Pemantauan?
SQL Server Extended Events menawarkan beberapa keuntungan menarik untuk pemantauan dan pemecahan masalah basis data:
- Dampak kinerja minimal dengan arsitektur ringan
- Kontrol terperinci atas pengumpulan data dan penyaringan peristiwa
- Pengumpulan data yang dapat disesuaikan dengan kebutuhan pemantauan tertentu
- Kemampuan untuk menangkap peristiwa dari beberapa paket secara bersamaan
- Kemampuan penyaringan yang fleksibel untuk fokus pada operasi yang relevan
- Dukungan untuk pemantauan sistem produksi tanpa menurunkan pengalaman pengguna
- Pelacakan metrik kinerja yang komprehensif
- Kemampuan diagnostik tingkat lanjut untuk pemecahan masalah.
- Pemeliharaan jejak audit untuk persyaratan kepatuhan
- Opsi analisis data real-time dan historis
1.3 Acara Diperpanjang vs SQL Server Profil
Sementara SQL Server Profil Meskipun sebelumnya merupakan alat pemantauan tradisional, MS SQL Extended Events menyediakan alternatif yang lebih efisien. Extended Events menggunakan lebih sedikit sumber daya sistem dan menawarkan skalabilitas yang lebih baik untuk lingkungan produksi.
SQL Server Profiler sekarang tidak digunakan lagi, dan Microsoft menyarankan migrasi ke Extended Events untuk semua aktivitas pemantauan.
2. Memahami Arsitektur Acara yang Diperluas
2.1 Komponen Mesin Acara yang Diperluas
Mesin Extended Events terdiri dari beberapa komponen inti yang bekerja sama untuk menangkap, memproses, dan menyimpan data acara. Memahami komponen-komponen ini membantu Anda merancang solusi pemantauan yang efektif.
- pengirim: Komponen dispatcher mengoordinasikan alur peristiwa dari sumber peristiwa ke mesin Extended Events. Ketika suatu peristiwa diaktifkan, dispatcher menerima notifikasi dan merutekannya ke sesi aktif yang telah berlangganan jenis peristiwa tersebut.
- Buffer: Buffer menyimpan data peristiwa sementara di memori sebelum ditulis ke target. Mekanisme buffering ini meningkatkan kinerja dengan mengurangi operasi I/O. Ukuran buffer dan pengaturan manajemen dapat dikonfigurasi untuk menyeimbangkan penggunaan memori dengan kebutuhan pengambilan data.
- Sidang: Sesi menentukan ruang lingkup pemantauan peristiwa. Sesi menentukan peristiwa mana yang akan ditangkap, tindakan apa yang akan dijalankan, predikat mana yang akan diterapkan, dan di mana hasilnya akan disimpan. Sesi dapat dibuat, dimodifikasi, dimulai, dan dihentikan secara independen.
- Instans Target: Instance target mewakili tujuan penyimpanan untuk data peristiwa yang ditangkap. Setiap sesi dapat menulis ke satu atau beberapa target, seperti file, buffer cincin, atau penghitung. Target memproses dan menyimpan informasi peristiwa untuk analisis selanjutnya.
2.2 Paket Acara
SQL Server Extended Events mengorganisir fungsionalitas ke dalam paket. Setiap paket berisi peristiwa, tindakan, tipe, predikat, dan target yang terkait. Paket umum meliputi sqlserver, sqlos, dan package0.
- Paket sqlserver menyediakan kejadian spesifik basis data seperti kueri dan transaksi.
- Paket sqlos berisi peristiwa sistem operasi.
- Paket0 menawarkan fungsionalitas tujuan umum yang digunakan di semua paket.
2.3 Jenis dan Bidang Acara
Peristiwa mewakili kejadian dalam SQL Server yang ingin Anda pantau. Setiap jenis peristiwa memiliki kolom yang telah ditentukan sebelumnya yang merekam informasi relevan. Misalnya, peristiwa sql_statement_completed mencakup kolom untuk durasi, waktu CPU, baca, dan tulis.
Peristiwa dapat bersifat sinkron atau asinkron. Peristiwa sinkron dipicu selama operasi berlangsung, sementara peristiwa asinkron dipicu setelah operasi selesai. Memahami karakteristik peristiwa membantu Anda memilih peristiwa yang tepat untuk kebutuhan pemantauan Anda.
2.4 Saham
Tindakan menambahkan informasi tambahan ke peristiwa yang ditangkap. Ketika suatu peristiwa terjadi, tindakan terkait akan dieksekusi untuk mengumpulkan konteks tambahan seperti teks SQL, ID sesi, atau informasi tumpukan panggilan.
Tindakan umum meliputi sql_text untuk menangkap pernyataan kueri, database_name untuk mengidentifikasi basis data, dan client_hostname untuk melacak server asal. Tindakan-tindakan ini memberikan konteks penting untuk pemecahan masalah dan analisis.
2.5 Sasaran
Target menentukan bagaimana dan di mana data peristiwa disimpan. SQL Server Extended Events mendukung berbagai tipe target, termasuk:
- event_file untuk penyimpanan disk, menyediakan penyimpanan persisten untuk analisis terperinci
- ring_buffer untuk retensi berbasis memori, menawarkan akses cepat ke peristiwa terkini dengan overhead minimal
- event_counter untuk penghitungan sederhana
- histogram untuk pengelompokan
- pair_matching untuk mengkorelasikan peristiwa terkait
2.6 Predikat (Filter)
Predikat peristiwa filter berdasarkan kondisi tertentu, sehingga mengurangi volume data yang ditangkap. Anda dapat memfilter berdasarkan nama basis data, nama aplikasi, ID sesi, ambang batas durasi, atau nilai kolom peristiwa apa pun.
Penggunaan predikat yang efektif meminimalkan dampak kinerja dengan hanya menangkap peristiwa yang relevan. Predikat kompleks menggabungkan beberapa kondisi menggunakan operator logika untuk menciptakan kriteria penyaringan yang presisi.
3. Status Sesi Acara yang Diperpanjang dan Siklus Hidup
3.1 Status Sesi: CREATE, UBAH, dan DROP
Sesi Acara yang Diperpanjang berlangsung melalui beberapa status berbeda:
- Pernyataan CREATE EVENT SESSION mendefinisikan sesi baru tetapi tidak memulainya. Sesi tersebut berada dalam keadaan berhenti hingga diaktifkan secara eksplisit.
- Pernyataan ALTER EVENT SESSION memodifikasi konfigurasi sesi atau mengubah statusnya antara berhenti dan dimulai.
- Pernyataan DROP EVENT SESSION menghapus definisi sesi sepenuhnya dari server.
3.2 Konten dan Karakteristik Sesi
Setiap sesi berisi kumpulan peristiwa, tindakan, target, dan predikat. Sesi memiliki batasan tersirat yang mendefinisikan ruang lingkup dan perilakunya. Opsi konfigurasi mengontrol alokasi memori, retensi peristiwa, dan latensi pengiriman.
Karakteristik sesi mencakup apakah sesi tersebut tetap ada setelah server dimulai ulang, alokasi memori maksimum, dan bagaimana sesi tersebut menangani tekanan memori. Pengaturan ini secara signifikan memengaruhi perilaku sesi dan konsumsi sumber daya.
3.3 Batasan Sesi dan Paket
Batas sesi menentukan hubungan antara peristiwa, target, dan paket. Peristiwa dari satu paket dapat memicu tindakan dari paket lain, memberikan fleksibilitas dalam strategi pengumpulan data.
Hubungan paket memungkinkan Anda menggabungkan peristiwa dari berbagai sumber dalam satu sesi. Kemampuan ini memungkinkan skenario pemantauan komprehensif yang mencakup berbagai SQL Server subsistem.
4. Membuat Sesi Acara yang Diperpanjang Menggunakan SSMS
4.1 Prasyarat dan Pengaturan
Sebelum membuat SQL Server Untuk sesi Acara yang Diperpanjang, pastikan Anda memiliki izin yang sesuai. Anda memerlukan izin "ALTER ANY EVENT SESSION" untuk sesi yang berada di lingkup server atau izin "CONTROL" pada database untuk sesi yang berada di lingkup database.
Verifikasi itu SQL Server Management Studio telah diinstal dan terhubung ke instance target Anda. Pahami persyaratan pemantauan dan identifikasi peristiwa serta target mana yang paling sesuai dengan kebutuhan Anda.
4.2 Mengakses Peristiwa yang Diperluas di Object Explorer
Untuk mengakses antarmuka Extended Events di SSMS, ikuti langkah-langkah berikut:
- Open SQL Server Studio Manajemen dan terhubung ke SQL Server contoh.
- Di Object Explorer, perluas Pengelolaan -> Acara yang Diperpanjang.
- Node Peristiwa Diperpanjang berisi Sesi ke Paket Exklusif folder untuk mengelola konfigurasi pemantauan Anda.
4.3 Buat Sesi Baru
Untuk membuat sesi baru:
-
- Klik kanan pada Sesi folder di bawah Acara yang Diperpanjang.
- Pilih Sesi Baru untuk membuka dialog konfigurasi. Konten berikut akan menggunakan metode ini untuk membuat sesi baru.
Catatan: Panduan Sesi Baru juga tersedia untuk pengalaman yang lebih terpandu.
4.3.1 Konfigurasi Halaman Umum
pada Umum halaman, konfigurasikan properti sesi dasar:
- Masukkan nama sesi di Nama sesi bidang. Gunakan nama deskriptif yang menunjukkan tujuan pemantauan.
- Secara opsional pilih Mulai sesi acara saat server diny启动. untuk mengaktifkan aktivasi sesi otomatis.
- Templat sesi default adalah KosongAnda dapat menggunakan templat lain jika menggunakan konfigurasi yang telah ditentukan sebelumnya.
4.3.2 Pengaturan Halaman Acara
The Events Halaman ini memungkinkan Anda memilih peristiwa mana yang akan dipantau:
- Pilih Events halaman dari kiri Pilih satu halaman panel.
- Dalam majalah Perpustakaan acara, telusuri acara yang tersedia atau gunakan fungsi pencarian.
- Filter peristiwa dengan mengetikkan kata kunci seperti “sql_statement_completed” untuk menemukan peristiwa yang relevan.
- Pilih peristiwa yang diinginkan, seperti sql_statement_completed.
- Klik tombol panah kanan untuk memindahkan acara ke Acara terpilih daftar.
4.3.3 Konfigurasi Penyimpanan Data
The Penyimpanan Data halaman menentukan di mana data peristiwa disimpan:
- Pilih Penyimpanan Data halaman dari kiri Pilih satu halaman panel.
- Dalam majalah Target area, pilih jenis target dari menu tarik-turun.
(1) target berkas peristiwa
Target event_file menyimpan data ke file disk dengan ekstensi .xel:
- Pilih berkas_peristiwa dari menu tarik-turun tipe target.
- Tentukan jalur file, misalnya C:\temp\YourSession_Target.xel.
- Konfigurasikan opsi rollover untuk mengelola ruang disk dengan mengatur ukuran file maksimum dan jumlah file.
- Target tersebut terus-menerus menulis peristiwa hingga sesi berhenti atau batas penyimpanan tercapai.
(2) ring_buffer Target
Target ring_buffer menyimpan peristiwa di memori untuk akses cepat tanpa I/O disk:
- Pilih penyangga_cincin sebagai tipe target.
- Konfigurasikan alokasi memori maksimum untuk buffer.
- Pahami bahwa peristiwa lama dibuang saat buffer terisi, sehingga cocok untuk pemantauan aktivitas terkini.
(3) penghitung_kejadian Target
Target `event_counter` hanya menghitung kejadian tanpa menyimpan data detail. Ini memberikan overhead minimal ketika Anda hanya membutuhkan informasi frekuensi.
(4) histogram Target
Histogram menargetkan pengelompokan peristiwa berdasarkan nilai bidang tertentu, sehingga menghasilkan statistik distribusi. Hal ini berguna untuk mengidentifikasi pola umum atau nilai frekuensi tinggi.
(5) target_pencocokan_pasangan
Target pair_matching mengkorelasikan peristiwa terkait seperti akuisisi dan pelepasan kunci. Hal ini memungkinkan analisis operasi berpasangan dan hubungan waktunya.
TIDAK PERNAH Pengaturan Lanjut
The Advanced halaman menyediakan opsi konfigurasi tingkat sesi:
- Pilih Advanced halaman dari kiri Pilih satu halaman panel.
- Konfigurasi Mode retensi acara untuk mengendalikan bagaimana peristiwa ditangani di bawah tekanan memori.
- set Latensi pengiriman maksimum untuk menyeimbangkan pemrosesan waktu nyata dengan kinerja sistem.
- Konfigurasi Ukuran memori maksimum ke Ukuran acara maksimum berdasarkan kebutuhan pemantauan Anda.
- Pilih Mode partisi memori untuk mengoptimalkan lingkungan CPU tunggal atau multi-CPU.
4.4 Mengonfigurasi Filter Peristiwa (Predikat)
Predikat mengurangi volume data dengan memfilter peristiwa berdasarkan kriteria tertentu. Untuk mengonfigurasi filter:
- pada Events halaman, pilih peristiwa yang ingin Anda filter, seperti “sql_statement_completed”.
- Klik Konfigurasi untuk membuka dialog konfigurasi acara.
- Pilih Filter (Predikat) Tab.
- Dalam majalah Bidang tarik-turun, pilih bidang yang ingin difilter, seperti durasi.
- Pilih sebuah Operator, seperti ">".
- Masuk ke filternya Nilai, seperti 1000000 (1 detik).
- Tambahkan lebih banyak kondisi jika perlu.
4.5 Memilih Bidang Tindakan dan Peristiwa
Untuk setiap peristiwa, Anda dapat memilih data yang akan dikumpulkan:
- pada Events halaman, pilih acara yang ingin Anda pilih datanya, seperti “sql_statement_completed”.
- Klik Konfigurasi untuk membuka dialog konfigurasi acara.
- Pilih Bidang Global (Tindakan) Tab.
- Pilih tindakan untuk menambahkan informasi tambahan, seperti nama_database atau nama_aplikasi_klien.
- Tinjau Bidang Acara bagian untuk melihat bidang mana yang diambil secara otomatis.
- Hapus semua bidang yang tidak diperlukan untuk mengurangi volume data.
4.6 Memulai dan Mengelola Sesi
Setelah mengkonfigurasi sesi Anda, Anda dapat memulainya dan memantau operasinya:
- Klik OK untuk membuat sesi.
- Di Object Explorer, perluas Sesi untuk melihat sesi baru Anda.
- Klik kanan nama sesi dan pilih Mulai Sesi untuk mulai merekam peristiwa.
- Untuk melihat data langsung, klik kanan sesi dan pilih Tonton Data Langsung.
- Hentikan sesi dengan mengklik kanan dan memilih Hentikan Sesi.
5. Membuat Sesi Acara yang Diperpanjang Menggunakan T-SQL
5.1 Sintaks CREATE EVENT SESSION
Membuat sesi Extended Event dengan T-SQL memberikan kontrol yang presisi dan memungkinkan skrip untuk penerapan otomatis. Pernyataan CREATE EVENT SESSION mengikuti struktur sintaksis tertentu.
Sintaks dasarnya mencakup nama sesi, klausa ADD EVENT untuk setiap kejadian, klausa ADD TARGET untuk tujuan penyimpanan, dan klausa WITH opsional untuk konfigurasi sesi.
5.2 Membuat Sesi Acara Dasar
Sesi dasar memantau peristiwa tertentu dan menulis hasilnya ke target. Berikut cara membangun komponen-komponen pentingnya.
5.2.1 Menentukan Nama dan Opsi Sesi
Mulailah dengan membuat sesi dengan nama yang deskriptif:
CREATE EVENT SESSION [SampleSession] ON SERVER
Klausa ON SERVER menciptakan sesi lingkup server yang tetap ada meskipun terjadi perubahan basis data. Untuk Azure SQL Database, gunakan ON DATABASE untuk sesi lingkup basis data.
5.2.2 Menambahkan Acara dengan ADD EVENT
Tambahkan kejadian yang akan ditangkap menggunakan klausa ADD EVENT:
CREATE EVENT SESSION [SampleSession] ON SERVER ADD EVENT sqlserver.sql_statement_completed
Ini merekam semua pernyataan SQL yang telah selesai. Anda dapat menambahkan beberapa peristiwa dengan menambahkan klausa ADD EVENT tambahan.
5.2.3 Mengonfigurasi Tindakan Peristiwa
Tindakan mengumpulkan konteks tambahan untuk setiap peristiwa. Tambahkan tindakan dalam tanda kurung setelah nama peristiwa:
CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text, sqlserver.database_name, sqlserver.username)
)
Contoh ini menangkap teks SQL, nama basis data, dan nama pengguna untuk setiap pernyataan yang diselesaikan.
5.2.4 Menetapkan Predikat Peristiwa (Klausa WHERE)
Predikat peristiwa filter untuk mengurangi volume data. Gunakan klausa WHERE dalam definisi peristiwa:
CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text)
WHERE ([package0].[greater_than_uint64]([duration],(5000000)))
)
Filter ini menyaring pernyataan dengan durasi lebih dari 5 detik (5,000,000 mikrodetik).
5.3 Menambahkan Target Acara
Target menentukan di mana data peristiwa disimpan dan bagaimana data tersebut diproses.
5.3.1 Sintaks TAMBAH TARGET
Tambahkan target menggunakan klausa ADD TARGET setelah semua event didefinisikan:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SampleSession.xel'
)
Awalan package0 menunjukkan bahwa target berasal dari paket dasar.
5.3.2 Mengonfigurasi Parameter Target
Setiap tipe target menerima parameter spesifik. Untuk event_file, konfigurasikan filename, max_file_size, dan max_rollover_files:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SampleSession.xel',
max_file_size=(50),
max_rollover_files=(5)
)
Konfigurasi ini membuat file hingga 50 MB masing-masing, dengan mempertahankan hingga 5 file melalui rollover.
5.4 Opsi dan Pengaturan Sesi
Klausa WITH mengonfigurasi opsi tingkat sesi yang mengendalikan perilaku dan penggunaan sumber daya.
5.4.1 MAX_MEMORY dan EVENT_RETENTION_MODE
Kontrol alokasi memori dan penanganan peristiwa di bawah tekanan:
WITH (
MAX_MEMORY=4096 KB,
EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS
)
Opsi EVENT_RETENTION_MODE meliputi ALLOW_SINGLE_EVENT_LOSS untuk penggunaan memori minimal, ALLOW_MULTIPLE_EVENT_LOSS untuk overhead moderat, dan NO_EVENT_LOSS untuk retensi data lengkap dengan mengorbankan potensi dampak pada kinerja.
5.4.2 LATENSI_PENGIRIMAN_MAKS
Tetapkan waktu maksimum yang diizinkan bagi peristiwa untuk tetap berada dalam buffer sebelum ditulis ke target:
WITH (
MAX_DISPATCH_LATENCY=30 SECONDS
)
Nilai yang lebih rendah memberikan lebih banyak data real-time dengan mengorbankan peningkatan operasi I/O.
5.4.3 MODE_PARTISI_MEMORY
Optimalkan partisi memori untuk konfigurasi perangkat keras Anda:
WITH (
MEMORY_PARTITION_MODE=PER_CPU
)
Pilihannya meliputi NONE untuk partisi tunggal, PER_NODE untuk sistem NUMA, dan PER_CPU untuk konkurensi maksimum pada sistem multi-CPU.
5.5 Memulai, Menghentikan, dan Mengubah Sesi
Kelola status dan konfigurasi sesi melalui pernyataan ALTER EVENT SESSION.
5.5.1 UBAH SESI ACARA untuk Mulai/Berhenti
Mulai sesi setelah pembuatan:
ALTER EVENT SESSION [SampleSession] ON SERVER STATE = START;
Hentikan sesi lari:
ALTER EVENT SESSION [SampleSession] ON SERVER STATE = STOP;
5.5.2 Memodifikasi Sesi yang Ada
Ubah konfigurasi sesi saat dihentikan. Tambahkan peristiwa:
ALTER EVENT SESSION [SampleSession] ON SERVER ADD EVENT sqlserver.sql_batch_completed;
Hapus acara:
ALTER EVENT SESSION [SampleSession] ON SERVER DROP EVENT sqlserver.sql_statement_completed;
5.5.3 Menghentikan Sesi Acara
Hapus sesi sepenuhnya dengan DROP EVENT SESSION:
DROP EVENT SESSION [SampleSession] ON SERVER;
Sesi harus dihentikan sebelum diakhiri.
6. Bekerja dengan Target Peristiwa Secara Detail
6.1 Konfigurasi Target event_file
Target event_file menyediakan penyimpanan permanen untuk data peristiwa dengan opsi konfigurasi yang fleksibel.
6.1.1 Jalur File dan Konvensi Penamaan
Tentukan jalur lengkap dan nama file untuk file peristiwa:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\MySession.xel'
)
Gunakan ekstensi .xel untuk file log Peristiwa Lanjutan. Pastikan SQL Server akun layanan memiliki izin menulis ke direktori yang ditentukan.
6.1.2 Manajemen Rollover dan Ukuran File
Konfigurasikan pemindahan file otomatis untuk mengelola ruang disk:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\MySession.xel',
max_file_size=(50),
max_rollover_files=(10)
)
Ketika file mencapai 50 MB, SQL Server Extended Events membuat berkas baru dengan sufiks yang bertambah. Setelah mencapai 10 berkas, berkas terlama akan ditimpa.
6.1.3 Membaca Data File Peristiwa
Meng querying data file peristiwa menggunakan fungsi sys.fn_xe_file_target_read_file:
SELECT
event_data,
file_name,
file_offset
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
);
Pola wildcard membaca semua berkas yang terkait dengan sesi.
6.2 Penggunaan Target ring_buffer
Target ring_buffer menyimpan peristiwa di memori untuk akses cepat ke aktivitas terkini.
6.2.1 Penyimpanan Peristiwa Berbasis Memori
Konfigurasikan ring_buffer untuk penyimpanan berbasis memori:
ADD TARGET package0.ring_buffer
Acara hanya dapat diakses saat sesi aktif dan SQL Server sedang berjalan. Data akan hilang ketika sesi berhenti atau server dimulai ulang.
6.2.2 Ukuran dan Konfigurasi Buffer
Kontrol alokasi memori untuk buffer cincin:
ADD TARGET package0.ring_buffer(
SET max_memory=(4096)
)
Tentukan memori dalam KB. Ketika buffer penuh, peristiwa yang lebih lama akan dibuang menggunakan pendekatan FIFO.
6.2.3 Menanyakan Data Ring Buffer
Akses data buffer cincin melalui DMV:
SELECT
CAST(target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address
WHERE s.name = 'YourSessionName'
AND t.target_name = 'ring_buffer';
Target_data berisi informasi peristiwa dalam format XML.
6.3 penghitung_peristiwa Target
Target event_counter menyediakan penghitungan sederhana tanpa penyimpanan data yang detail:
ADD TARGET package0.event_counter
Target ini melacak frekuensi kejadian dengan overhead minimal, berguna untuk pemantauan volume tinggi di mana hanya jumlah yang penting.
6.4 histogram Target
Histogram tersebut menargetkan pengelompokan peristiwa berdasarkan nilai bidang:
ADD TARGET package0.histogram(
SET filtering_event_name=N'sqlserver.sql_statement_completed',
source_type=0,
source=N'database_name'
)
Konfigurasi ini membuat histogram yang menunjukkan distribusi kejadian di seluruh basis data.
6.5 target pencocokan pasangan
Target pair_matching mengkorelasikan peristiwa terkait seperti akuisisi kunci dengan pelepasan kunci:
ADD TARGET package0.pair_matching(
SET begin_event=N'sqlserver.lock_acquired',
end_event=N'sqlserver.lock_released',
begin_matching_columns=N'resource_type',
end_matching_columns=N'resource_type'
)
Hal ini memungkinkan analisis operasi berpasangan dan durasinya.
7. Melihat dan Menganalisis Data Peristiwa yang Diperpanjang
7.1 Menggunakan SSMS untuk Melihat Data Langsung
SQL Server Management Studio menyediakan antarmuka grafis untuk melihat data Extended Events secara real-time:
- Di Object Explorer, perluas Pengelolaan -> Acara yang Diperpanjang -> Sesi.
- Klik kanan sesi aktif Anda.
- Pilih Tonton Data Langsung untuk membuka penampil data langsung.
- Peristiwa akan muncul dalam kisi saat peristiwa itu terjadi.
- Klik pada masing-masing peristiwa untuk melihat nilai bidang terperinci di panel detail.
- Gunakan filter bilah alat untuk fokus pada jenis peristiwa atau nilai bidang tertentu.
7.2 Menanyakan Data File Peristiwa dengan T-SQL
Kueri T-SQL menyediakan analisis fleksibel terhadap data kejadian yang ditangkap.
7.2.1 Fungsi sys.fn_xe_file_target_read_file
Baca data berkas peristiwa menggunakan fungsi sistem ini:
SELECT
object_name AS EventName,
CAST(event_data AS XML) AS EventData,
file_name,
file_offset,
timestamp_utc
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
);
Fungsi ini mengembalikan satu baris per peristiwa dengan rincian berformat XML.
7.2.2 Parsing Data Peristiwa XML
Ekstrak nilai spesifik dari data peristiwa XML:
SELECT
event_data.value('(event/@name)[1]', 'VARCHAR(50)') AS EventName,
event_data.value('(event/@timestamp)[1]', 'DATETIME2') AS Timestamp,
event_data.value('(event/data[@name="duration"]/value)[1]', 'BIGINT') AS Duration,
event_data.value('(event/data[@name="statement"]/value)[1]', 'VARCHAR(MAX)') AS Statement
FROM (
SELECT CAST(event_data AS XML) AS event_data
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
)
) AS EventData;
Ekspresi XQuery mengekstrak nilai bidang individual dari struktur XML.
7.2.3 Mengonversi Data Peristiwa ke Tabel
Buat kumpulan hasil terstruktur dari data peristiwa:
WITH EventData AS (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
)
)
SELECT
EventXML.value('(event/@name)[1]', 'VARCHAR(100)') AS EventName,
EventXML.value('(event/data[@name="cpu_time"]/value)[1]', 'BIGINT') AS CPUTime,
EventXML.value('(event/data[@name="physical_reads"]/value)[1]', 'BIGINT') AS PhysicalReads,
EventXML.value('(event/action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText,
EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName
FROM EventData;
7.3 Menanyakan Data Ring Buffer
Ekstrak data dari target ring_buffer:
SELECT
n.value('(@name)[1]', 'VARCHAR(50)') AS EventName,
n.value('(@timestamp)[1]', 'DATETIME2') AS Timestamp,
n.value('(data[@name="duration"]/value)[1]', 'BIGINT') AS Duration,
n.value('(action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText
FROM (
SELECT CAST(target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address
WHERE s.name = 'YourSessionName'
AND t.target_name = 'ring_buffer'
) AS Data
CROSS APPLY TargetData.nodes('//event') AS q(n);
7.4 Tampilan Sistem untuk Acara yang Diperpanjang
SQL Server menyediakan beberapa DMV dan tampilan katalog untuk mengelola dan memantau sesi Acara Diperpanjang.
7.4.1 sesi acara server sys
Lihat definisi sesi yang disimpan di server:
SELECT
name,
event_retention_mode_desc,
max_dispatch_latency,
max_memory,
max_event_size,
memory_partition_mode_desc
FROM sys.server_event_sessions;
Tampilan katalog ini menunjukkan rincian konfigurasi untuk semua sesi yang ditentukan.
7.4.2 sys.dm_xe_sesi
Lihat sesi yang sedang aktif:
SELECT
name,
create_time,
total_regular_buffers,
regular_buffer_size,
total_large_buffers,
large_buffer_size
FROM sys.dm_xe_sessions;
DMV ini menyediakan informasi waktu proses tentang sesi Peristiwa Diperpanjang yang aktif.
7.4.3 sys.dm_xe_session_targets
Lihat target yang terkait dengan sesi aktif:
SELECT
s.name AS SessionName,
t.target_name,
t.execution_count,
t.execution_duration_ms
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address;
7.4.4 DMV Berguna Lainnya
Tampilan tambahan menyediakan informasi sesi yang komprehensif:
- sys.dm_xe_session_events: Mencantumkan peristiwa dalam sesi aktif
- sys.dm_xe_session_event_actions: Menampilkan tindakan yang dikonfigurasi untuk acara sesi
- sys.dm_xe_objects: Mengkatalogkan semua peristiwa, tindakan, dan target yang tersedia.
- sys.dm_xe_object_columns: Detail bidang yang tersedia untuk setiap jenis peristiwa
- sys.dm_xe_packages: Mencantumkan semua paket Peristiwa Diperpanjang
8. Kasus Penggunaan Praktis dan Contoh
8.1 Memantau Eksekusi Pernyataan SQL
Pelacakan eksekusi pernyataan SQL memberikan wawasan tentang pola kueri dan karakteristik kinerja.
8.1.1 Pelacakan Peristiwa sql_statement_completed
Buat sesi untuk memantau pernyataan SQL yang telah selesai:
CREATE EVENT SESSION [QueryMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(
sqlserver.sql_text,
sqlserver.database_name,
sqlserver.client_hostname,
sqlserver.username
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\QueryMonitoring.xel',
max_file_size=(100),
max_rollover_files=(5)
)
WITH (
MAX_MEMORY=4096 KB,
EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY=30 SECONDS,
STARTUP_STATE=OFF
);
ALTER EVENT SESSION [QueryMonitoring] ON SERVER STATE = START;
8.1.2 Pemfilteran berdasarkan Basis Data atau Aplikasi
Fokus pada basis data atau aplikasi tertentu menggunakan predikat:
CREATE EVENT SESSION [AppSpecificMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text, sqlserver.client_app_name)
WHERE (
[sqlserver].[database_name] = N'YourDatabase'
AND [sqlserver].[client_app_name] LIKE N'YourApplication%'
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\AppMonitoring.xel'
);
8.2 Menangkap Informasi Kebuntuan
Analisis kebuntuan memerlukan pengumpulan informasi terperinci tentang transaksi yang saling bertentangan.
8.2.1 xml_deadlock_report Peristiwa
Buat sesi untuk menangkap grafik kebuntuan lengkap:
CREATE EVENT SESSION [DeadlockMonitoring] ON SERVER
ADD EVENT sqlserver.xml_deadlock_report(
ACTION(
sqlserver.database_name,
sqlserver.sql_text
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\Deadlocks.xel'
)
WITH (STARTUP_STATE=ON);
ALTER EVENT SESSION [DeadlockMonitoring] ON SERVER STATE = START;
8.2.2 Menganalisis Grafik Deadlock
Ekstrak dan analisis informasi kebuntuan:
SELECT
EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS DeadlockTime,
EventXML.query('.') AS DeadlockGraph
FROM (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\Deadlocks*.xel',
NULL, NULL, NULL
)
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'xml_deadlock_report';
Grafik kebuntuan berisi rincian tentang proses, sumber daya, dan pemilihan korban.
8.3 Melacak Masalah Kinerja Kueri
Identifikasi kueri yang berkinerja buruk menggunakan metrik durasi dan konsumsi sumber daya.
8.3.1 Deteksi Kueri yang Berjalan Lama
Menangkap kueri yang melampaui ambang batas durasi tertentu:
CREATE EVENT SESSION [LongRunningQueries] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(
sqlserver.sql_text,
sqlserver.database_name,
sqlserver.plan_handle
)
WHERE ([duration] > 5000000) -- 5 seconds in microseconds
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\LongQueries.xel'
);
8.3.2 Analisis Rencana Eksekusi
Menangkap rencana kueri untuk analisis kinerja:
CREATE EVENT SESSION [QueryPlans] ON SERVER
ADD EVENT sqlserver.query_post_execution_showplan(
ACTION(
sqlserver.sql_text,
sqlserver.database_name
)
WHERE ([duration] > 10000000) -- 10 seconds
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\QueryPlans.xel',
max_file_size=(200)
);
8.4 Memantau Login dan Peristiwa Keamanan
Melacak aktivitas autentikasi dan otorisasi untuk audit keamanan.
8.4.1 Pelacakan Keberhasilan dan Kegagalan Login
Pantau upaya login yang berhasil dan gagal:
CREATE EVENT SESSION [LoginMonitoring] ON SERVER
ADD EVENT sqlserver.login(
ACTION(
sqlserver.client_hostname,
sqlserver.client_app_name
)
),
ADD EVENT sqlserver.login_failed(
ACTION(
sqlserver.client_hostname
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\Logins.xel'
)
WITH (STARTUP_STATE=ON);
8.4.2 Perubahan Izin
Lacak modifikasi izin keamanan:
CREATE EVENT SESSION [SecurityChanges] ON SERVER
ADD EVENT sqlserver.server_principal_management_event,
ADD EVENT sqlserver.database_principal_management_event,
ADD EVENT sqlserver.database_permission_change_event
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SecurityAudit.xel'
);
8.5 Pemantauan Tingkat Basis Data
Memantau operasi spesifik basis data dan perubahan status.
8.5.1 Peristiwa Pencadangan dan Pemulihan
Melacak operasi pencadangan dan pemulihan:
CREATE EVENT SESSION [BackupMonitoring] ON SERVER
ADD EVENT sqlserver.backup_restore_progress_trace,
ADD EVENT sqlserver.databases_backup_restore_event
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\BackupRestore.xel'
);
8.5.2 Perubahan Status Basis Data
Memantau transisi status basis data:
CREATE EVENT SESSION [DatabaseStateChanges] ON SERVER ADD EVENT sqlserver.database_started, ADD EVENT sqlserver.database_stopped ADD TARGET package0.ring_buffer;
8.6 Mendeteksi Korupsi Basis Data dan Masalah Integritas
SQL Server Extended Events menyediakan kemampuan peringatan dini untuk mendeteksi potensi kerusakan basis data, yang memungkinkan intervensi proaktif sebelum masalah meningkat.
8.6.1 Peristiwa Penting untuk Deteksi Korupsi
Beberapa kejadian menandakan potensi kerusakan atau masalah I/O.
8.6.1.1 error_reported Peristiwa untuk Kesalahan Kritis
Peristiwa error_reported menangkap semua SQL Server kesalahan, termasuk nomor kesalahan terkait korupsi:
ADD EVENT sqlserver.error_reported(
WHERE (
[severity] >= (20)
OR [error_number] IN (823, 824, 825, 832, 855, 856)
)
)
Kesalahan 823 mengindikasikan kesalahan I/O, 824 menandakan kesalahan konsistensi logis, dan 825 melaporkan keberhasilan baca-coba lagi yang mungkin mengindikasikan masalah perangkat keras.
8.6.1.2 Peristiwa database_suspect_data_page
Peristiwa ini terjadi ketika SQL Server menemukan halaman yang mencurigakan:
ADD EVENT sqlserver.database_suspect_data_page
Halaman yang mencurigakan menunjukkan potensi kerusakan dan dicatat dalam tabel msdb.dbo.suspect_pages.
8.6.1.3 errorlog_write Acara
Menangkap entri yang ditulis ke SQL Server catatan kesalahan:
ADD EVENT sqlserver.errorlog_written(
WHERE ([severity] >= (16))
)
8.6.2 Membuat Sesi Pemantauan Korupsi
Tetapkan sesi komprehensif untuk deteksi dan pemantauan korupsi.
8.6.2.1 Penyaringan untuk Nomor Kesalahan Korupsi (823, 824, 825)
Buat sesi yang ditargetkan dan berfokus pada indikator korupsi:
CREATE EVENT SESSION [CorruptionDetection] ON SERVER
ADD EVENT sqlserver.error_reported(
ACTION(
sqlserver.database_name,
sqlserver.sql_text
)
WHERE (
[error_number] IN (823, 824, 825, 832, 855, 856)
OR [severity] >= (20)
)
),
ADD EVENT sqlserver.database_suspect_data_page(
ACTION(
sqlserver.database_name
)
)
8.6.2.2 Menetapkan Tingkat Keparahan yang Sesuai
Sertakan kesalahan dengan tingkat keparahan tinggi yang mungkin mengindikasikan korupsi:
WHERE (
[severity] >= (20)
OR [error_number] IN (823, 824, 825)
)
Tingkat keparahan 20 dan di atasnya menunjukkan masalah tingkat sistem yang sering kali berkaitan dengan korupsi.
8.6.2.3 Mengonfigurasi Target File Peristiwa untuk Peringatan
Simpan kejadian kerusakan untuk analisis dan peringatan:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\CorruptionMonitoring.xel',
max_file_size=(50),
max_rollover_files=(10)
)
WITH (
STARTUP_STATE=ON,
MAX_DISPATCH_LATENCY=5 SECONDS
);
ALTER EVENT SESSION [CorruptionDetection] ON SERVER STATE = START;
8.6.3 Analisis Data Peristiwa Korupsi
Mengekstrak dan menginterpretasikan kejadian terkait korupsi dari data yang ditangkap.
8.6.3.1 Mengidentifikasi Halaman yang Dicurigai
Kueri untuk peristiwa database_suspect_data_page:
SELECT
EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS EventTime,
EventXML.value('(event/data[@name="database_id"]/value)[1]', 'INT') AS DatabaseID,
EventXML.value('(event/data[@name="file_id"]/value)[1]', 'INT') AS FileID,
EventXML.value('(event/data[@name="page_id"]/value)[1]', 'BIGINT') AS PageID,
EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName
FROM (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\CorruptionMonitoring*.xel',
NULL, NULL, NULL
)
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'database_suspect_data_page';
8.6.3.2 Mengekstrak Detail Kesalahan dan Konteks
Menganalisis kejadian error_reported untuk pola korupsi:
SELECT
EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS ErrorTime,
EventXML.value('(event/data[@name="error_number"]/value)[1]', 'INT') AS ErrorNumber,
EventXML.value('(event/data[@name="severity"]/value)[1]', 'INT') AS Severity,
EventXML.value('(event/data[@name="message"]/value)[1]', 'VARCHAR(MAX)') AS ErrorMessage,
EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName,
EventXML.value('(event/action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText
FROM (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\CorruptionMonitoring*.xel',
NULL, NULL, NULL
)
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'error_reported'
AND EventXML.value('(event/data[@name="error_number"]/value)[1]', 'INT') IN (823, 824, 825);
8.6.4 Integrasi dengan DBCC CHECKDB
Gunakan data Peristiwa yang Diperpanjang untuk memandu DBCC CHECKDB eksekusi.
8.6.4.1 Memicu DBCC CHECKDB Berdasarkan Peristiwa
Jika peristiwa korupsi terdeteksi, jalankan DBCC CHECKDB untuk validasi menyeluruh:
-- After detecting corruption events, run DBCC CHECKDB
DBCC CHECKDB ('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS;
Extended Events memberikan peringatan dini, sementara DBCC CHECKDB melakukan validasi menyeluruh.
8.6.4.2 Alur Kerja Respons Korupsi Otomatis
Terapkan respons otomatis dengan memantau berkas peristiwa:
- Konfigurasi SQL Server Pekerjaan agen untuk menanyakan berkas kejadian pemantauan kerusakan secara berkala.
- Bila ditemukan peristiwa kerusakan, jalankan DBCC CHECKDB pada basis data yang terpengaruh.
- Kirim peringatan email ke DBA dengan rincian acara dan hasil DBCC CHECKDB.
- Mencatat temuan pada tabel pemantauan terpusat untuk analisis tren.
8.6.4.3 Menyeimbangkan Pemantauan Proaktif dengan Kinerja
Extended Events menawarkan deteksi korupsi dengan overhead rendah dibandingkan dengan eksekusi DBCC CHECKDB yang sering:
- Jalankan Extended Events secara terus-menerus untuk deteksi korupsi secara real-time
- Jalankan DBCC CHECKDB hanya ketika indikator korupsi muncul
- Jadwalkan DBCC CHECKDB secara rutin selama masa pemeliharaan
- Gunakan Peristiwa Diperpanjang untuk mengidentifikasi database mana yang memerlukan perhatian segera
Pendekatan ini menyediakan pemantauan proaktif tanpa menghabiskan banyak sumber daya untuk pemeriksaan integritas yang konstan.
8.6.4.4 Memperbaiki Database yang Rusak
Jika terdeteksi kerusakan dalam basis data, Anda dapat menggunakan DBCC CHECKDB untuk memperbaiki kerusakan minor. Jika gagal, Anda dapat mencoba alat pihak ketiga. Alat pemulihan basis data SQL, yang umumnya menawarkan tingkat pemulihan yang lebih tinggi pada basis data yang sangat rusak.
9. Peristiwa Lanjutan Cakupan Server vs Cakupan Basis Data
9.1 Sesi Acara Bercakupan Server
Sesi lingkup server memantau aktivitas di seluruh SQL Server Sesi-sesi ini dibuat dengan klausa ON SERVER dan disimpan dalam database master.
CREATE EVENT SESSION [ServerWideMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\ServerWide.xel'
);
Sesi lingkup server menangkap kejadian dari semua basis data dan cocok untuk pemantauan tingkat instans.
9.2 Sesi Peristiwa Cakupan Basis Data (Azure SQL Database)
Sesi dengan cakupan basis data terbatas pada satu basis data dan terutama digunakan di Azure SQL Database yang membatasi akses tingkat server:
CREATE EVENT SESSION [DatabaseSpecificMonitoring] ON DATABASE
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
SET filename=N'DatabaseMonitoring.xel'
);
Di Azure SQL Database, file peristiwa disimpan di Azure Blob Storage, bukan di sistem file lokal.
9.3 Perbedaan dan Kasus Penggunaan
Sesi dengan cakupan server menyediakan pemantauan komprehensif di seluruh basis data, tetapi memerlukan izin yang lebih tinggi. Sesi dengan cakupan basis data menawarkan isolasi dan sesuai untuk memantau aplikasi atau penyewa tertentu.
Gunakan sesi lingkup server untuk pemantauan terpusat, pemecahan masalah performa di seluruh basis data, dan audit keamanan. Gunakan sesi lingkup basis data di Azure SQL Database, lingkungan multi-penyewa, atau saat mendelegasikan tanggung jawab pemantauan kepada tim aplikasi.
10. Peristiwa yang Diperpanjang di Azure SQL Database
10.1 Pertimbangan Khusus Azure
Azure SQL Database mengimplementasikan Extended Events dengan beberapa perbedaan dari on-premises SQL ServerSesi memiliki cakupan basis data secara default, dan penyimpanan file peristiwa menggunakan Azure Blob Storage, bukan sistem file lokal.
Autentikasi ke Azure Blob Storage memerlukan token SAS yang dikonfigurasi di dalam target file peristiwa. String koneksi merujuk pada akun penyimpanan dan kontainer tempat file peristiwa disimpan.
10.2 Target yang Tersedia di Azure
Azure SQL Database mendukung target Extended Event berikut:
- event_file: Menulis ke Azure Blob Storage
- ring_buffer: Penyimpanan berbasis memori dengan perilaku yang sama seperti di tempat
- event_counter: Menghitung kejadian peristiwa
Target event_file memerlukan konfigurasi dengan kredensial Azure Blob Storage:
ADD TARGET package0.event_file(
SET filename=N'https://yourstorageaccount.blob.core.windows.net/container/EventFile.xel'
)
10.3 Membuat Sesi Cakupan Basis Data
Buat sesi di Azure SQL Database:
CREATE EVENT SESSION [AzureMonitoring] ON DATABASE
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text, sqlserver.database_name)
)
ADD TARGET package0.ring_buffer
WITH (MAX_MEMORY=4096 KB);
ALTER EVENT SESSION [AzureMonitoring] ON DATABASE STATE = START;
Sesi dengan cakupan basis data di Azure berperilaku serupa dengan sesi dengan cakupan server di tempat, tetapi dengan cakupan yang terbatas pada basis data saat ini.
11. Praktik Terbaik dan Optimalisasi Kinerja
11.1 Meminimalkan Dampak Kinerja
Extended Events dirancang untuk meminimalkan overhead, tetapi konfigurasi yang tidak tepat dapat memengaruhi kinerja. Ikuti panduan berikut:
- Gunakan predikat spesifik untuk menyaring peristiwa daripada menangkap semuanya
- Hindari pengumpulan tindakan yang tidak perlu yang menambah overhead pemrosesan
- Pilih target yang sesuai berdasarkan kebutuhan penyimpanan data.
- Tetapkan ukuran buffer yang wajar dan latensi pengiriman
- Pantau konsumsi sumber daya sesi menggunakan DMV
11.2 Memilih Acara dan Filter yang Tepat
Pilih peristiwa yang secara langsung memenuhi tujuan pemantauan Anda. Hindari peristiwa berfrekuensi tinggi kecuali diperlukan, dan selalu terapkan predikat untuk mengurangi volume data.
Misalnya, daripada menangkap semua peristiwa sql_statement_completed, filter berdasarkan basis data tertentu atau ambang batas durasi:
WHERE (
[sqlserver].[database_name] = N'ProductionDB'
AND [duration] > 1000000
)
11.3 Pedoman Pemilihan Target
Pilih target berdasarkan kebutuhan analisis Anda:
- Gunakan event_file untuk analisis historis terperinci dan retensi jangka panjang
- Gunakan ring_buffer untuk pemantauan waktu nyata dengan dampak I/O minimal
- Gunakan event_counter ketika hanya frekuensi yang penting
- Gunakan histogram untuk analisis distribusi
- Gunakan pair_matching untuk analisis peristiwa berkorelasi
11.4 Rekomendasi Konfigurasi Sesi
Konfigurasikan sesi dengan batasan sumber daya yang sesuai:
- Tetapkan MAX_MEMORY berdasarkan volume acara dan sumber daya server yang diharapkan
- Gunakan ALLOW_SINGLE_EVENT_LOSS untuk meminimalkan overhead di sebagian besar skenario.
- Tetapkan MAX_DISPATCH_LATENCY untuk menyeimbangkan kebutuhan waktu nyata dengan kinerja
- Gunakan partisi memori PER_CPU pada sistem multiprosesor
- Hindari menggunakan STARTUP_STATE=ON kecuali jika diperlukan pemantauan terus menerus.
11.5 Mengelola Ukuran dan Retensi File Acara
Konfigurasikan pemindahan berkas untuk mencegah penggunaan disk yang tidak terbatas:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\Session.xel',
max_file_size=(100),
max_rollover_files=(10)
)
Konfigurasi ini menyimpan sekitar 1 GB data peristiwa (10 file × 100 MB). Sesuaikan berdasarkan kebutuhan penyimpanan dan ketersediaan penyimpanan Anda.
12. Pemecahan Masalah Acara yang Diperpanjang
12.1 Masalah Umum dan Solusinya
Masalah umum Extended Events meliputi sesi yang tidak menangkap data, penurunan kinerja, masalah target file, dan perilaku sesi yang tidak terduga.
12.2 Sesi Tidak Menangkap Data
Jika sesi tidak menangkap kejadian yang diharapkan:
- Verifikasi bahwa sesi telah dimulai menggunakan sys.dm_xe_sessions.
- Periksa predikat untuk memastikan mereka tidak menyaring semua kejadian.
- Konfirmasikan bahwa peristiwa sedang berjalan dengan menghapus filter untuk sementara.
- Tinjau izin untuk memastikan Anda memiliki akses untuk melihat data sesi.
- Periksa apakah konfigurasi target sudah benar dan dapat ditulis.
SELECT name, create_time FROM sys.dm_xe_sessions WHERE name = 'YourSessionName';
12.3 Penurunan Kinerja
Jika Peristiwa Diperpanjang menyebabkan masalah kinerja:
- Tambahkan predikat untuk mengurangi volume peristiwa.
- Hapus tindakan yang tidak perlu yang mengumpulkan data tambahan.
- Tingkatkan MAX_DISPATCH_LATENCY untuk mengurangi frekuensi penulisan.
- Ubah EVENT_RETENTION_MODE menjadi ALLOW_SINGLE_EVENT_LOSS.
- Pertimbangkan untuk menggunakan ring_buffer alih-alih event_file untuk kejadian frekuensi tinggi.
12.4 Masalah Target File
Masalah pada target file seringkali berkaitan dengan izin akses atau ruang penyimpanan disk:
- Verifikasi SQL Server Akun layanan memiliki izin tulis ke direktori target.
- Pastikan tersedia ruang disk yang cukup.
- Periksa apakah jalur yang ditentukan ada dan dapat diakses.
- Tinjau konfigurasi pemindahan berkas jika berkas tidak dipindahkan seperti yang diharapkan.
12.5 Debugging dengan Tampilan Sistem
Gunakan DMV untuk mendiagnosis masalah Peristiwa Berkepanjangan:
-- Check session status
SELECT s.name, s.create_time, s.total_regular_buffers, s.total_large_buffers
FROM sys.dm_xe_sessions AS s;
-- View session targets and their status
SELECT
s.name AS SessionName,
t.target_name,
t.execution_count,
CAST(t.target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address;
-- Check for dropped events
SELECT s.name, s.dropped_event_count, s.dropped_buffer_count
FROM sys.dm_xe_sessions AS s;
13. Topik Lanjutan
13.1 Membuat Paket Acara Kustom
Pengguna tingkat lanjut dapat membuat paket acara khusus untuk memperluas SQL Server Fungsi Acara yang Diperluas. Ini memerlukan pengembangan C++ dan integrasi dengan SQL Server kerangka kerja ekstensibilitas.
Paket khusus memungkinkan pemantauan peristiwa spesifik aplikasi atau mengintegrasikan sistem pemantauan pihak ketiga dengan infrastruktur Peristiwa Diperluas.
13.2 Templat Sesi Acara
SSMS menyediakan templat bawaan untuk skenario pemantauan umum. Akses templat saat membuat sesi baru melalui wizard:
- Pada dialog Sesi Baru, klik Contoh dropdown.
- Pilih dari templat yang tersedia seperti Pelacakan Detail Kueri atau Kesehatan Sistem.
- Ubah templat agar sesuai dengan kebutuhan spesifik Anda.
13.3 Integrasi dengan Solusi Pemantauan
Data Peristiwa yang Diperluas dapat menjadi sumber solusi pemantauan perusahaan:
- Ekspor data peristiwa ke sistem pencatatan terpusat
- Menguraikan file peristiwa dan memuat data ke dalam database pemantauan
- Buat dasbor khusus menggunakan alat BI
- Memicu peringatan berdasarkan pola peristiwa tertentu
- Menghubungkan SQL Server acara dengan metrik aplikasi dan infrastruktur
13.4 Otomatisasi dan Penjadwalan
Otomatiskan manajemen Acara yang Diperpanjang menggunakan SQL Server Agen:
- Buat tugas untuk memulai/menghentikan sesi selama rentang waktu tertentu.
- Analisis dan pelaporan file acara terjadwal
- Terapkan kebijakan penyimpanan data dengan mengarsipkan atau menghapus file acara lama
- Otomatiskan respons terhadap kondisi yang terdeteksi seperti masalah kinerja atau peristiwa keamanan
14. Migrasi dari SQL Server Profil
14.1 SQL Server Pemetaan Acara Profiler ke Acara yang Diperluas
Microsoft menyediakan pemetaan antara SQL Server Profil Acara dan Acara Lanjutan. Pemetaan umum meliputi:
- SQL:BatchSelesai -> sql_batch_selesai
- SQL:BatchStarting -> sql_batch_starting
- SQL:StmtCompleted -> pernyataan_sql_selesai
- SQL:StmtStarting -> sql_statement_starting
- Grafik Kebuntuan -> xml_deadlock_report
- Masuk Audit -> masuk
- Audit Keluar -> keluar
14.2 Mengonversi Definisi Jejak
Konversi yang sudah ada SQL Server Profiler melacak ke sesi Peristiwa yang Diperpanjang dengan mengidentifikasi peristiwa yang setara dan mengonfigurasi predikat yang sesuai. SSMS menyediakan bantuan untuk konversi umum.
Tinjau filter jejak dan ubah menjadi predikat Peristiwa yang Diperluas. Tindakan dalam Peristiwa yang Diperluas menggantikan kolom jejak dari SQL Server Profiler.
14.3 Perbandingan Kinerja
Extended Events memberikan kinerja yang jauh lebih baik daripada SQL Server Profiler. Studi benchmark menunjukkan Extended Events mengonsumsi lebih sedikit siklus CPU dan berdampak lebih kecil pada throughput transaksi.
Extended Events menggunakan pemrosesan asinkron dan manajemen memori yang dioptimalkan, sementara SQL Server Profiler mengandalkan penangkapan peristiwa sinkron yang memblokir hingga pemrosesan jejak selesai.
15. Kesimpulan
15.1 Ringkasan Konsep Utama
SQL Server Extended Events menyediakan kerangka kerja yang kuat dan ringan untuk memantau dan memecahkan masalah SQL ServerArsitektur tersebut terdiri dari peristiwa, tindakan, predikat, target, dan sesi yang bekerja sama untuk menangkap aktivitas server yang relevan.
Sesi dapat dibuat menggunakan SSMS atau T-SQL, menawarkan fleksibilitas untuk pemecahan masalah ad-hoc dan pemantauan otomatis. Beberapa tipe target mendukung pendekatan analisis yang berbeda, mulai dari pemantauan waktu nyata dengan ring_buffer hingga analisis historis dengan event_file.
Extended Events memberikan kinerja yang lebih unggul dibandingkan dengan SQL Server Profiler sekaligus menyediakan kemampuan pemantauan yang lebih komprehensif. Sistem ini memungkinkan administrator dan pengembang basis data untuk mendiagnosis masalah, mengoptimalkan kinerja, meningkatkan keamanan, dan menjaga kepatuhan.
15.2 Langkah Berikutnya dan Sumber Daya Tambahan
Untuk terus mengembangkan Anda SQL Server Keahlian XEvents:
- Terapkan Extended Events di lingkungan pengujian untuk mendapatkan pengalaman langsung
- Tinjau dokumentasi Microsoft untuk katalog peristiwa lengkap dan referensi sintaksis terperinci
- Ikuti seminar SQL Server forum komunitas untuk belajar dari pengalaman orang lain
- Jelajahi skenario lanjutan seperti paket khusus dan integrasi dengan platform pemantauan
- Kembangkan pustaka templat sesi untuk skenario pemantauan umum.
16 Bagian FAQ
T: Apa itu SQL Server Acara yang Diperpanjang?
A: SQL Server Extended Events adalah sistem pemantauan kinerja ringan yang terintegrasi ke dalam SQL Server Mesin Basis Data yang menangkap informasi terperinci tentang operasi server dengan overhead minimal.
T: Apa perbedaan Extended Events dengan SQL Server Profiler?
A: Extended Events memberikan kinerja yang lebih baik, overhead yang lebih rendah, dan konfigurasi yang lebih fleksibel dibandingkan SQL Server Profiler. SQL Server Profiler tidak lagi digunakan, dan Microsoft menyarankan penggunaan Extended Events untuk semua tugas pemantauan.
T: Apakah Acara yang Diperpanjang dapat memengaruhi SQL Server pertunjukan?
J: Jika dikonfigurasi dengan benar dengan predikat dan batasan sumber daya yang sesuai, Peristiwa yang Diperpanjang memiliki dampak minimal terhadap kinerja. Konfigurasi yang buruk tanpa pemfilteran dapat memengaruhi kinerja.
T: Izin apa saja yang diperlukan untuk membuat sesi Extended Event?
A: Anda memerlukan izin ALTER ANY EVENT SESSION untuk sesi yang cakupannya terbatas pada server atau izin CONTROL pada basis data untuk sesi yang cakupannya terbatas pada basis data.
T: Bagaimana cara melihat data Peristiwa yang Diperpanjang?
A: Gunakan SQL Server Penampil data langsung Management Studio, kueri file peristiwa dengan sys.fn_xe_file_target_read_file, atau kueri data buffer cincin melalui DMV.
T: Dapatkah Extended Events mendeteksi kerusakan basis data?
A: Ya, Peristiwa Diperpanjang dapat menangkap kesalahan terkait korupsi (823, 824, 825) dan peristiwa halaman yang mencurigakan, memberikan peringatan dini untuk potensi masalah korupsi.
T: Apa perbedaan antara peristiwa, tindakan, dan predikat?
A: Peristiwa adalah kejadian yang ingin Anda pantau. Tindakan menambahkan informasi tambahan pada peristiwa yang telah direkam. Predikat menyaring peristiwa berdasarkan kondisi untuk mengurangi volume data.
T: Bagaimana cara memantau kueri dari aplikasi atau basis data tertentu?
A: Gunakan predikat dalam konfigurasi acara Anda untuk memfilter berdasarkan database_name, client_app_name, atau bidang relevan lainnya.
T: Target apa yang harus saya gunakan untuk Extended Events?
A: Gunakan event_file untuk penyimpanan persisten dan analisis historis, ring_buffer untuk pemantauan waktu nyata dengan overhead rendah, event_counter untuk pelacakan frekuensi sederhana, dan histogram untuk analisis distribusi.
T: Apakah Extended Events tersedia di Azure SQL Database?
A: Ya, Azure SQL Database mendukung Peristiwa Diperluas dalam cakupan basis data dengan file peristiwa yang disimpan di Azure Blob Storage.
T: Bagaimana cara memecahkan masalah sesi Extended Events yang tidak merekam data?
A: Verifikasi bahwa sesi telah dimulai, periksa apakah predikat tidak memfilter semua peristiwa, konfirmasikan konfigurasi target, dan tinjau izin menggunakan DMV sistem.
T: Dapatkah saya mengotomatiskan manajemen Extended Events?
A: Ya, gunakan SQL Server Tugas agen meliputi memulai/menghentikan sesi, menganalisis berkas peristiwa, menerapkan kebijakan retensi, dan menanggapi kondisi yang terdeteksi.
Referensi
- Panduan Singkat: Extended Events di SQL Server – Microsoft Learn
- Ikhtisar Acara yang Diperpanjang – Microsoft Learn
- SQL Server Sesi Acara yang Diperpanjang – Microsoft Learn
- Target untuk Extended Events di SQL Server – Microsoft Learn
- SQL Server Mesin Acara yang Diperluas – Microsoft Learn
- SQL Server Profiler: Panduan Lengkap
- DBCC CHECKDB: Panduan Lengkap
- DataNumen SQL Recovery
tentang Penulis
Yuan Sheng adalah administrator basis data senior (DBA) dengan lebih dari 10 tahun pengalaman di SQL Server lingkungan dan manajemen basis data perusahaan. Ia telah berhasil menyelesaikan ratusan skenario pemulihan basis data di berbagai organisasi jasa keuangan, layanan kesehatan, dan manufaktur.
Yuan mengkhususkan diri dalam SQL Server pemulihan basis data, solusi ketersediaan tinggidan optimasi kinerja. Pengalaman praktisnya yang luas mencakup pengelolaan basis data multi-terabyte, implementasi Grup Ketersediaan Selalu Aktifserta mengembangkan strategi pencadangan dan pemulihan otomatis untuk sistem bisnis yang sangat penting.
Melalui keahlian teknis dan pendekatan praktisnya, Yuan berfokus pada pembuatan panduan komprehensif yang membantu administrator basis data dan profesional TI memecahkan masalah kompleks SQL Server tantangan secara efisien. Dia selalu mengikuti perkembangan terbaru SQL Server rilis dan teknologi basis data Microsoft yang terus berkembang, secara berkala menguji skenario pemulihan untuk memastikan rekomendasinya mencerminkan praktik terbaik di dunia nyata.
Memiliki pertanyaan tentang SQL Server pemulihan atau butuh panduan pemecahan masalah basis data tambahan? Yuan menyambut masukan dan saran untuk meningkatkan sumber daya teknis ini.

















