BUAT SESI DIAGNOSTIK (Transact-SQL)

Berlaku untuk:Analytics Platform System (PDW)

Sesi diagnostik memungkinkan Anda menyimpan informasi diagnostik terperinci yang ditentukan pengguna tentang performa sistem atau kueri.

Sesi diagnostik biasanya digunakan untuk men-debug performa untuk kueri tertentu, atau untuk memantau perilaku komponen appliance tertentu selama operasi appliance.

Note

Anda harus terbiasa dengan XML untuk menggunakan sesi diagnostik.

Syntax

-- Creating a new diagnostics session:
CREATE DIAGNOSTICS SESSION diagnostics_name AS N' { <session_xml> } ';

<session_xml>::
<Session>
   [ <MaxItemCount>max_item_count_num</MaxItemCount> ]
   [ <Filter>
      { <Event Name = "event_name"/>
         [ <Where><filter_property_name Name = "value" ComparisonType = "comp_type"/></Where> ] [ , ...n ]
      } [ , ...n ]
   </Filter> ]
   <Capture>
      <Property Name = "property_name"/> [ , ...n ]
   </Capture>
<Session>

-- Retrieving results for a diagnostics session:
SELECT * FROM master.sysdiag.diagnostics_name ;

-- Removing results for a diagnostics session:
DROP DIAGNOSTICS SESSION diagnostics_name ;

Argumen

diagnostics_name

Nama sesi diagnostik. Nama sesi diagnostik hanya dapat menyertakan karakter a-z, A-Z, dan 0-9. Selain itu, nama sesi diagnostik harus dimulai dengan karakter. diagnostics_name dibatasi hingga 127 karakter.

max_item_count_num

Jumlah peristiwa yang akan dipertahankan dalam tampilan. Misalnya, jika 100 ditentukan, 100 peristiwa terbaru yang cocok dengan kriteria filter dipertahankan ke sesi diagnostik. Jika kurang dari 100 peristiwa yang cocok ditemukan, sesi diagnostik berisi kurang dari 100 peristiwa. max_item_count_num harus minimal 100 dan kurang dari atau sama dengan 100.000.

event_name

Menentukan peristiwa aktual yang akan dikumpulkan dalam sesi diagnostik. event_name adalah salah satu peristiwa yang tercantum dalam sys.pdw_diag_events di mana sys.pdw_diag_events.is_enabled='True'.

filter_property_name

Nama properti untuk membatasi hasil. Misalnya, jika Anda ingin membatasi berdasarkan ID sesi, filter_property_name harus SessionId. Lihat argumen property_name untuk daftar nilai potensial untuk filter_property_name.

nilai

Nilai yang akan dievaluasi terhadap filter_property_name. Jenis nilai harus cocok dengan jenis properti. Misalnya, jika jenis properti desimal, jenis nilai harus desimal.

comp_type

Jenis perbandingan. Nilai potensial adalah: Equals, , EqualsOrLessThanEqualsOrGreaterThan, GreaterThan, LessThan, NotEquals, Contains, dan RegEx.

property_name

Properti yang terkait dengan peristiwa. Nama properti dapat menjadi bagian dari tag pengambilan, atau digunakan sebagai bagian dari kriteria pemfilteran.

Nama properti Deskripsi
UserName Nama pengguna (masuk).
SessionId ID sesi.
QueryId ID kueri.
CommandType Jenis perintah.
CommandText Teks dalam perintah yang diproses.
OperationType Jenis operasi untuk peristiwa tersebut.
Duration Durasi peristiwa.
SPID ID sesi tersebut.

Remarks

Setiap pengguna diizinkan maksimal 10 sesi diagnostik bersamaan. Lihat sys.pdw_diag_sessions untuk daftar sesi Anda saat ini, dan hilangkan sesi yang tidak perlu menggunakan DROP DIAGNOSTICS SESSION.

Sesi diagnostik terus mengumpulkan metadata hingga dihilangkan.

Permissions

