Peristiwa yang Diperluas di Azure SQL Database dan Azure SQL Managed Instance

Berlaku untuk:Azure SQL DatabaseAzure SQL Managed Instance

Untuk pengantar Extended Events, lihat:

Rangkaian fitur, fungsionalitas, dan skenario penggunaan untuk Extended Events di Azure SQL Database dan Azure SQL Managed Instance mirip dengan apa yang tersedia di SQL Server. Perbedaan utama adalah:

  • Target event_file selalu menggunakan blob di Azure Storage, bukan file pada disk.
  • Di Azure SQL Database, sesi peristiwa selalu dilingkup database. Ini berarti bahwa:
    • Sesi peristiwa dalam satu database tidak dapat mengumpulkan peristiwa dari database lain.
    • Peristiwa harus terjadi dalam konteks database pengguna untuk disertakan dalam sesi.
  • Di Azure SQL Managed Instance, Anda dapat membuat sesi peristiwa cakupan server dan cakupan database. Sebaiknya gunakan sesi peristiwa cakupan server untuk sebagian besar skenario.

Mulai

Ada dua contoh untuk membantu Anda memulai Extended Events di Azure SQL Database dan Azure SQL Managed Instance dengan cepat:

  • Buat sesi dengan target event_file di Azure Storage. Contoh ini menunjukkan kepada Anda cara mengambil data peristiwa dalam file (blob) di Azure Storage menggunakan event_file target. Gunakan ini jika Anda perlu mempertahankan data peristiwa yang diambil, atau jika Anda ingin menggunakan penampil peristiwa di SQL Server Management Studio (SSMS) untuk menganalisis data yang diambil.
  • Buat sesi dengan target ring_buffer dalam memori. Contoh ini menunjukkan kepada Anda cara mengambil peristiwa terbaru dari sesi peristiwa dalam memori menggunakan ring_buffer target. Gunakan ini sebagai cara cepat untuk melihat peristiwa terbaru selama investigasi ad hoc atau pemecahan masalah, tanpa harus menyimpan data peristiwa yang diambil.

Extended Events dapat digunakan untuk memantau replika baca-saja. Untuk informasi selengkapnya, lihat Membaca kueri pada replika.

Praktik terbaik

Adopsi praktik terbaik berikut untuk menggunakan Extended Events di Azure SQL Database dan Azure SQL Managed Instance dengan andal dan tanpa memengaruhi kesehatan mesin database dan performa beban kerja.

  • Jika Anda menggunakan event_file target:
    • Jangan atur opsi ke EVENT_RETENTION_MODENO_EVENT_LOSS. Ini dapat menyebabkan batas waktu koneksi dan penundaan failover di antara masalah lain, memengaruhi database atau ketersediaan instans terkelola.
    • Gunakan akun penyimpanan di wilayah Azure yang sama dengan database atau instans terkelola tempat Anda membuat sesi peristiwa.
    • Sejajarkan redundansi akun penyimpanan dengan redundansi database, kumpulan elastis, atau instans terkelola. Untuk sumber daya yang berlebihan secara lokal, gunakan LRS, GRS, atau RA-GRS. Untuk sumber daya zona redundan , gunakan ZRS, GZRS, atau RA-GZRS. Lihat Redundansi Azure Storage untuk detailnya.
    • Jangan gunakan tingkat akses blob selain .Hot
  • Jika Anda ingin membuat sesi peristiwa yang terus berjalan yang dimulai secara otomatis setelah setiap Mesin Database dimulai ulang (misalnya, setelah failover atau peristiwa pemeliharaan), sertakan opsi STARTUP_STATE = ON sesi peristiwa dalam pernyataan atau ALTER EVENT SESSION AndaCREATE EVENT SESSION.
  • Sebaliknya, gunakan STARTUP_STATE = OFF untuk sesi peristiwa jangka pendek seperti yang digunakan dalam pemecahan masalah ad hoc.
  • Di Azure SQL Database, jangan membaca peristiwa kebuntuan dari sesi peristiwa bawaan dl . Jika ada sejumlah besar peristiwa kebuntuan yang dikumpulkan, membacanya dengan fungsi sys.fn_xe_file_target_read_file() dapat menyebabkan kesalahan di luar memori dalam master database. Ini mungkin berdampak pada pemrosesan login dan mengakibatkan pemadaman aplikasi. Untuk cara yang direkomendasikan untuk memantau kebuntuan, lihat Mengumpulkan grafik kebuntuan di Azure SQL Database dengan Acara yang Diperluas.

