Compartir a través de


Tipo de recopilador genérico de seguimiento de SQL

El tipo de recopilador genérico de seguimiento de SQL utiliza el seguimiento de SQL para supervisar el motor relacional de SQL Server. Los datos de seguimiento pueden proceder de un seguimiento predeterminado o de uno o varios seguimientos personalizados. Este tipo de recopilador se registra en la vista core.supported_collector_types.

El seguimiento predeterminado, controlado por una opción del servidor, se ejecuta continuamente en el servidor y captura eventos generales de interés. Estos eventos de interés no están relacionados con la ejecución de lotes individuales. Éste es un seguimiento que tiene pocas consecuencias. Los seguimientos personalizados pueden recopilar cualquier evento y tener pocas o muchas consecuencias, en función de los eventos que estén seleccionados y de la actividad del servidor en el momento de su ejecución. En la mayoría de los casos, los seguimientos personalizados no se ejecutan continuamente.

El tipo de recopilador genérico de seguimiento de SQL ejecuta un seguimiento en el servidor que almacena datos en un archivo o en un conjunto de archivos. Los datos de seguimiento se obtienen de los archivos de seguimiento mediante la función del sistema fn_trace_gettable(). Si está configurado para ello, el recopilador procesa los datos y, a continuación, los carga en el almacén de administración de datos.

El tipo de recopilador genérico de seguimiento de SQL está configurado para quitar los archivos sin usar y mantener una cantidad de espacio fija para los datos de seguimiento almacenados.

Esquema de una entrada genérica de un seguimiento de SQL

El tipo de recopilador genérico de seguimiento de SQL utiliza el esquema siguiente para los parámetros de entrada.

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

Como se muestra en el esquema anterior, el tipo de recopilador contiene elementos clave, parámetros de procedimiento almacenado y columnas especiales.

Elementos clave

  • La definición del seguimiento de entrada contiene una lista de eventos y una lista de filtros que definen el seguimiento.

  • Los eventos están agrupados dentro de un nodo EventType, que corresponde a la categoría de eventos en SQL Server Profiler.

  • Para el nodo EventType, el atributo ID debe coincidir con el valor de la vista del sistema sys.trace_category. El atributo name es opcional.

  • Para el nodo Event, el atributo ID debe coincidir con el valor de la vista del sistema sys.trace_events. El atributo name es opcional.

  • Los identificadores se utilizan al generar el script de inicio de seguimiento. Los nombres se utilizan por motivos de legibilidad y para representar la definición de entrada en la interfaz de usuario.

  • El nodo Event contiene los siguientes atributos:

    • ID, name. Explicado anteriormente.

    • columnslist. Una lista separada por comas de los identificadores de columna que se van a seleccionar para el evento. Si columnslist no se especifica, se incluirán todas las columnas para este evento.

  • El nodo Filter define un filtro aplicado al seguimiento. Los atributos tienen los significados siguientes:

    • columnid. Id. de una columna a la que se aplica el filtro.

    • columnname. El nombre de la columna identificada por columnid. Se utiliza para la representación.

    • logical_operator. Un operador que se va a aplicar entre varios filtros en la misma columna. Los valores permitidos son AND y OR.

    • comparison_operator. Un operador que se va a aplicar entre la columna y el valor de filtro. Los valores permitidos son: EQ, NE, GT, GE, LT, LE, LIKE y NOTLIKE.

    • value. El valor que se va a utilizar para la comparación. Observe que el valor del filtro y el operador de comparación deben coincidir con el tipo de columna a la que se aplica el filtro. Por ejemplo, si el tipo de columna es string, solo se podrán utilizar los operadores "LIKE" y "NOTLIKE", y únicamente se aceptarán valores de cadena para el valor del filtro.

Parámetros de procedimiento almacenado

Los parámetros siguientes del procedimiento almacenado sp_trace_create se definen en función del conjunto de recopilación o de las opciones del recopilador.

  • @options. El seguimiento siempre se inicia con la opción de sustitución incremental establecida (TRACE_FILE_ROLLOVER).

  • @tracefile. La variable CollectorTempDir determina la ubicación de los archivos de seguimiento. El nombre del archivo de seguimiento se genera como una concatenación de: "DataCollector_" + nombre de instancia + Uid de conjunto de recopilación + Id. de elemento de recopilación + ".trc".

  • @maxfilesize. Siempre se establece en 5 megabytes (MB).

  • @stoptime. No se utiliza.

  • @filecount. Establézcalo de acuerdo con el almacenamiento temporal máximo permitido para cada conjunto de recopilación (en MB). @filecount = límite de almacenamiento/5.

Columnas especiales

Se proporcionan columnas adicionales para cada evento, aunque no estén preseleccionadas en los parámetros de entrada para ese evento. Estas columnas son:

  • StartTime

  • EndTime

  • EventSequence

  • SPID

Las columnas anteriores identifican el origen del evento y habilitan la correlación de eventos.

El ejemplo de código siguiente muestra el uso del esquema de entrada utilizado por el tipo de recopilador genérico de seguimiento de SQL.

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

Procesamiento y resultado

Esta versión del tipo de recopilador genérico de seguimiento de SQL admite una carga de datos de seguimiento completa que procesa los eventos capturados en el seguimiento predeterminado del servidor.

Carga de datos de seguimiento completa

Con este tipo de carga de datos, los datos de seguimiento se cargan sin ningún tipo de procesamiento en una sola tabla que contiene todas las columnas de seguimiento posibles. Los datos de varios seguimientos se pueden cargar en la misma tabla, lo que facilita la combinación de los datos. Además de los datos de seguimiento, se anexa un snapshot_id a cada fila que permite identificar el origen de dichos datos y la hora del seguimiento.

Entre las ventajas proporcionadas por una carga de datos de seguimiento completa se incluyen las siguientes:

  • Hay una manera sencilla de almacenar los datos de seguimiento del servidor en una base de datos donde se podrán realizar consultas fácilmente y seguir con su procesamiento sin tener que abrir el seguimiento en SQL Server Profiler.

  • Los datos de varios seguimientos se pueden combinar y correlacionar juntos.

  • No hay ninguna pérdida de datos del seguimiento original. Se conservará todo lo que se capturó.

  • Se pueden utilizar las herramientas existentes, como SQL Server Profiler, para examinar los datos.

Esquema de destino

El esquema de destino se define como una tabla que captura los detalles sobre los seguimientos almacenados en el almacén de administración de datos, y una tabla que se utiliza para almacenar todos los eventos de seguimiento de los seguimientos. Los datos de seguimiento se almacenan en las tablas siguientes del almacén de administración de datos:

  • snapshots.trace_info. Esta tabla contiene información acerca de todos los seguimientos que se han cargado en la instancia de almacén de administración de datos.

  • snapshots.trace_data. Esta tabla contiene datos capturados por todos los seguimientos. Define una columna para cada columna de seguimiento posible. Este tipo de almacenamiento de los datos de seguimiento permite al recopilador de datos insertar éstos en la tabla con la misma forma con la que salen de la función del sistema fn_trace_gettable(). También permite cargar la tabla directamente en SQL Server Profiler.

Para obtener más información acerca de estas tablas, vea El almacén de administración de datos.