Bagikan sekarang:
Daftar Isi menyembunyikan

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:

  1. Open SQL Server Studio Manajemen dan terhubung ke SQL Server contoh.
  2. Di Object Explorer, perluas Pengelolaan -> Acara yang Diperpanjang.
  3. Node Peristiwa Diperpanjang berisi Sesi ke Paket Exklusif folder untuk mengelola konfigurasi pemantauan Anda.

Akses antarmuka Acara Diperpanjang di SQL Server Studio Manajemen.

4.3 Buat Sesi Baru

Untuk membuat sesi baru:

    1. Klik kanan pada Sesi folder di bawah Acara yang Diperpanjang.
    2. Pilih Sesi Baru untuk membuka dialog konfigurasi. Konten berikut akan menggunakan metode ini untuk membuat sesi baru.

Buat Sesi Baru Acara yang Diperpanjang di SQL Server Studio Manajemen.

Catatan: Panduan Sesi Baru juga tersedia untuk pengalaman yang lebih terpandu.

4.3.1 Konfigurasi Halaman Umum

pada Umum halaman, konfigurasikan properti sesi dasar:

  1. Masukkan nama sesi di Nama sesi bidang. Gunakan nama deskriptif yang menunjukkan tujuan pemantauan.
  2. Secara opsional pilih Mulai sesi acara saat server diny启动. untuk mengaktifkan aktivasi sesi otomatis.
  3. Templat sesi default adalah KosongAnda dapat menggunakan templat lain jika menggunakan konfigurasi yang telah ditentukan sebelumnya.

Halaman umum sesi Acara Diperpanjang di SQL Server Studio Manajemen.

4.3.2 Pengaturan Halaman Acara

The Events Halaman ini memungkinkan Anda memilih peristiwa mana yang akan dipantau:

  1. Pilih Events halaman dari kiri Pilih satu halaman panel.
  2. Dalam majalah Perpustakaan acara, telusuri acara yang tersedia atau gunakan fungsi pencarian.
  3. Filter peristiwa dengan mengetikkan kata kunci seperti “sql_statement_completed” untuk menemukan peristiwa yang relevan.
  4. Pilih peristiwa yang diinginkan, seperti sql_statement_completed.
  5. Klik tombol panah kanan untuk memindahkan acara ke Acara terpilih daftar.

Halaman Acara dari sesi Acara Diperpanjang di SQL Server Studio Manajemen.

4.3.3 Konfigurasi Penyimpanan Data

The Penyimpanan Data halaman menentukan di mana data peristiwa disimpan:

  1. Pilih Penyimpanan Data halaman dari kiri Pilih satu halaman panel.
  2. Dalam majalah Target area, pilih jenis target dari menu tarik-turun.

Halaman penyimpanan data sesi Acara Diperpanjang di SQL Server Studio Manajemen.

(1) target berkas peristiwa

Target event_file menyimpan data ke file disk dengan ekstensi .xel:

  1. Pilih berkas_peristiwa dari menu tarik-turun tipe target.
  2. Tentukan jalur file, misalnya C:\temp\YourSession_Target.xel.
  3. Konfigurasikan opsi rollover untuk mengelola ruang disk dengan mengatur ukuran file maksimum dan jumlah file.
  4. Target tersebut terus-menerus menulis peristiwa hingga sesi berhenti atau batas penyimpanan tercapai.

Atur target sesi ke event_file di SSMS.

(2) ring_buffer Target

Target ring_buffer menyimpan peristiwa di memori untuk akses cepat tanpa I/O disk:

  1. Pilih penyangga_cincin sebagai tipe target.
  2. Konfigurasikan alokasi memori maksimum untuk buffer.
  3. Pahami bahwa peristiwa lama dibuang saat buffer terisi, sehingga cocok untuk pemantauan aktivitas terkini.

Tetapkan target ke ring_buffer untuk sesi Extended Events di SQL Server Studio Manajemen.

(3) penghitung_kejadian Target

Target `event_counter` hanya menghitung kejadian tanpa menyimpan data detail. Ini memberikan overhead minimal ketika Anda hanya membutuhkan informasi frekuensi.

Tetapkan target ke event_counter untuk sesi Extended Events di SQL Server Studio Manajemen.

