Condividi tramite


Tipo di agente di raccolta Traccia SQL generico

Il tipo di agente di raccolta Traccia SQL generico utilizza Traccia SQL per monitorare il motore relazionale di SQL Server. I dati di traccia possono provenire da una traccia predefinita o una o più tracce personalizzate. Questo tipo di agente di raccolta è registrato nella vista core.supported_collector_types.

La traccia predefinita, controllata da un'impostazione valida per l'intero server, rimane in esecuzione costante nel server stesso e consente di acquisire gli eventi generali desiderati, che tuttavia non sono in relazione con l'esecuzione individuale del batch. Si tratta di una traccia a basso impatto. È possibile raccogliere qualsiasi evento tramite le tracce personalizzate, che possono avere un impatto basso o elevato a seconda degli eventi selezionati e dell'attività server al momento dell'esecuzione dell'analisi. Nella maggior parte dei casi le tracce personalizzate non rimangono in esecuzione costante.

Il tipo di agente di raccolta Traccia SQL generico esegue una traccia lato server che consente di archiviare dati in un file o in un set di file. I dati di traccia sono ottenuti dai file di traccia utilizzando la funzione di sistema fn_trace_gettable(). I dati vengono elaborati dall'agente di raccolta, se configurato a tale scopo, e quindi caricati sul data warehouse di gestione.

Il tipo di agente di raccolta Traccia SQL generico è configurato per rimuovere i file inutilizzati e conservare una quantità fissa di spazio per i dati di traccia archiviati.

Schema di input di Traccia SQL generico

Nel tipo di agente di raccolta Traccia SQL generico viene utilizzato il seguente schema per i parametri di input.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="DataCollectorType">
  <xs:element name="SqlTraceCollector">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Events">
          <xs:complexType>
            <xs:sequence>
              <xs:element minOccurs="0" maxOccurs="unbounded" name="EventType">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" name="Event">
                      <xs:complexType>
                        <xs:attribute name="id" type="xs:unsignedByte" use="required" />
                        <xs:attribute name="name" type="xs:string" use="required" />
                        <xs:attribute name="columnslist" type="xs:string" use="optional" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="id" type="xs:unsignedByte" use="optional" />
                  <xs:attribute name="name" type="xs:string" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="Filters">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Filter" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:attribute name="columnid" type="xs:unsignedByte" use="required" />
                  <xs:attribute name="columnname" type="xs:string" use="required" />
                  <xs:attribute name="logical_operator" type="xs:string" use="required" />
                  <xs:attribute name="comparison_operator" type="xs:string" use="required" />
                  <xs:attribute name="value" type="xs:string" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="use_default" type="xs:boolean" />
    </xs:complexType>
  </xs:element>
</xs:schema>

Come indicato nello schema, nel tipo di agente di raccolta sono inclusi elementi principali, parametri di stored procedure e colonne speciali.

Elementi principali

  • La definizione della traccia di input contiene un elenco di eventi e un elenco di filtri che definiscono la traccia.

  • Gli eventi sono raggruppati all'interno di un nodo EventType, che corrisponde alla categoria di eventi in SQL Server Profiler.

  • Per il nodo EventType, l'attributo ID deve corrispondere al valore della vista di sistema sys.trace_category. L'attributo name è facoltativo.

  • Per il nodo Event, l'attributo ID deve corrispondere al valore della vista di sistema sys.trace_events. L'attributo del nome è facoltativo.

  • Gli ID vengono utilizzati durante la generazione dello script di avvio della traccia. I nomi sono utilizzati per la leggibilità e il rendering della definizione dell'input nell'interfaccia utente.

  • Nel nodo Event sono contenuti gli attributi seguenti:

    • ID, name. Descritto in precedenza.

    • columnslist. Elenco di ID di colonna separati da virgole da selezionare per l'evento. Se columnslist non viene specificato, vengono incluse tutte le colonne per questo evento.

  • Il nodo Filter consente di definire un filtro applicato alla traccia. Gli attributi hanno il significato seguente:

    • columnid. ID di una colonna alla quale si applica il filtro.

    • columnname. Il nome della colonna identificata da columnid. Viene utilizzato per il rendering.

    • logical_operator. Operatore da applicare tra più filtri sulla stessa colonna. I valori consentiti sono AND e OR.

    • comparison_operator. Operatore da applicare tra la colonna e il valore filtro. I valori consentiti sono: EQ, NE, GT, GE, LT, LE, LIKE e NOTLIKE.

    • value. Valore da utilizzare per il confronto. Si noti che il valore del filtro e l'operatore di confronto devono corrispondere al tipo di colonna a cui viene applicato il filtro. Se ad esempio il tipo di colonna è string, è possibile utilizzare solo gli operatori "LIKE" e "NOTLIKE" e per il valore di filtro sono accettabili solo valori di stringa.

Parametri di stored procedure

