다음을 통해 공유


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가 이벤트를 수집하는 방법을 보여 줍니다.

데이터베이스 엔진 이벤트 추적 프로세스

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 시간(1000초 또는 10-3초)을 보고합니다. SQL Server Profiler 그래픽 사용자 인터페이스는 기본적으로 기간 열을 밀리초 단위로 표시하지만 추적을 파일이나 데이터베이스 테이블에 저장하면 기간 열 값이 마이크로초 단위로 기록됩니다.
* 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 사용자 로그인 이름(DOMAIN\Username 형식의 SQL Server 보안 로그인 또는 Windows 로그인 자격 증명인)입니다.
LoginSid 41 로그인한 사용자의 SID(Security Identifier)입니다. 이 정보는 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 = SELECT ALL

2 = UPDATE ALL

4 = REFERENCES ALL

8 = INSERT

16 = DELETE

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

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

8192 = UPDATE ANY

16384 = REFERENCES ANY
ProviderName 46 OLEDB 공급자 이름
* 읽기 16 이벤트를 대신하여 서버에서 수행하는 논리적 디스크의 읽기 작업 수입니다. 이러한 읽기 작업에는 명령문을 실행하는 동안 테이블 및 버퍼의 모든 읽기가 포함됩니다.
RequestID 49 문을 포함하는 요청의 ID입니다.
RoleName 38 사용 중인 애플리케이션 역할의 이름입니다.
RowCounts 48 배치의 행 수입니다.
데이터 열이 추적에서 캡처되고 서버를 사용할 수 있으면 26 추적 중인 SQL Server 인스턴스의 이름입니다.
SessionLoginName 64 세션을 시작한 사용자의 로그인 이름입니다. 예를 들어 사용자가 Login1을 사용하여 SQL Server에 연결하고 Login2로 문을 실행하는 경우 SessionLoginNameLogin1을 표시하고 LoginNameLogin2를 표시합니다. 이 데이터 열에는 SQL Server 및 Windows 로그인이 모두 표시됩니다.
심각도 20 예외 이벤트의 심각도 수준입니다.
SourceDatabaseID 62 개체의 원본이 있는 데이터베이스의 ID입니다.
* SPID 12 SQL Server가 클라이언트와 관련된 프로세스에 할당한 서버 프로세스 ID(SPID)입니다.
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 관리 개체) 프로그래밍 가이드