一般 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 屬性是選擇性的。

  • 產生追蹤起始指令碼時,會使用識別碼。使用名稱是為了可讀性,以及在使用者介面中轉譯輸入定義。

  • Event 節點包含下列屬性:

    • ID, name:先前已說明。

    • columnslist:要針對事件選取之逗號分隔的資料行識別碼清單。如果沒有指定 columnslist,將會包括此事件的所有資料行。

  • Filter 節點會定義套用至追蹤的篩選。該屬性具有以下意義:

    • columnid:套用篩選之資料行的識別碼。

    • 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 追蹤收集器型別所使用之輸入結構描述的用法的程式碼範例。