CREATE DIAGNOSTICS SESSION (Transact-SQL)

Si applica a:Piattaforma di strumenti analitici (PDW)

Le sessioni di diagnostica consentono di salvare informazioni di diagnostica dettagliate definite dall'utente sulle prestazioni di sistema o di query.

Le sessioni di diagnostica vengono in genere usate per eseguire il debug delle prestazioni per una query specifica o per monitorare il comportamento di un componente dell'appliance specifico durante l'operazione dell'appliance.

Note

È necessario avere familiarità con XML per usare le sessioni di diagnostica.

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 ;

Argomenti

diagnostics_name

Nome della sessione di diagnostica. I nomi di sessione di diagnostica possono includere caratteri a-z, A-Z e solo 0-9. Inoltre, i nomi delle sessioni di diagnostica devono iniziare con un carattere. diagnostics_name è limitato a 127 caratteri.

max_item_count_num

Numero di eventi da rendere persistenti in una visualizzazione. Ad esempio, se si specifica 100 eventi, i 100 eventi più recenti corrispondenti ai criteri di filtro vengono mantenuti nella sessione di diagnostica. Se vengono trovati meno di 100 eventi corrispondenti, la sessione di diagnostica contiene meno di 100 eventi. max_item_count_num deve essere almeno 100 e minore o uguale a 100.000.

event_name

Definisce gli eventi effettivi da raccogliere nella sessione di diagnostica. event_name è uno degli eventi elencati in sys.pdw_diag_events dove sys.pdw_diag_events.is_enabled='True'.

filter_property_name

Nome della proprietà su cui limitare i risultati. Ad esempio, se si vuole limitare in base all'ID sessione, filter_property_name deve essere SessionId. Vedere l'argomento property_name per un elenco di valori potenziali per filter_property_name.

valore

Valore da valutare in base al filter_property_name. Il tipo di valore deve corrispondere al tipo di proprietà. Ad esempio, se il tipo di proprietà è decimale, il tipo di valore deve essere decimale.

comp_type

Tipo di confronto. I valori potenziali sono: Equals, EqualsOrLessThanEqualsOrGreaterThan, GreaterThan, LessThan, NotEquals, , Containse RegEx.

property_name

Proprietà correlata all'evento. I nomi delle proprietà possono far parte del tag di acquisizione o usati come parte dei criteri di filtro.

Nome della proprietà Description
UserName Nome utente (account di accesso).
SessionId ID sessione.
QueryId ID query.
CommandType Tipo di comando.
CommandText Testo all'interno di un comando elaborato.
OperationType Tipo di operazione per l'evento.
Duration Durata dell'evento.
SPID L’ID della sessione.

Remarks

A ogni utente è consentito un massimo di 10 sessioni di diagnostica simultanee. Vedere sys.pdw_diag_sessions per un elenco delle sessioni correnti ed eliminare le sessioni non necessarie usando DROP DIAGNOSTICS SESSION.

Le sessioni di diagnostica continuano a raccogliere i metadati fino a quando non vengono eliminati.

Permissions

È necessaria l'autorizzazione ALTER SERVER STATE.

Bloccaggio

Accetta un blocco condiviso nella tabella Sessioni di diagnostica.

Examples

A. Creare una sessione di diagnostica

In questo esempio viene creata una sessione di diagnostica per registrare le metriche delle prestazioni del motore di database. Nell'esempio viene creata una sessione di diagnostica in ascolto degli eventi di esecuzione/fine di Query motore e di un evento dms di blocco. Ciò che viene restituito è il testo del comando, il nome del computer, l'ID richiesta (ID query) e la sessione in cui è stato creato l'evento.

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

Dopo la creazione della sessione di diagnostica, eseguire una query.

SELECT COUNT(EmployeeKey)
FROM AdventureWorksPDW2012..FactSalesQuota;

Visualizzare quindi i risultati della sessione di diagnostica selezionando dallo schema sysdiag.

SELECT * FROM master.sysdiag.MYDIAGSESSION;

Lo schema sysdiag contiene una vista denominata nome della sessione di diagnostica.

Per visualizzare solo l'attività per la connessione, aggiungere la Session.SPID proprietà e aggiungere WHERE [Session.SPID] = @@spid; alla query.

Al termine della sessione di diagnostica, eliminarla usando il DROP DIAGNOSTICS comando .

DROP DIAGNOSTICS SESSION MYDIAGSESSION;

B. Sessione di diagnostica alternativa

Secondo esempio con proprietà leggermente diverse.

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

Eseguire una query, ad esempio:

USE ssawPDW;
GO

SELECT * FROM dbo.FactFinance;

La query seguente restituisce l'intervallo di autorizzazione:

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

Al termine della sessione di diagnostica, eliminarla usando il DROP DIAGNOSTICS comando .

DROP DIAGNOSTICS SESSION PdwOptimizationDiagnostics;