SQL 추적

적용 대상:SQL Server

SQL 추적에서 이벤트는 추적 정의에 나열된 이벤트 클래스의 인스턴스인 경우 수집됩니다. 이러한 이벤트는 추적 외부로 필터링하고 대상에 대해 쿼리할 수 있습니다. 대상은 SQL Server를 관리하는 애플리케이션에서 추적 정보를 사용할 수 있는 파일 또는 SMO(SQL Server 관리 개체)일 수 있습니다.

Important

SQL 추적 및 SQL Server Profiler는 사용되지 않습니다. Microsoft SQL Server 추적 및 재생 개체를 포함하는 Microsoft.SqlServer.Management.Trace 네임스페이스도 더 이상 사용되지 않습니다.

이 기능은 이후 버전의 SQL Server에서 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 애플리케이션은 수정하세요.

대신 확장 이벤트를 사용합니다. 확장 이벤트에 대한 자세한 내용은 빠른 시작: SQL Server의 확장 이벤트SSMS XEvent Profiler를 참조하세요.

SQL 추적의 이점

Microsoft SQL Server는 SQL Server 데이터베이스 엔진 인스턴스에서 추적을 만드는 Transact-SQL 시스템 저장 프로시저를 제공합니다. 이러한 시스템 저장 프로시저는 SQL Server Profiler를 사용하는 대신 사용자 고유의 애플리케이션 내에서 추적을 수동으로 만드는 데 사용할 수 있습니다. 이렇게 하면 엔터프라이즈의 요구 사항에 맞는 사용자 지정 애플리케이션을 작성할 수 있습니다.

SQL 추적 아키텍처

이벤트 원본은 Transact-SQL 일괄 처리 또는 SQL Server 이벤트(예: 교착 상태)와 같은 추적 이벤트를 생성하는 모든 원본일 수 있습니다. 이벤트에 대한 자세한 내용은 SQL Server Event Class Reference를 참조하십시오. 이벤트가 발생한 후 이벤트 클래스가 추적 정의에 포함된 경우 이벤트 정보는 추적에 의해 수집됩니다. 추적 정의에서 이벤트 클래스에 대해 필터를 정의한 경우 필터가 적용되고 추적 이벤트 정보가 큐에 전달됩니다. 큐에서 추적 정보는 파일에 기록되거나 SQL Server Profiler와 같은 애플리케이션에서 SMO에서 사용할 수 있습니다. 다음 다이어그램에서는 추적 중에 SQL Trace가 이벤트를 수집하는 방법을 보여 줍니다.

Database Engine event tracing process

SQL 추적 용어

다음은 SQL 추적의 주요 개념을 설명하는 용어입니다.

이벤트
Microsoft SQL Server 데이터베이스 엔진 인스턴스 내의 동작 발생입니다.

데이터 열
이벤트의 특성입니다.

이벤트 클래스
추적할 수 있는 이벤트 유형입니다. 이벤트 클래스에는 이벤트에서 보고할 수 있는 모든 데이터 열이 포함됩니다.

이벤트 범주
관련 이벤트 클래스의 그룹입니다.

추적 (명사)
데이터베이스 엔진 반환된 이벤트 및 데이터의 컬렉션입니다.

추적 (동사)
SQL Server 인스턴스에서 이벤트를 수집하고 모니터링하려면

Tracedefinition
추적 중에 수집할 이벤트 유형을 식별하는 이벤트 클래스, 데이터 열 및 필터의 컬렉션입니다.

Filter
추적에서 수집되는 이벤트를 제한하는 조건입니다.

추적 파일
추적을 저장할 때 만들어진 파일입니다.

템플릿
SQL Server Profiler에서 추적에서 수집할 이벤트 클래스 및 데이터 열을 정의하는 파일입니다.

추적 테이블
SQL Server Profiler에서 추적이 테이블에 저장되면 만들어지는 테이블입니다.

데이터 열을 사용하여 반환된 이벤트 설명

SQL 추적은 추적 출력의 데이터 열을 사용하여 추적이 실행되면 반환되는 이벤트를 설명합니다. 다음 표에서는 SQL Trace에서 사용하는 것과 동일한 데이터 열인 SQL Server Profiler 데이터 열에 대해 설명하고 기본적으로 선택된 열을 나타냅니다.