Memerlukan ALTER SERVER STATE izin.

Penguncian

Mengambil kunci bersama pada tabel Sesi Diagnostik.

Examples

A. Membuat sesi diagnostik

Contoh ini membuat sesi diagnostik untuk merekam metrik performa mesin database. Contoh membuat sesi diagnostik yang mendengarkan Kueri Mesin yang menjalankan/mengakhiri peristiwa dan peristiwa DMS pemblokiran. Apa yang dikembalikan adalah teks perintah, nama mesin, ID permintaan (ID kueri), dan sesi tempat peristiwa dibuat.

CREATE DIAGNOSTICS SESSION MYDIAGSESSION AS N'
<Session>
   <MaxItemCount>100</MaxItemCount>
   <Filter>
      <Event Name="EngineInstrumentation:EngineQueryRunningEvent" />
      <Event Name="DmsCoreInstrumentation:DmsBlockingQueueEnqueueBeginEvent" />
      <Where>
         <SessionId Value="381" ComparisonType="NotEquals" />
      </Where>
   </Filter>
   <Capture>
      <Property Name="Query.CommandText" />
      <Property Name="MachineName" />
      <Property Name="Query.QueryId" />
      <Property Name="Alias" />
      <Property Name="Duration" />
      <Property Name="Session.SessionId" />
   </Capture>
</Session>';

Setelah pembuatan sesi diagnostik, jalankan kueri.

SELECT COUNT(EmployeeKey)
FROM AdventureWorksPDW2012..FactSalesQuota;

Kemudian lihat hasil sesi diagnostik dengan memilih dari skema sysdiag.

SELECT * FROM master.sysdiag.MYDIAGSESSION;

Skema sysdiag berisi tampilan yang diberi nama sesi diagnostik Anda.

Untuk melihat hanya aktivitas untuk koneksi Anda, tambahkan Session.SPID properti dan tambahkan WHERE [Session.SPID] = @@spid; ke kueri.

Setelah selesai dengan sesi diagnostik, letakkan menggunakan DROP DIAGNOSTICS perintah .

DROP DIAGNOSTICS SESSION MYDIAGSESSION;

B. Sesi diagnostik alternatif

Contoh kedua dengan properti yang sedikit berbeda.

-- Determine the session_id of your current session
SELECT TOP 1 session_id();

-- Replace <session_number> in the code below with the numbers in your session_id
CREATE DIAGNOSTICS SESSION PdwOptimizationDiagnostics AS N'
<Session>
   <MaxItemCount>100</MaxItemCount>
   <Filter>
      <Event Name="EngineInstrumentation:MemoGenerationBeginEvent" />
      <Event Name="EngineInstrumentation:MemoGenerationEndEvent" />
      <Event Name="DSQLInstrumentation:OptimizationBeginEvent" />
      <Event Name="DSQLInstrumentation:OptimizationEndEvent" />
      <Event Name="DSQLInstrumentation:BuildRelOpContextTreeBeginEvent" />
      <Event Name="DSQLInstrumentation:PostPlanGenModifiersEndEvent" />
      <Where>
         <SessionId Value="<session_number>" ComparisonType="Equals" />
      </Where>
   </Filter>
   <Capture>
      <Property Name="Session.SessionId" />
      <Property Name="Query.QueryId" />
      <Property Name="Query.CommandText" />
      <Property Name="Name" />
      <Property Name="DateTimePublished" />
      <Property Name="DateTimePublished.Ticks" />
  </Capture>
</Session>';

Jalankan kueri, seperti:

USE ssawPDW;
GO

SELECT * FROM dbo.FactFinance;

Kueri berikut mengembalikan waktu otorisasi:

SELECT *
FROM master.sysdiag.PdwOptimizationDiagnostics
ORDER BY DateTimePublished;

Setelah selesai dengan sesi diagnostik, letakkan menggunakan DROP DIAGNOSTICS perintah .

DROP DIAGNOSTICS SESSION PdwOptimizationDiagnostics;