I parametri seguenti della stored procedure sp_trace_create sono definiti in base al set raccolta o alle opzioni dell'agente di raccolta.

  • @options. La traccia viene sempre avviata con l'insieme di opzioni di rollover (TRACE_FILE_ROLLOVER).

  • @tracefile. Il percorso dei file di traccia è determinato dalla variabile CollectorTempDir. Il nome del file di traccia viene generato come concatenazione di "DataCollector_" + instanceName + CollectionSetUid + CollectionItemId + ".trc."

  • @maxfilesize. È sempre impostato su 5 megabyte (MB).

  • @stoptime. Non utilizzato.

  • @filecount. Impostato per ricevere l'archiviazione temporanea massima consentita per set di raccolta (in MB). @filecount = limite spazio di archiviazione/5.

Colonne speciali

Per ogni evento vengono fornite colonne aggiuntive, anche se non sono preselezionate nei parametri di input per tale evento. Queste colonne sono:

  • StartTime

  • EndTime

  • EventSequence

  • SPID

Le colonne precedenti identificano l'origine dell'evento e consentono la correlazione degli eventi.

Nell'esempio di codice seguente è illustrato l'utilizzo dello schema di input utilizzato dal tipo di agente di raccolta Traccia SQL generico.

<?xml version="1.0" encoding="utf-8"?>

<ns:SqlTraceCollector xmlns:ns="DataCollectorType" normalize_sql="0" normalize_plans="0" normalize_procedures="0" normalize_connections="0" 
normalize_default="1">

<Events>
<EventType id ="6" name="Performance">
<Event id="58" name="Auto Stats"/>
<Event id="165" name="Performance statistics"/>
<Event id="146" name="Showplan XML Statistics Profile"/>
</EventType>
<EventType id="13" name="TSQL">
<Event id="12" name="SQL:BatchCompleted" columnslist="1, 3, 9, 10, 13, 16, 17, 18"/>
<Event id="13" name="SQL:BatchStarting"/>
<Event id="41" name="SQL:StmtCompleted"/>
<Event id="166" name="SQL:StmtRecompile"/>
</EventType>
<EventType id="20" name="CLR">
<Event id="196" name="Assembly Load"/>
</EventType>
<EventType id="1" name="Cursors">
<Event id="53" name="CursorOpen"/>
<Event id="75" name="CursorRecompile"/>
<Event id="76" name="CursorImplicitConversion"/>
<Event id="78" name="CursorClose"/>
</EventType>
</Events>

<Filters>
<Filter columnid="13" columnname="Duration" logical_operator="AND" comparison_operator="GE" value="1000L"/>
<Filter columnid="10" columnname="ApplicationName" logical_operator="AND" comparison_operator="LIKE" value="Data Collector"/>
<Filter columnid="10" columnname="ApplicationName" logical_operator="AND" comparison_operator="EQ" value="NULL"/>
<Filter columnid="18" columnname="CPU" logical_operator="AND" comparison_operator="EQ" value="20"/>
<Filter columnid="14" columnname="StartTime" logical_operator="AND" comparison_operator="GT" value="2007-02-09 13:40:00"/>
</Filters>

</ns:SqlTraceCollector>

Elaborazione e output

Questa versione del tipo di agente di raccolta Traccia SQL generico supporta il caricamento completo dei dati di traccia che gli eventi di elaborazione hanno acquisito nella traccia predefinita del server.

Caricamento completo dei dati di traccia

Con questo tipo di caricamento dei dati, i dati di traccia vengono caricati senza alcuna elaborazione in un'unica tabella che contiene tutte le colonne di traccia possibili. I dati da più tracce possono essere caricati nella stessa tabella che semplifica l'unione dei dati. Oltre ai dati di traccia, a ogni riga viene aggiunto uno snapshot_id che rende possibile identificare l'origine dei dati e l'ora di traccia.

Di seguito sono elencati alcuni vantaggi offerti dal caricamento completo dei dati di traccia:

  • È disponibile un metodo semplice per trasmettere i dati di traccia dal server a un database, in cui i dati possono essere facilmente sottoposti a query ed elaborati ulteriormente senza dovere aprire la traccia in SQL Server Profiler.

  • Dati da più tracce possono essere uniti e correlati.

  • Non si verifica alcuna perdita di dati della traccia originale. Tutto ciò che è stato acquisito viene mantenuto.

  • È possibile utilizzare strumenti esistenti, ad esempio SQL Server Profiler, per esaminare i dati.

Schema di destinazione

Lo schema di destinazione viene definito come una tabella in cui vengono acquisiti i dettagli delle tracce archiviate nel data warehouse di gestione e una tabella utilizzata per archiviare tutti gli eventi di traccia provenienti dalle tracce. I dati di traccia sono archiviati nelle seguenti tabelle del data warehouse di gestione:

  • snapshots.trace_info. In questa tabella sono contenute informazioni su tutte le tracce caricate nell'istanza del warehouse.

  • snapshots.trace_data. In questa tabella sono contenuti dati acquisiti da tutte le tracce e viene definita una colonna per ogni possibile colonna di traccia. Archiviando in questo modo i dati di traccia, è possibile inserire i dati nella tabella tramite l'agente di raccolta seguendo lo stesso formato utilizzato dalla funzione di sistema fn_trace_gettable (). Inoltre la tabella può essere caricata direttamente in SQL Server Profiler.

Per ulteriori informazioni su queste tabelle, vedere Data warehouse di gestione.