일반 SQL Trace 수집기 유형

일반 SQL Trace 수집기 유형은 SQL Trace를 사용하여 SQL Server 관계형 엔진을 모니터링합니다. 추적 데이터는 기본 추적 또는 하나 이상의 사용자 지정 추적에서 가져올 수 있습니다. 이 수집기 유형은 core.supported_collector_types뷰에 등록됩니다.

서버 차원의 설정으로 제어되는 기본 추적은 서버에서 계속 실행되고 관심 대상의 일반 이벤트를 캡처합니다. 이러한 관심 이벤트는 개별 일괄 처리 실행과 무관합니다. 기본 추적은 영향이 낮습니다. 사용자 지정 추적은 이벤트를 수집할 수 있고, 추적이 실행 중일 때 선택한 이벤트 및 서버 활동에 따라 영향이 낮거나 높을 수 있습니다. 대부분의 경우 사용자 지정 추적은 지속적으로 실행되지는 않습니다.

일반 SQL Trace 수집기 유형은 파일이나 파일 집합에 데이터를 저장하는 서버측 추적을 실행합니다. fn_trace_gettable() 시스템 함수를 사용하여 추적 파일에서 추적 데이터를 가져옵니다. 이런 식으로 구성된 경우 수집기는 데이터를 처리한 다음 관리 데이터 웨어하우스로 데이터를 업로드합니다.

일반 SQL Trace 수집기 유형을 구성하여 사용하지 않는 파일을 제거하고 저장된 추적 데이터에 필요한 고정 공간 크기를 유지합니다.

일반 SQL Trace 입력 스키마

일반 SQL Trace 수집기 유형은 입력 매개 변수에 다음 스키마를 사용합니다.

<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 프로파일러의 이벤트 범주에 해당합니다.

  • EventType 노드의 경우 ID 특성은 sys.trace_category 시스템 뷰의 값과 일치해야 합니다. name 특성은 선택 사항입니다.

  • Event 노드의 경우 ID 특성은 sys.trace_events 시스템 뷰의 값과 일치해야 합니다. 이름 특성은 선택 사항입니다.

  • 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. 항상 5MB로 설정됩니다.

  • @stoptime. 사용되지 않습니다.

  • @filecount. 컬렉션 집합당 허용되는 최대 임시 저장소 크기(MB)에 맞도록 설정합니다. @filecount = storage limit/5.

특수 열

해당 이벤트에 대한 입력 매개 변수에서 미리 선택되지 않더라도 각 이벤트에 대해 추가 열이 제공됩니다. 이러한 열은 다음과 같습니다.

  • StartTime

  • EndTime

  • EventSequence

  • SPID

이러한 열은 이벤트 출처를 식별하고 이벤트 상관 관계를 사용할 수 있습니다.

다음 코드 예제에서는 일반 SQL Trace 수집기 유형에서 사용되는 입력 스키마의 사용 방법을 보여 줍니다.

<?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 Trace 수집기 유형은 서버 기본 추적에서 캡처되는 이벤트를 처리하는 전체 추적 데이터 로드를 지원합니다.

전체 추적 데이터 로드

이 유형의 데이터 로드를 사용하면 가능한 모든 추적 열을 포함하는 단일 테이블로 처리하지 않고 추적 데이터가 로드됩니다. 여러 추적의 데이터가 같은 테이블로 로드될 수 있으며 이로 인해 더 쉽게 데이터를 병합할 수 있습니다. 추적 데이터뿐만 아니라 snapshot_id가 각 행에 추가되며 이로 인해 추적 데이터의 출처 및 추적 시간을 식별할 수 있습니다.

전체 추적 데이터 로드에서 제공되는 이점은 다음과 같습니다.

  • 서버에서 데이터베이스로 추적 데이터를 얻는 간편한 방법이 있으므로 SQL Server 프로파일러의 추적을 열 필요 없이 쉽게 쿼리하고 추가로 처리할 수 있습니다.

  • 여러 추적의 데이터는 병합되고 서로 상관될 수 있습니다.

  • 원래 추적에서 손실되는 데이터가 없습니다. 캡처된 것은 모두 보존됩니다.

  • SQL Server 프로파일러와 같은 기존 도구는 데이터를 검색하는 데 사용할 수 있습니다.

대상 스키마

대상 스키마는 관리 데이터 웨어하우스에 저장된 추적에 대해 자세하게 캡처되는 테이블 및 추적의 모든 추적 이벤트를 저장하는 데 사용되는 테이블로 정의됩니다. 추적 데이터는 다음 관리 데이터 웨어하우스 테이블에 저장됩니다.

  • snapshots.trace_info. 이 테이블에는 웨어하우스 인스턴스에 업로드된 모든 추적에 대한 정보가 포함됩니다.

  • snapshots.trace_data. 이 테이블에는 모든 추적에 의해 캡처된 데이터가 포함됩니다. 이 테이블은 가능한 각 추적 열에 대해 열을 정의합니다. 이 방법으로 추적 데이터를 저장하면 데이터 수집기는 데이터를 fn_trace_gettable() 시스템 함수에서 나올 때와 같은 형태로 테이블에 삽입할 수 있습니다. 또한 테이블을 SQL Server 프로파일러로 직접 로드할 수도 있습니다.

이러한 테이블에 대한 자세한 내용은 관리 데이터 웨어하우스를 참조하십시오.