Membuat sesi peristiwa dengan target ring_buffer dalam memori
Berlaku untuk: Azure SQL Database Azure SQL Managed Instance
Langkah-langkah tingkat tinggi dalam panduan ini adalah:
- Membuat dan memulai sesi peristiwa dengan
ring_buffer
target - Menampilkan data peristiwa yang diambil sebagai XML
- Menampilkan data peristiwa yang diambil sebagai himpunan baris relasional
ring_buffer
Dengan target, langkah-langkahnya lebih sederhana daripada dengan event_file
target karena Anda tidak perlu menyimpan data peristiwa di Azure Storage.
Membuat dan memulai sesi peristiwa dengan target ring_buffer
Untuk membuat sesi peristiwa baru di SQL Server Management Studio (SSMS), perluas node Extended Events . Simpul ini berada di bawah folder database di Azure SQL Database, dan di bawah folder Manajemen di Azure SQL Managed Instance. Klik kanan pada folder Sesi , dan pilih Sesi Baru.... Pada halaman Umum , masukkan nama untuk sesi, yang ada example-session
dalam contoh ini. Pada halaman Peristiwa , pilih satu atau beberapa peristiwa untuk ditambahkan ke sesi. Dalam contoh ini, kami memilih sql_batch_starting
peristiwa.
Pada halaman Penyimpanan Data, pilih ring_buffer
sebagai jenis target. Untuk menghemat memori, kami sarankan Anda menyimpan jumlah peristiwa ke angka kecil (1.000 secara default), dan untuk mengatur memori buffer maksimum ke 1 MB atau kurang. Untuk detailnya, lihat target ring_buffer.
Sekarang setelah sesi dikonfigurasi, Anda dapat secara opsional memilih tombol Skrip untuk membuat skrip T-SQL sesi untuk menyimpannya nanti. Berikut adalah skrip untuk sesi contoh kami:
CREATE EVENT SESSION [example-session] ON DATABASE
ADD EVENT sqlserver.sql_batch_starting
ADD TARGET package0.ring_buffer(SET max_memory=(1024))
GO
Pilih OK untuk membuat sesi.
Menampilkan data sesi sebagai XML
Di Object Explorer, perluas folder Sesi untuk melihat sesi peristiwa yang Anda buat. Secara default, sesi tidak dimulai saat dibuat. Untuk memulai sesi, klik kanan pada nama sesi, dan pilih Mulai Sesi. Anda nantinya dapat menghentikannya dengan memilih Hentikan Sesi secara serupa, setelah sesi berjalan.
Karena batch T-SQL dijalankan dalam database ini atau instans terkelola, sesi menulis peristiwa dalam buffer memori. Karena ukuran buffer memori terbatas, setelah semua memori digunakan, peristiwa yang lebih lama dibuang untuk memberi ruang bagi peristiwa yang lebih baru.
Di Object Explorer, perluas sesi untuk melihat package0.ring_buffer
target, dan klik dua kali pada target. Anda juga bisa mengklik kanan dan memilih Tampilkan Data Target.... Ini membuka kisi dengan fragmen XML yang diperlihatkan. Pilih fragmen XML ini untuk melihat dokumen XML yang mewakili konten buffer memori.
Baris pertama dokumen XML menjelaskan sesi dan metadata target:
<RingBufferTarget truncated="0" processingTime="0" totalEventsProcessed="17" eventCount="17" droppedCount="0" memoryUsed="32070">
Dalam contoh ini, kita melihat bahwa 17 peristiwa diproses oleh ring_buffer
target. Tidak ada peristiwa yang dihilangkan karena memori buffer tidak habis, dan jumlah maksimum peristiwa yang kami konfigurasi (1.000) belum tercapai.
Tip
Perhatikan truncated
atribut . Jika diatur ke 1
, itu berarti bahwa representasi XML dari buffer memori tidak menampilkan seluruh konten buffer. Untuk informasi selengkapnya, lihat target ring_buffer.
Dokumen XML lainnya berisi peristiwa. Representasi dari satu peristiwa di XML mungkin terlihat seperti ini:
<event name="sql_batch_starting" package="sqlserver" timestamp="2023-10-18T17:43:34.079Z">
<data name="batch_text">
<type name="unicode_string" package="package0"></type>
<value><![CDATA[SELECT
'DatabaseXEStore[@Name=' + quotename(CAST(db_name() AS sysname),'''') +' and @ServerName=' + quotename(CAST(SERVERPROPERTY('servername') AS sysname),'''') + ']' AS [Urn],
CAST(db_name() AS sysname) AS [Name],
CAST(SERVERPROPERTY('servername') AS sysname) AS [ServerName],
(SELECT count(*) FROM sys.dm_xe_database_sessions) AS [RunningSessionCount]]]></value>
</data>
</event>
Di sini, value
atribut berisi batch T-SQL (satu kueri dalam contoh ini).
Menampilkan data sesi sebagai kumpulan baris relasional
Untuk melihat data peristiwa dari ring_buffer
target dalam kumpulan baris relasional, Anda perlu menulis kueri T-SQL yang menggunakan ekspresi XQuery untuk mengonversi XML ke data relasional.
Berikut adalah contoh untuk sesi yang kami buat, menampilkan peristiwa terbaru terlebih dahulu:
WITH
/* An XML document representing memory buffer contents */
RingBuffer AS
(
SELECT CAST(xst.target_data AS xml) AS TargetData
FROM sys.dm_xe_database_session_targets AS xst
INNER JOIN sys.dm_xe_database_sessions AS xs
ON xst.event_session_address = xs.address
WHERE xs.name = N'example-session'
),
/* A row for each event in the buffer, represented as an XML fragment */
EventNode AS
(
SELECT CAST(NodeData.query('.') AS xml) AS EventInfo
FROM RingBuffer AS rb
CROSS APPLY rb.TargetData.nodes('/RingBufferTarget/event') AS n(NodeData)
)
/* A relational rowset formed by using the XQuery value method */
SELECT EventInfo.value('(event/@timestamp)[1]','datetimeoffset') AS timestamp,
EventInfo.value('(event/@name)[1]','sysname') AS event_name,
EventInfo.value('(event/data/value)[1]','nvarchar(max)') AS sql_batch_text
FROM EventNode
ORDER BY timestamp DESC;