SQL 추적
SQL 추적에서는 이벤트가 추적 정의에 나열된 이벤트 클래스의 인스턴스인 경우 수집됩니다. 이러한 이벤트는 추적 외부로 필터링하고 대상에 대해 쿼리할 수 있습니다. 대상은 SQL Server 를 관리하는 애플리케이션의 추적 정보를 사용할 수 있는 파일 또는 SMO( SQL Server관리 개체)일 수 있습니다.
중요
Microsoft SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 애플리케이션은 수정하세요. 확장 이벤트를 대신 사용하세요.
SQL 추적의 이점
Microsoft SQL Server SQL Server 데이터베이스 엔진의 instance 추적을 만드는 Transact-SQL 시스템 저장 프로시저를 제공합니다. 이 시스템 저장 프로시저를 사용자의 애플리케이션에서 사용하면 SQL Server Profiler를 사용하지 않고 추적을 수동으로 만들 수 있습니다. 따라서 각 사용자 조직의 필요에 따라 사용자 지정 애플리케이션을 쓸 수 있습니다.
SQL 추적 아키텍처
이벤트 원본은 Transact-SQL 일괄 처리 또는 교착 상태와 같은 SQL Server 이벤트와 같은 추적 이벤트를 생성하는 모든 원본일 수 있습니다. 이벤트에 대한 자세한 내용은 SQL Server Event Class Reference를 참조하십시오. 이벤트가 발생한 후 해당 이벤트 클래스가 추적 정의에 포함되면 이벤트 정보가 추적에 의해 수집됩니다. 추적 정의의 이벤트 클래스에 필터가 정의되어 있으면 해당 필터가 적용되고 추적 이벤트 정보가 큐에 전달됩니다. 이 큐로부터 추적 정보가 파일에 기록되거나 SQL Server Profiler같은 애플리케이션에서 SMO에 의해 사용될 수 있습니다. 다음 다이어그램에서는 추적 중 SQL 추적에서 이벤트를 수집하는 방법을 보여 줍니다.
SQL 추적 용어
다음은 SQL 추적의 주요 개념을 설명하는 용어입니다.
이벤트
Microsoft SQL Server 데이터베이스 엔진 인스턴스 내에서 동작이 발생했음을 의미합니다.
데이터 열
이벤트의 특성입니다.
이벤트 클래스
추적할 수 있는 이벤트의 유형입니다. 이벤트 클래스는 이벤트에서 보고할 수 있는 모든 데이터 열을 포함합니다.
이벤트 범주
관련된 이벤트 클래스들의 그룹입니다.
추적 (명사)
데이터베이스 엔진에서 반환한 이벤트 및 데이터의 모음입니다.
추적 (동사)
SQL Server인스턴스의 이벤트를 수집 및 모니터링하기 위한 동작입니다.
Tracedefinition
추적 중에 수집되는 이벤트의 유형을 식별하는 이벤트 클래스, 데이터 열 및 필터 모음입니다.
Filter
추적에서 수집되는 이벤트를 제한하는 조건입니다.
추적 파일
추적을 저장할 때 생성되는 파일입니다.
템플릿
추적에서 수집되는 이벤트 클래스 및 데이터 열을 정의하는 SQL Server Profiler내의 파일입니다.
추적 테이블
SQL Server Profiler에서 추적을 테이블에 저장할 때 생성되는 테이블입니다.
데이터 열을 사용하여 반환되는 이벤트 설명
SQL 추적은 추적 출력의 데이터 열을 통해 추적이 실행될 때 반환된 이벤트에 대한 정보를 제공합니다. 다음 표에서는 SQL Server Profiler 데이터 열에 대해 설명합니다. 이 데이터 열은 SQL 추적에서 사용하는 데이터 열과 동일하며 기본으로 선택된 열에 해당합니다.
데이터 열 | 열 번호 | Description |
---|---|---|
ApplicationName1 | 10 | SQL Server인스턴스에 연결한 클라이언트 애플리케이션의 이름입니다. 이 열은 프로그램의 이름이 아니라 애플리케이션에서 전달한 값으로 채워집니다. |
BigintData1 | 52 | 추적에 지정된 이벤트 클래스에 따라 달라지는 값(bigint 데이터 형식)입니다. |
BigintData2 | 53 | 추적에 지정된 이벤트 클래스에 따라 달라지는 값(bigint 데이터 형식)입니다. |
Binary Data | 2 | 추적에서 캡처된 이벤트 클래스에 따라 달라지는 이진 값입니다. |
ClientProcessID1 | 9 | 클라이언트 애플리케이션이 실행 중인 프로세스에 대해 호스트 컴퓨터가 할당한 ID입니다. 클라이언트가 클라이언트 프로세스 ID를 제공하면 이 데이터 열이 채워집니다. |
ColumnPermissions | 44 | 열 사용 권한이 설정되어 있는지 나타냅니다. 문 텍스트를 구문 분석하여 어떤 권한이 어떤 열에 적용되었는지 알 수 있습니다. |
CPU | 18 | 이벤트에 의해 사용된 CPU 시간(밀리초)입니다. |
데이터베이스 ID1 | 3 | USE database_name 문으로 지정한 데이터베이스 ID이거나 지정한 인스턴스에 대해 실행된 USE database_name문이 없는 경우 기본 데이터베이스 ID입니다. SQL Server Profiler ServerName 데이터 열이 추적에서 캡처되고 서버를 사용할 수 있으면 에 데이터베이스 이름이 표시됩니다. DB_ID 함수를 사용하여 데이터베이스의 값을 확인할 수 있습니다. |
DatabaseName | 35 | 사용자 문이 실행되는 데이터베이스의 이름입니다. |
DBUserName1 | 40 | 클라이언트의 SQL Server 사용자 이름입니다. |
Duration | 13 | 이벤트의 기간(마이크로초)입니다. 서버는 이벤트 기간을 마이크로초(1초의 1/1000000, 즉 10-6) 단위로 보고하고 이벤트에 사용되는 CPU 시간량을 밀리초(1초의 1/1000, 즉 10-3) 단위로 보고합니다. SQL Server Profiler 그래픽 사용자 인터페이스는 기본적으로 Duration 열을 밀리초 단위로 표시하지만 추적을 파일이나 데이터베이스 테이블에 저장하면 Duration 열 값이 마이크로초 단위로 기록됩니다. |
EndTime | 15 | 이벤트가 종료된 시간입니다. 이 열은 SQL:BatchStarting 또는 SP:Starting등의 시작하는 이벤트를 참조하는 이벤트 클래스에 대해 채워지지 않습니다. |
오류 | 31 | 지정된 이벤트의 오류 번호입니다. 종종 sysmessages테이블에 저장된 오류 번호를 나타냅니다. |
EventClass1 | 27 | 캡처된 이벤트 클래스 유형입니다. |
EventSequence | 51 | 이 이벤트의 시퀀스 번호입니다. |
EventSubClass1 | 21 | 각 이벤트 클래스에 대한 추가 정보를 제공하는 이벤트 하위 클래스 유형입니다. 예를 들어 Execution Warning 이벤트 클래스에 대한 이벤트 하위 클래스 값은 실행 경고 유형을 나타냅니다. 1 = 쿼리 대기 쿼리는 실행하기 전에 리소스(예: 메모리)를 기다려야 합니다. 2 = 쿼리 제한 시간 실행을 위해 리소스를 기다리는 동안 제한 시간을 초과한 쿼리입니다. 이 데이터 열은 모든 이벤트 클래스에 대해 채워지지는 않습니다. |
GUID | 54 | 추적에 지정된 이벤트 클래스에 따라 달라지는 GUID 값입니다. |
FileName | 36 | 수정한 파일의 논리적 이름입니다. |
Handle | 33 | ODBC, OLE DB, DB-Library가 서버와의 공동 실행을 위해 사용하는 정수입니다. |
HostName1 | 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 형식의 Microsoft Windows 로그인 자격 증명 또는 SQL Server 보안 로그인)입니다 |
LoginSid1 | 41 | 로그인한 사용자의 SID(보안 ID)입니다. 이 정보는 master 데이터베이스의 sys.server_principals 뷰에 있습니다. 서버로의 각 로그인에는 고유 ID가 있습니다. |
MethodName | 47 | OLEDB 메서드 이름입니다. |
모드 | 32 | 여러 가지 이벤트에서 이벤트의 요청 또는 수신 상태를 설명할 때 사용하는 정수입니다. |
NestLevel | 29 | @@NESTLEVEL에서 반환한 데이터를 나타내는 정수입니다. |
NTDomainName1 | 7 | 사용자가 속한 Microsoft Windows 도메인입니다. |
NTUserName1 | 6 | Windows 사용자 이름입니다. |
Exchange Spill | 22 | 시스템이 할당한 개체의 ID입니다. |
ObjectID2 | 56 | 관련 개체 또는 엔터티의 ID입니다(사용 가능한 경우). |
ObjectName | 34 | 참조되는 개체의 이름입니다. |
ObjectType2 | 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 | OLE DB 공급자 이름입니다. |
Reads | 16 | 이벤트에 대해 서버에서 수행한 논리적 디스크 읽기 작업의 수입니다. 이 읽기 작업에는 해당 문 실행 중의 모든 테이블 및 버퍼 읽기가 포함됩니다. |
RequestID | 49 | 문을 포함하는 요청의 ID입니다. |
RoleName | 38 | 활성화된 애플리케이션 역할의 이름입니다. |
RowCounts | 48 | 일괄 처리에 있는 행 수입니다. |
ServerName1 | 26 | 추적되는 SQL Server 인스턴스의 이름입니다. |
SessionLoginName | 64 | 세션을 시작한 사용자의 로그인 이름입니다. 예를 들어 사용자가 SQL Server Login1 을 사용하여 에 연결하고 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 텍스트를 검색할 수 있습니다. |
StartTime1 | 14 | 이벤트가 시작된 시간입니다(사용 가능한 경우). |
State | 30 | 오류 상태 코드 |
Success | 23 | 이벤트가 성공적이었는지를 나타냅니다. 값은 다음과 같습니다. 1 = 성공, 0 = 실패. 예를 들어 1 은 권한 확인에 성공했음을 의미하며 0 은 확인에 실패했음을 의미합니다. |
TargetLoginName | 42 | 로그인을 대상으로 하는 동작(예: 새 로그인 추가)의 경우 대상 로그인의 이름입니다. |
TargetLoginSid | 43 | 로그인을 대상으로 하는 동작(예: 새 로그인 추가)의 경우 대상 로그인의 SID입니다. |
TargetUserName | 39 | 데이터베이스 사용자를 대상으로 하는 동작(예: 사용자에게 권한 부여)의 경우 해당 사용자의 이름입니다. |
TextData | 1 | 추적에서 캡처된 이벤트 클래스에 따라 달라지는 텍스트 값입니다. 그렇지만 매개 변수가 있는 쿼리를 추적하면 변수는 TextData 열에 데이터 값으로 표시되지 않습니다. |
Transaction ID | 4 | 시스템이 할당한 트랜잭션 ID입니다. |
형식 | 57 | 추적에서 캡처된 이벤트 클래스에 따라 달라지는 정수 값입니다. |
Writes | 17 | 이벤트에 대해 서버에서 수행한 물리적 디스크 쓰기 작업의 수입니다. |
XactSequence | 50 | 현재 트랜잭션을 설명하는 토큰입니다. |
1 이러한 데이터 열은 모든 이벤트에 대해 기본적으로 채워집니다.
2ObjectType 데이터 열에 대한 자세한 내용은 ObjectType 추적 이벤트 열을 참조하세요.
SQL 추적 태스크
태스크 설명 | 항목 |
---|---|
TRANSACT-SQL 저장 프로시저를 사용하여 추적을 만들고 실행하는 방법을 설명합니다. | TRANSACT-SQL 저장 프로시저를 사용하여 추적 만들기 및 실행 |
SQL Server 데이터베이스 엔진인스턴스에서 저장 프로시저를 사용하여 수동 추적을 만드는 방법을 설명합니다. | 저장 프로시저를 사용하여 수동 추적 만들기 |
추적 결과가 기록되는 파일에 추적 결과를 저장하는 방법을 설명합니다. | 파일에 추적 결과 저장 |
temp 디렉터리의 공간을 사용하여 추적 데이터에 대한 액세스를 개선하는 방법을 설명합니다. | 추적 데이터에 대한 액세스 향상 |
저장 프로시저를 사용하여 추적을 만드는 방법을 설명합니다. | 추적 만들기(Transact-SQL) |
저장 프로시저를 사용하여 추적 중인 이벤트에 필요한 정보만 검색하는 필터를 만드는 방법을 설명합니다. | 추적 필터 설정(Transact-SQL) |
저장 프로시저를 사용하여 기존 추적을 수정하는 방법을 설명합니다. | 기존 추적 수정(Transact-SQL) |
기본 제공 함수를 사용하여 저장된 추적을 보는 방법을 설명합니다. | 저장된 추적 보기(Transact-SQL) |
기본 제공 함수를 사용하여 추적 필터 정보를 보는 방법을 설명합니다. | 필터 정보 보기(Transact-SQL) |
저장 프로시저를 사용하여 추적을 삭제하는 방법을 설명합니다. | 추적 삭제(Transact-SQL) |
추적에서 발생하는 성능 비용을 최소화하는 방법을 설명합니다. | SQL 추적 최적화 |
추적을 필터링하여 추적 중에 발생하는 오버헤드를 최소화하는 방법을 설명합니다. | 추적 필터링 |
추적에서 수집하는 데이터의 양을 최소화하는 방법을 설명합니다. | 추적 파일 및 테이블 크기 제한 |
Microsoft SQL Server에서 추적을 예약하는 두 가지 방법을 설명합니다. | 예약된 추적 |
참고 항목
SQL Server Profiler 템플릿 및 권한
SMO(SQL Server 관리 개체) 프로그래밍 가이드