(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.

Tetapkan target ke histogram untuk sesi Extended Events di SQL Server Studio Manajemen.

(5) target_pencocokan_pasangan

Target pair_matching mengkorelasikan peristiwa terkait seperti akuisisi dan pelepasan kunci. Hal ini memungkinkan analisis operasi berpasangan dan hubungan waktunya.

Atur target sesi ke pair_matching di SSMS.

TIDAK PERNAH Pengaturan Lanjut

The Advanced halaman menyediakan opsi konfigurasi tingkat sesi:

  1. Pilih Advanced halaman dari kiri Pilih satu halaman panel.
  2. Konfigurasi Mode retensi acara untuk mengendalikan bagaimana peristiwa ditangani di bawah tekanan memori.
  3. set Latensi pengiriman maksimum untuk menyeimbangkan pemrosesan waktu nyata dengan kinerja sistem.
  4. Konfigurasi Ukuran memori maksimum ke Ukuran acara maksimum berdasarkan kebutuhan pemantauan Anda.
  5. Pilih Mode partisi memori untuk mengoptimalkan lingkungan CPU tunggal atau multi-CPU.

Halaman lanjutan sesi di SQL Server Studio Manajemen.

4.4 Mengonfigurasi Filter Peristiwa (Predikat)

Predikat mengurangi volume data dengan memfilter peristiwa berdasarkan kriteria tertentu. Untuk mengonfigurasi filter:

  1. pada Events halaman, pilih peristiwa yang ingin Anda filter, seperti “sql_statement_completed”.
  2. Klik Konfigurasi untuk membuka dialog konfigurasi acara.
    Konfigurasikan acara sesi Acara Diperpanjang di SQL Server Studio Manajemen.
  3. Pilih Filter (Predikat) Tab.
  4. Dalam majalah Bidang tarik-turun, pilih bidang yang ingin difilter, seperti durasi.
  5. Pilih sebuah Operator, seperti ">".
  6. Masuk ke filternya Nilai, seperti 1000000 (1 detik).
  7. Tambahkan lebih banyak kondisi jika perlu.

Konfigurasikan filter (predikat) untuk suatu peristiwa.

4.5 Memilih Bidang Tindakan dan Peristiwa

Untuk setiap peristiwa, Anda dapat memilih data yang akan dikumpulkan:

  1. pada Events halaman, pilih acara yang ingin Anda pilih datanya, seperti “sql_statement_completed”.
  2. Klik Konfigurasi untuk membuka dialog konfigurasi acara.
  3. Pilih Bidang Global (Tindakan) Tab.
  4. Pilih tindakan untuk menambahkan informasi tambahan, seperti nama_database atau nama_aplikasi_klien.
    Konfigurasikan tindakan suatu acara.
  5. Tinjau Bidang Acara bagian untuk melihat bidang mana yang diambil secara otomatis.
  6. Hapus semua bidang yang tidak diperlukan untuk mengurangi volume data.
    Konfigurasikan bidang suatu acara.

4.6 Memulai dan Mengelola Sesi

Setelah mengkonfigurasi sesi Anda, Anda dapat memulainya dan memantau operasinya:

  1. Klik OK untuk membuat sesi.
  2. Di Object Explorer, perluas Sesi untuk melihat sesi baru Anda.
  3. Klik kanan nama sesi dan pilih Mulai Sesi untuk mulai merekam peristiwa.
    Mulai sesi Extended Events di SQL Server Studio Manajemen.
  4. Untuk melihat data langsung, klik kanan sesi dan pilih Tonton Data Langsung.
    Saksikan data langsung sesi Acara Diperpanjang di SQL Server Studio Manajemen.
  5. 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:

  1. Di Object Explorer, perluas Pengelolaan -> Acara yang Diperpanjang -> Sesi.
  2. Klik kanan sesi aktif Anda.
  3. Pilih Tonton Data Langsung untuk membuka penampil data langsung.
    Saksikan data langsung sesi Acara Diperpanjang di SQL Server Studio Manajemen.
  4. Peristiwa akan muncul dalam kisi saat peristiwa itu terjadi.
  5. Klik pada masing-masing peristiwa untuk melihat nilai bidang terperinci di panel detail.
    Saksikan data langsung kejadian, termasuk rincian kejadian.
  6. 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:

  1. Konfigurasi SQL Server Pekerjaan agen untuk menanyakan berkas kejadian pemantauan kerusakan secara berkala.
  2. Bila ditemukan peristiwa kerusakan, jalankan DBCC CHECKDB pada basis data yang terpengaruh.
  3. Kirim peringatan email ke DBA dengan rincian acara dan hasil DBCC CHECKDB.
  4. 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:

  1. Verifikasi bahwa sesi telah dimulai menggunakan sys.dm_xe_sessions.
  2. Periksa predikat untuk memastikan mereka tidak menyaring semua kejadian.
  3. Konfirmasikan bahwa peristiwa sedang berjalan dengan menghapus filter untuk sementara.
  4. Tinjau izin untuk memastikan Anda memiliki akses untuk melihat data sesi.
  5. 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:

  1. Tambahkan predikat untuk mengurangi volume peristiwa.
  2. Hapus tindakan yang tidak perlu yang mengumpulkan data tambahan.
  3. Tingkatkan MAX_DISPATCH_LATENCY untuk mengurangi frekuensi penulisan.
  4. Ubah EVENT_RETENTION_MODE menjadi ALLOW_SINGLE_EVENT_LOSS.
  5. 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:

  1. Verifikasi SQL Server Akun layanan memiliki izin tulis ke direktori target.
  2. Pastikan tersedia ruang disk yang cukup.
  3. Periksa apakah jalur yang ditentukan ada dan dapat diakses.
  4. 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:

  1. Pada dialog Sesi Baru, klik Contoh dropdown.
  2. Pilih dari templat yang tersedia seperti Pelacakan Detail Kueri atau Kesehatan Sistem.
  3. 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


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.

Bagikan sekarang: