Aracılığıyla paylaş


Bellekte ring_buffer hedefi olan bir olay oturumu oluşturma

Şunlar için geçerlidir: Azure SQL Veritabanı Azure SQL Yönetilen Örneği

Bu kılavuzdaki üst düzey adımlar şunlardır:

  1. Hedefle ring_buffer olay oturumu oluşturma ve başlatma
  2. Yakalanan olay verilerini XML olarak görüntüleme
  3. Yakalanan olay verilerini ilişkisel satır kümesi olarak görüntüleme

Hedefte ring_buffer , olay verilerini Azure Depolama'da depolamanız gerekmediğinden adımlar hedefe göre daha event_file basittir.

ring_buffer hedefiyle olay oturumu oluşturma ve başlatma

SQL Server Management Studio'da (SSMS) yeni bir olay oturumu oluşturmak için Genişletilmiş Olaylar düğümünü genişletin. Bu düğüm, Azure SQL Veritabanı'daki veritabanı klasörünün altında ve Azure SQL Yönetilen Örneği'daki Yönetim klasörünün altındadır. Oturumlar klasörüne sağ tıklayın ve Yeni Oturum... öğesini seçin. Genel sayfasında, oturum için bu örnekteki example-session adı girin. Olaylar sayfasında oturuma eklenecek bir veya daha fazla olayı seçin. Bu örnekte olayı seçtik sql_batch_starting .

sql_batch_starting olayının seçili olduğu olay seçim sayfasını gösteren Yeni Oturum SSMS iletişim kutusunun ekran görüntüsü.

Veri Depolama sayfasında hedef tür olarak seçinring_buffer. Belleği korumak için, olay sayısını küçük bir sayıya (varsayılan olarak 1.000) saklamanızı ve arabellek belleği üst sınırını 1 MB veya daha az olarak ayarlamanızı öneririz. Ayrıntılar için bkz . ring_buffer hedefi.

ring_buffer hedefin seçili olduğu veri depolama seçimi sayfasını gösteren Yeni Oturum SSMS iletişim kutusunun ekran görüntüsü.

Oturum yapılandırıldığına göre, daha sonra kaydetmek üzere oturumun T-SQL betiğini oluşturmak için isteğe bağlı olarak Betik düğmesini seçebilirsiniz. Örnek oturumumuzun betiği şu şekildedir:

CREATE EVENT SESSION [example-session] ON DATABASE
ADD EVENT sqlserver.sql_batch_starting
ADD TARGET package0.ring_buffer(SET max_memory=(1024))
GO

Oturumu oluşturmak için Tamam'ı seçin.

Oturum verilerini XML olarak görüntüleme

oluşturduğunuz olay oturumunu görmek için Nesne Gezgini Oturumlar klasörünü genişletin. Varsayılan olarak, oturum oluşturulduğunda başlatılmaz. Oturumu başlatmak için oturum adına sağ tıklayın ve Oturumu Başlat'ı seçin. Daha sonra, oturum çalıştırıldıktan sonra benzer şekilde Oturumu Durdur'u seçerek durdurabilirsiniz.

T-SQL toplu işlemleri bu veritabanında veya yönetilen örnekte yürütüldükçe, oturum olayları bir bellek arabelleğine yazar. Bellek arabelleğinin boyutu sınırlı olduğundan, tüm bellek kullanıldıktan sonra daha yeni olaylara yer açmak için eski olaylar atılır.

Nesne Gezgini oturumu genişleterek hedefi görün package0.ring_buffer ve hedefe çift tıklayın. Ayrıca sağ tıklayıp Hedef Verileri Görüntüle... seçeneğini belirleyebilirsiniz. Bu, XML parçasının gösterildiği bir kılavuz açar. Bellek arabelleği içeriğini temsil eden bir XML belgesi görmek için bu XML parçasını seçin.

XML belgesinin ilk satırında oturum ve hedef meta veriler açıklanmaktadır:

<RingBufferTarget truncated="0" processingTime="0" totalEventsProcessed="17" eventCount="17" droppedCount="0" memoryUsed="32070">

Bu örnekte hedef tarafından ring_buffer 17 olayın işlendiğini görüyoruz. Arabellek belleği tükenmediğinden ve yapılandırdığımız en fazla olay sayısına (1.000) ulaşılamadığı için hiçbir olay bırakılmadı.

İpucu

Özniteliğine truncated dikkat edin. olarak ayarlandıysa 1, bellek arabelleğinin XML gösteriminin arabellek içeriğinin tamamını göstermediği anlamına gelir. Daha fazla bilgi için bkz . ring_buffer hedef.

XML belgesinin geri kalanı olayları içerir. XML'de tek bir olayın gösterimi şöyle görünebilir:

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

Burada özniteliği T-SQL value toplu işlemini (bu örnekteki tek bir sorgu) içerir.

Oturum verilerini ilişkisel satır kümesi olarak görüntüleme

bir hedeften gelen ring_buffer olay verilerini ilişkisel satır kümesinde görmek için, XML'yi ilişkisel verilere dönüştürmek için XQuery ifadelerini kullanan bir T-SQL sorgusu yazmanız gerekir.

İlk olarak en son olayları görüntüleyen, oluşturduğumuz oturuma bir örnek aşağıda verilmişti:

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;