데이터 열 Column number 설명
* ApplicationName 10 SQL Server 인스턴스에 대한 연결을 만든 클라이언트 애플리케이션의 이름입니다. 이 열은 프로그램 이름이 아니라 애플리케이션에서 전달한 값으로 채워집니다.
BigintData1 52 추적에 지정된 이벤트 클래스에 따라 달라지는 값(bigint 데이터 형식)입니다.
BigintData2 53 추적에 지정된 이벤트 클래스에 따라 달라지는 값(bigint 데이터 형식)입니다.
* 이진 데이터 2 추적에 캡처된 이벤트 클래스에 종속된 이진 값입니다.
* ClientProcessID 9 클라이언트 애플리케이션이 실행 중인 프로세스에 호스트 컴퓨터에서 할당한 ID입니다. 클라이언트가 클라이언트 프로세스 ID를 제공하면 이 데이터 열이 채워집니다.
ColumnPermissions 44 열 사용 권한이 설정되었는지 여부를 나타냅니다. 문 텍스트를 구문 분석하여 어떤 권한이 어떤 열에 적용되었는지 확인할 수 있습니다.
* CPU 18 이벤트에서 사용하는 CPU 시간(밀리초)입니다.
데이터베이스 ID 3 USE database_name 문으로 지정된 데이터베이스의 ID이거나, 지정된 인스턴스에 대해 USE database_name문이 실행되지 않은 경우 기본 데이터베이스의 ID입니다. Sql Server Profiler는 ServerName 데이터 열이 추적에 캡처되고 서버를 사용할 수 있는 경우 데이터베이스의 이름을 표시합니다. DB_ID 함수를 사용하여 데이터베이스의 값을 결정합니다.
DatabaseName 35 사용자 문이 실행되는 데이터베이스의 이름입니다.
DBUserName 40 클라이언트의 SQL Server 사용자 이름입니다.
* 기간 13 이벤트의 기간(마이크로초)입니다.

서버는 이벤트 기간을 마이크로초(100만 초 또는 10-6초)로 보고하고 이벤트에 사용된 CPU 시간(10000초 또는 10-3초)을 보고합니다. SQL Server Profiler 그래픽 사용자 인터페이스는 기본적으로 기간 열을 밀리초 단위로 표시하지만 추적이 파일 또는 데이터베이스 테이블에 저장되면 Duration 열 값이 마이크로초 단위로 작성됩니다.
* EndTime 15 이벤트가 종료된 시간입니다. 이 열은 SQL:BatchStarting 또는 SP:Starting과 같이 시작 중인 이벤트를 참조하는 이벤트 클래스에 대해 채워지지 않습니다.
오류 31 지정된 이벤트의 오류 번호입니다. sysmessages에 저장된 오류 번호인 경우가 많습니다.
* EventClass 27 캡처된 이벤트 클래스 유형입니다.
EventSequence 51 이 이벤트의 시퀀스 번호입니다.
EventSubClass 21 각 이벤트 클래스에 대한 추가 정보를 제공하는 이벤트 하위 클래스의 형식입니다. 예를 들어 Execution Warning 이벤트 클래스에 대한 이벤트 하위 클래스 값은 실행 경고의 유형을 나타냅니다.

1 = 쿼리 대기. 쿼리는 실행되기 전에 리소스를 기다려야 합니다. 예를 들어 메모리입니다.

2 = 쿼리 제한 시간. 필요한 리소스가 실행될 때까지 기다리는 동안 쿼리 시간이 초과되었습니다. 이 데이터 열은 모든 이벤트 클래스에 대해 채워지지 않습니다.
GUID 54 추적에 지정된 이벤트 클래스에 따라 달라지는 GUID 값입니다.
FileName 36 수정된 파일의 논리적 이름입니다.
Handle 33 ODBC, OLE DB 또는 DB-Library에서 서버 실행을 조정하는 데 사용하는 정수입니다.
HostName 8 클라이언트를 실행 중인 컴퓨터의 이름입니다. 이 데이터 열은 클라이언트에서 호스트 이름을 제공하는 경우 채워집니다. 호스트 이름을 확인하려면 HOST_NAME 함수를 사용합니다.
IndexID 24 이벤트의 영향을 받는 개체의 인덱스 ID입니다. 개체의 인덱스 ID를 확인하려면 sysindexes 시스템 테이블의 indid 열을 사용합니다.
IntegerData 25 추적에 캡처된 이벤트 클래스에 종속된 정수 값입니다.
IntegerData2 55 추적에 캡처된 이벤트 클래스에 종속된 정수 값입니다.
IsSystem 60 이벤트가 시스템 프로세스에서 발생했는지 아니면 사용자 프로세스에서 발생했는지를 나타냅니다.

