Bagikan melalui


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

Catatan

Anda harus terbiasa dengan XML untuk menggunakan sesi diagnostik.

Sintaks

-- 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 akan dipertahankan ke sesi diagnostik. Jika kurang dari 100 peristiwa yang cocok ditemukan, sesi diagnostik akan 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 property_name di bawah ini untuk daftar nilai potensial untuk filter_property_name.

value
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, EqualsOrGreaterThan, EqualsOrLessThan, GreaterThan, LessThan, NotEquals, Contains, 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.
Durasi Durasi acara.
SPID ID Proses Layanan.

Keterangan

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 akan terus mengumpulkan metadata hingga dihilangkan.

Izin

Memerlukan izin ALTER SERVER STATE.

Penguncian

Mengambil kunci bersama pada tabel Sesi Diagnostik.

Contoh

J. 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 komputer, 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;  

Perhatikan bahwa 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 perintah DROP DIAGNOSTICS .

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 perintah DROP DIAGNOSTICS .

DROP DIAGNOSTICS SESSION PdwOptimizationDiagnostics;