Bagikan melalui


Membuat sesi peristiwa dengan target ring_buffer dalam memori

Berlaku untuk:Azure SQL DatabaseAzure SQL Managed Instance

Langkah-langkah tingkat tinggi dalam panduan ini adalah:

  1. Membuat dan memulai sesi peristiwa dengan ring_buffer target
  2. Menampilkan data peristiwa yang diambil sebagai XML
  3. 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.

Screenshot of the New Session SSMS dialog showing the event selection page with the sql_batch_starting event selected.

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.

Screenshot of the New Session SSMS dialog showing the data storage selection page with a ring_buffer target selected.

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;