1 = 시스템

0 = 사용자
LineNumber 5 오류를 포함하는 줄 번호를 나타냅니다. SP:StmtStarting과 같은 Transact-SQL 문을 포함하는 이벤트의 경우 LineNumber는 저장 프로시저 또는 일괄 처리에 있는 문의 줄 번호를 포함합니다.
LinkedServerName 45 연결된 서버의 이름입니다.
* LoginName 11 사용자의 로그인 이름입니다(SQL Server 보안 로그인 또는 DOMAIN\Username 형식의 Windows 로그인 자격 증명).
LoginSid 41 로그인한 사용자의 SID(보안 식별자)입니다. 이 정보는 master 데이터베이스의 sys.server_principals 뷰에 있습니다. 서버에 대한 각 로그인에는 고유한 ID가 있습니다.
Methodname 47 OLEDB 메서드의 이름입니다.
모드 32 이벤트가 요청하거나 받은 상태를 설명하기 위해 다양한 이벤트에서 사용하는 정수입니다.
NestLevel 29 @@NESTLEVEL 반환된 데이터를 나타내는 정수입니다.
NTDomainName 7 사용자가 속한 Microsoft Windows 도메인입니다.
* NTUserName 6 Windows 사용자 이름입니다.
Objectid 22 개체의 시스템 할당 ID입니다.
ObjectID2 56 사용 가능한 경우 관련 개체 또는 엔터티의 ID입니다.
ObjectName 34 참조되는 개체의 이름입니다.
**ObjectType 28 이벤트에 관련된 개체의 형식을 나타내는 값입니다. 이 값은 sysobjects의 형식 열에 해당합니다.
Offset 61 저장 프로시저 또는 일괄 처리 내 문의 시작 오프셋입니다.
OwnerID 58 잠금 이벤트 전용입니다. 잠금을 소유한 개체의 유형을 나타냅니다.
OwnerName 37 개체 소유자의 데이터베이스 사용자 이름입니다.
ParentName 59 개체가 있는 스키마의 이름입니다.
권한 19 검사 사용 권한 유형을 나타내는 정수 값입니다. 값:

1 = 모두 선택

2 = 모두 업데이트

4 = 모두 참조

8 = INSERT

16 = DELETE

32 = EXECUTE(프로시저만 해당)

4096 = SELECT ANY(하나 이상의 열)

8192 = 업데이트 ANY

16384 = ANY 참조
ProviderName 46 OLEDB 공급자의 이름입니다.
* 읽기 16 이벤트를 대신하여 서버에서 수행하는 논리 디스크의 읽기 작업 수입니다. 이러한 읽기 작업에는 명령문을 실행하는 동안 테이블 및 버퍼의 모든 읽기가 포함됩니다.
RequestID 49 문을 포함하는 요청의 ID입니다.
Rolename 38 사용 중인 애플리케이션 역할의 이름입니다.
RowCounts 48 일괄 처리의 행 수입니다.
데이터 열이 추적에서 캡처되고 서버를 사용할 수 있으면 26 추적 중인 SQL Server 인스턴스의 이름입니다.
SessionLoginName 64 세션을 시작한 사용자의 로그인 이름입니다. 예를 들어 Login1을 사용하여 SQL Server에 연결하고 문을 Login2실행하는 경우 SessionLoginName은 Login1을 표시하고 LoginName은 Login2를 표시합니다. 이 데이터 열에는 SQL Server 및 Windows 로그인이 모두 표시됩니다.
심각도 20 예외 이벤트의 심각도 수준입니다.
SourceDatabaseID 62 개체의 원본이 있는 데이터베이스의 ID입니다.
* SPID 12 SQL Server에서 클라이언트와 연결된 프로세스에 할당하는 SPID(서버 프로세스 ID)입니다.
SqlHandle 63 임시 쿼리 또는 데이터베이스의 텍스트 및 SQL 개체의 개체 ID를 기반으로 하는 64비트 해시입니다. 이 값은 sys.dm_exec_sql_text() 에 전달되어 연관된 SQL 텍스트를 검색할 수 있습니다.
* StartTime 14 이벤트가 시작된 시간(사용 가능한 경우)입니다.
State(상태) 30 오류 상태 코드입니다.
성공 23 이벤트가 성공했는지 여부를 나타냅니다. 값은 다음과 같습니다.

