一般 SQL 跟踪收集器类型

一般 SQL 跟踪收集器类型使用 SQL 跟踪来监视 SQL Server 关系引擎。跟踪数据可以来自默认跟踪,也可以来自一个或多个自定义跟踪。此收集器类型在 core.supported_collector_types视图中注册。

默认跟踪由服务器范围的设置控制,它在服务器上连续运行并捕获相关的一般事件。这些相关事件与单个批处理执行无关。这是一种影响很小的跟踪。自定义跟踪可以收集任何事件,其影响可能较小,也可能较大,具体取决于所选择的事件和跟踪运行时的服务器活动。多数情况下自定义跟踪并不连续运行。

一般 SQL 跟踪收集器类型运行的是服务器端跟踪,该跟踪将数据存储在一个文件或一组文件中。跟踪数据是通过使用 fn_trace_gettable() 系统函数从跟踪文件中获取的。如果进行了相应配置,则收集器将处理数据,然后将数据上载到管理数据仓库中。

一般 SQL 跟踪收集器类型配置为删除不使用的文件并为存储的跟踪数据保留固定的空间大小。

一般 SQL 跟踪输入架构

一般 SQL 跟踪收集器类型使用以下输入参数架构。

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

如上面的架构中所示,该收集器类型包含关键元素、存储过程参数和特殊列。

关键元素

  • 输入跟踪定义包含一个事件列表和一个用来定义跟踪的筛选器列表。

  • 事件在 EventType 节点内进行分组,该节点对应于 SQL Server Profiler 中的事件类别。

  • 对于 EventType 节点,ID 属性必须与来自 sys.trace_category 系统视图的值相匹配。name 属性是可选的。

  • 对于 Event 节点,ID 属性必须与来自 sys.trace_events 系统视图的值相匹配。name 属性是可选的。

  • 生成跟踪启动脚本时要使用 ID。名称的使用是为了提高可读性以及在用户界面中显示输入定义。

  • Event 节点包含以下属性:

    • ID, name. 前面已加以说明。

    • columnslist. 要为事件选择的列 ID 的逗号分隔列表。如果未指定 columnslist,则将包含此事件的所有列。

  • Filter 节点定义应用于跟踪的筛选器。各属性的含义如下:

    • columnid. 要应用该筛选器的列的 ID。

    • columnname. 由 columnid 标识的列的名称。它用于显示目的。

    • logical_operator. 要在针对相同列的多个筛选器之间应用的运算符。允许值包括 AND 和 OR。

    • comparison_operator. 要在列和筛选器值之间应用的运算符。允许值包括:EQ、NE、GT、GE、LT、LE、LIKE 和 NOTLIKE。

    • value. 用于比较的值。请注意,筛选器的值和比较运算符必须与应用该筛选器的列的类型相匹配。例如,如果列的类型为 string,则只能使用“LIKE”和“NOTLIKE”运算符,并且只接受字符串值作为筛选器值。

存储过程参数

sp_trace_create 存储过程的以下参数将基于收集组或收集器选项进行定义。

  • @options. 跟踪始终从滚动更新选项集开始 (TRACE_FILE_ROLLOVER)。

  • @tracefile. 跟踪文件的位置由 CollectorTempDir 变量决定。跟踪文件的名称由以下各项串联生成:“DataCollector_”+ instanceName + CollectionSetUid + CollectionItemId +“.trc”。

  • @maxfilesize. 始终设置为 5 MB。

  • @stoptime. 未使用。

  • @filecount. 设置为适合每个收集组所允许的最大临时存储区大小(以 MB 为单位)。@filecount = 存储限制/5。

特殊列

针对每个事件还提供了若干其他列,即使事先没有在该事件的输入参数中选择这些列,也会提供它们。这些列包括:

  • StartTime

  • EndTime

  • EventSequence

  • SPID

上述各列标识了事件的起源并启用了事件关联。

以下代码示例说明了一般 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>

处理和输出

此版本的一般 SQL 跟踪收集器类型支持用于处理在服务器默认跟踪中捕获的事件的完全跟踪数据加载。

完全跟踪数据加载

使用这种类型的数据记载可以将跟踪数据加载到包含所有可能的跟踪列的单一表中,而无需进行任何处理。可以将来自多个跟踪的数据加载到相同的表中,以便于合并数据。除了跟踪数据外,还会向每一行追加一个 snapshot_id,通过它可以标识跟踪数据的源以及跟踪的时间。

完全跟踪数据加载具有以下优点:

  • 提供了一种简单的方式以从服务器上获取跟踪数据并将其放入数据库中,从中可以方便地进行查询并进一步处理而无需在 SQL Server Profiler 中打开跟踪。

  • 可以合并和关联来自多个跟踪的数据。

  • 原始跟踪不会丢失数据。所捕获的一切均得以保留。

  • 可以使用现有工具(例如 SQL Server Profiler)来浏览数据。

目标架构

目标架构定义为一个用于捕获有关存储在管理数据仓库中的跟踪的详细信息的表和一个用于存储来自跟踪的所有跟踪事件的表。跟踪数据存储在以下管理数据仓库表中:

  • snapshots.trace_info。此表包含有关已上载到仓库实例中的所有跟踪的信息。

  • snapshots.trace_data。此表包含所有跟踪捕获的数据。它为每个可能的跟踪列都定义了一列。用这种方式存储跟踪数据允许数据收集器在 fn_trace_gettable() 系统函数返回的形状的表中插入数据。它还允许将表直接加载到 SQL Server Profiler 中。

有关这些表的详细信息,请参阅管理数据仓库

更改历史记录

更新的内容

更正了一般 SQL 跟踪输入架构。

更正了演示一般 SQL 跟踪收集器类型所用输入架构的用法的代码示例。