Target sesi peristiwa

Azure SQL Database dan Azure SQL Managed Instance mendukung target berikut:

  • event_file target. Menulis buffer lengkap ke blob dalam kontainer Azure Storage.
  • ring_buffer target. Menyimpan data peristiwa dalam memori hingga digantikan oleh data peristiwa baru.
  • event_counter target. Menghitung semua peristiwa yang terjadi selama sesi peristiwa yang diperluas.
  • target histogram . Menghitung kemunculan nilai bidang atau tindakan yang berbeda dalam wadah terpisah.
  • event_stream. Aliran data peristiwa ke aplikasi .Net.

Catatan

Target event_stream di Azure SQL Database dan Azure SQL Managed Instance sedang dalam pratinjau.

Perbedaan T-SQL

Saat Anda menjalankan pernyataan CREATE EVENT SESSION, ALTER EVENT SESSION, dan DROP EVENT SESSION di SQL Server dan di Azure SQL Managed Instance, Anda menggunakan klausul .ON SERVER Di Azure SQL Database, Anda menggunakan klausul sebagai gantinya ON DATABASE , karena dalam sesi peristiwa Azure SQL Database tercakup dalam database.

Tampilan katalog Acara yang Diperluas

Extended Events menyediakan beberapa tampilan katalog. Tampilan katalog memberi tahu Anda tentang metadata atau definisi sesi peristiwa. Tampilan ini tidak mengembalikan informasi tentang instans sesi peristiwa aktif.

Nama tampilan katalog Deskripsi
sys.database_event_session_actions Mengembalikan baris untuk tiap-tiap tindakan pada setiap kejadian dalam sebuah sesi kejadian.
sys.database_event_session_events Mengembalikan baris untuk tiap-tiap kejadian pada sebuah sesi kejadian.
sys.database_event_session_fields Mengembalikan baris untuk setiap kolom yang dapat dikustomisasi yang secara eksplisit ditetapkan pada kejadian dan target.
sys.database_event_session_targets Mengembalikan baris untuk setiap target kejadian untuk sebuah sesi kejadian.
sys.database_event_sessions Mengembalikan baris untuk setiap sesi kejadian dalam database.

Tampilan manajemen dinamis Extended Events

Extended Events menyediakan beberapa tampilan manajemen dinamis (DMV). DMV mengembalikan informasi tentang sesi peristiwa yang dimulai .

Nama DMV Deskripsi
sys.dm_xe_database_session_event_actions Mengembalikan informasi tentang tindakan sesi kejadian.
sys.dm_xe_database_session_events Mengembalikan informasi tentang kejadian sesi.
sys.dm_xe_database_session_object_columns Memperlihatkan nilai konfigurasi untuk objek yang terikat pada sebuah sesi.
sys.dm_xe_database_session_targets Mengembalikan informasi tentang target sesi.
sys.dm_xe_database_sessions Mengembalikan baris untuk setiap sesi peristiwa yang berjalan di database saat ini.

DMV umum

Ada DMV Extended Events tambahan yang umum untuk Azure SQL Database, Azure SQL Managed Instance, dan SQL Server:

Peristiwa, tindakan, dan target yang tersedia

Sama seperti di SQL Server, Anda bisa mendapatkan peristiwa, tindakan, dan target yang tersedia menggunakan kueri ini:

SELECT o.object_type,
       p.name AS package_name,
       o.name AS db_object_name,
       o.description AS db_obj_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON p.guid = o.package_guid
WHERE o.object_type IN ('action','event','target')
ORDER BY o.object_type,
         p.name,
         o.name;

Izin

Di Azure SQL Database dan Azure SQL Managed Instance, Extended Events mendukung model izin terperinci. Izin berikut dapat diberikan:

CREATE ANY DATABASE EVENT SESSION
DROP ANY DATABASE EVENT SESSION
ALTER ANY DATABASE EVENT SESSION
ALTER ANY DATABASE EVENT SESSION ADD EVENT
ALTER ANY DATABASE EVENT SESSION DROP EVENT
ALTER ANY DATABASE EVENT SESSION ADD TARGET
ALTER ANY DATABASE EVENT SESSION DROP TARGET
ALTER ANY DATABASE EVENT SESSION ENABLE
ALTER ANY DATABASE EVENT SESSION DISABLE
ALTER ANY DATABASE EVENT SESSION OPTION

Untuk informasi tentang apa yang dikontrol masing-masing izin ini, lihat MEMBUAT SESI PERISTIWA, MENGUBAH SESI PERISTIWA, dan MENGHILANGKAN SESI PERISTIWA.

Semua izin ini disertakan dalam CONTROL izin pada database atau instans terkelola. Di Azure SQL Database, pemilik database (dbo), anggota db_owner peran database, dan administrator server logis memegang izin database CONTROL . Di Azure SQL Managed Instance, anggota sysadmin peran server memegang CONTROL izin pada instans.

Otorisasi dan kontrol kontainer penyimpanan

Saat Anda menggunakan event_file target, data peristiwa disimpan dalam blob dalam kontainer Azure Storage. Mesin Database yang menjalankan sesi peristiwa harus memiliki akses khusus ke kontainer ini. Anda memberikan akses ini dengan membuat token SAS untuk kontainer, dan menyimpan token dalam kredensial.

Di Azure SQL Database, Anda harus menggunakan kredensial cakupan database. Di Azure SQL Managed Instance, gunakan kredensial cakupan server.

Token SAS yang Anda buat untuk kontainer Azure Storage Anda harus memenuhi persyaratan berikut:

  • rwl Memiliki izin (Read, Write, ), List).
  • Memiliki waktu mulai dan waktu kedaluwarsa yang mencakup masa pakai sesi peristiwa.
  • Tidak memiliki batasan alamat IP.

Tata kelola sumber daya

Di Azure SQL Database, konsumsi memori oleh sesi peristiwa yang diperluas dikontrol secara dinamis oleh Mesin Database untuk meminimalkan ketidakcocokan sumber daya.

Ada batasan memori yang tersedia untuk sesi peristiwa:

  • Dalam database tunggal, total memori sesi dibatasi hingga 128 MB.
  • Dalam kumpulan elastis, database individual dibatasi oleh batas database tunggal, dan totalnya tidak boleh melebihi 512 MB.

Jika Anda menerima pesan kesalahan yang mereferensikan batas memori, tindakan korektif yang dapat Anda lakukan adalah:

  • Kurangi jumlah sesi kejadian yang dijalankan secara bersamaan.
  • Menggunakan CREATE pernyataan dan ALTER untuk sesi peristiwa, kurangi jumlah memori yang Anda tentukan dalam MAX_MEMORY klausul untuk sesi tersebut.

Catatan

Di Acara yang Diperluas, MAX_MEMORY klausul muncul dalam dua konteks: saat membuat atau mengubah sesi (pada tingkat sesi), dan saat menggunakan ring_buffer target (pada tingkat target). Batas di atas berlaku untuk memori tingkat sesi.

Ada batasan jumlah sesi peristiwa yang dimulai di Azure SQL Database:

  • Dalam database tunggal, batasnya adalah 100.
  • Dalam kumpulan elastis, batasnya adalah 100 sesi cakupan database per kumpulan.

Di kumpulan elastis yang padat, memulai sesi peristiwa baru yang diperluas mungkin gagal karena kendala memori bahkan ketika jumlah total sesi yang dimulai di bawah 100.

Untuk menemukan total memori yang digunakan oleh sesi peristiwa, jalankan kueri berikut saat tersambung ke database tempat sesi peristiwa dimulai:

SELECT name AS session_name,
       total_buffer_size + total_target_memory AS total_session_memory
FROM sys.dm_xe_database_sessions;

Untuk menemukan total memori sesi peristiwa untuk kumpulan elastis, kueri ini perlu dijalankan di setiap database di kumpulan.