1 = 성공,

0 = 실패.

예를 들어 1검사 성공적인 사용 권한을 의미하고 0실패한 검사 의미합니다.
TargetLoginName 42 로그인을 대상으로 하는 작업의 경우 대상 로그인의 이름입니다. 예를 들어 새 로그인을 추가합니다.
TargetLoginSid 43 로그인을 대상으로 하는 작업의 경우 대상 로그인의 SID입니다. 예를 들어 새 로그인을 추가합니다.
TargetUserName 39 데이터베이스 사용자를 대상으로 하는 동작(예: 사용자에게 권한 부여)의 경우 해당 사용자의 이름입니다.
* TextData 1 추적에 캡처된 이벤트 클래스에 따라 달라지는 텍스트 값입니다. 그러나 매개 변수가 있는 쿼리를 추적하는 경우 변수는 TextData 열의 데이터 값과 함께 표시되지 않습니다.
Transaction ID 4 트랜잭션의 시스템 할당 ID입니다.
Type 57 추적에 캡처된 이벤트 클래스에 종속된 정수 값입니다.
* 쓰기 17 이벤트를 대신하여 서버에서 수행하는 실제 디스크 쓰기 작업의 수입니다.
XactSequence 50 현재 트랜잭션을 설명하는 토큰입니다.

* 이러한 데이터 열은 모든 이벤트에 대해 기본적으로 채워집니다.

** ObjectType 데이터 열에 대한 자세한 내용은 ObjectType 추적 이벤트 열을 참조하세요.

SQL 추적 작업

태스크 설명 항목
Transact-SQL 저장 프로시저를 사용하여 추적을 만들고 실행하는 방법을 설명합니다. Transact-SQL 저장 프로시저를 사용하여 추적 만들기 및 실행
SQL Server 데이터베이스 엔진 인스턴스에서 저장 프로시저를 사용하여 수동 추적을 만드는 방법을 설명합니다. 저장 프로시저를 사용하여 수동 추적 만들기
추적 결과가 기록되는 파일에 추적 결과를 저장하는 방법을 설명합니다. 파일에 추적 결과 저장
임시 디렉터리의 공간을 사용하여 추적 데이터에 대한 액세스를 개선하는 방법을 설명합니다. 추적 데이터에 대한 액세스 개선
저장 프로시저를 사용하여 추적을 만드는 방법을 설명합니다. 추적 만들기(Transact-SQL)
저장 프로시저를 사용하여 추적 중인 이벤트에 필요한 정보만 검색하는 필터를 만드는 방법을 설명합니다. 추적 필터 설정(Transact-SQL)
저장 프로시저를 사용하여 기존 추적을 수정하는 방법을 설명합니다. 기존 추적 수정(Transact-SQL)
기본 제공 함수를 사용하여 저장된 추적을 보는 방법을 설명합니다. 저장된 추적 보기(Transact-SQL)
기본 제공 함수를 사용하여 추적 필터 정보를 보는 방법을 설명합니다. 필터 정보 보기(Transact-SQL)
저장 프로시저를 사용하여 추적을 삭제하는 방법을 설명합니다. 추적 삭제(Transact-SQL)
추적으로 인해 발생하는 성능 비용을 최소화하는 방법을 설명합니다. SQL 추적 최적화
추적 중에 발생하는 오버헤드를 최소화하기 위해 추적을 필터링하는 방법을 설명합니다. 추적 필터링
추적에서 수집하는 데이터의 양을 최소화하는 방법을 설명합니다. 추적 파일 및 테이블 크기 제한
Microsoft SQL Server에서 추적을 예약하는 두 가지 방법을 설명합니다. 추적 예약

참고 항목

SQL Server Profiler 템플릿 및 권한
SMO(SQL Server 관리 개체) 프로그래밍 가이드