다음을 통해 공유


Hash Warning 이벤트 클래스

업데이트: 2005년 12월 5일

Hash Warning 이벤트 클래스는 해시 연산 중 해시 재귀 또는 해시 중단(해시 재귀 한도 초과) 발생을 모니터링하는데 사용할 수 있습니다.

해시 재귀는 빌드 입력이 사용할 수 있는 메모리를 초과하여 여러 개의 파티션으로 분할되어 개별적으로 처리되는 경우 발생합니다. 분할된 파티션 중 여전히 사용할 수 있는 메모리를 초과하는 파티션이 있으면 이는 다시 하위 파티션으로 분할되어 개별적으로 처리됩니다. 이러한 분할 프로세스는 각 파티션이 사용할 수 있는 메모리에 모두 맞거나 최대 재귀 수준에 도달할 때까지 계속됩니다(IntegerData 데이터 열에 표시됨).

해시 연산이 최대 재귀 수준에 도달하면 해시 재귀 한도 초과가 발생하며 대체 계획으로 변경하여 남은 파티션 데이터를 처리합니다. 해시 재귀 한도 초과는 보통 일치하지 않는 데이터로 인해 발생합니다.

해시 재귀 및 해시 재귀 한도 초과는 서버 성능을 저하시킵니다. 해시 재귀 및 해시 재귀 한도 초과를 제거하거나 빈도를 낮추려면 다음 중 하나를 실행하십시오.

  • 조인 또는 그룹화된 열에 통계가 있는지 확인합니다.
  • 열에 통계가 있으면 업데이트합니다.
  • 다른 형식의 조인을 사용합니다. 예를 들어 MERGE 또는 LOOP 조인을 대신 사용합니다(가능한 경우).
  • 컴퓨터에서 사용할 수 있는 메모리를 늘립니다. 해시 재귀 또는 해시 재귀 한도 초과는 쿼리를 적시에 처리할 메모리가 부족하여 디스크에 써야하는 경우 발생합니다.

해시 재귀 또는 해시 재귀 한도 초과가 발생하는 수를 줄이는 가장 효과적인 방법은 조인과 관련된 열의 통계를 만들거나 업데이트하는 것입니다.

[!참고] 유예 해시 조인재귀 해시 조인도 해시 재귀 한도 초과와 관련이 있는 용어입니다. 자세한 내용은 해시 조인 이해를 참조하십시오.

ms190736.note(ko-kr,SQL.90).gif중요:
쿼리 최적화 프로그램이 실행 계획을 생성할 때 Hash Warning 이벤트가 발생하는 위치를 확인하려면 추적에서 Showplan 이벤트 클래스도 수집해야 합니다. 노드 ID를 반환하지 않는 Showplan TextShowplan Text (Unencoded) 이벤트 클래스를 제외한 임의의 Showplan 이벤트 클래스를 선택할 수 있습니다. 실행 계획의 노드 ID는 쿼리 최적화 프로그램이 쿼리 실행 계획을 생성할 때 수행하는 각 작업을 식별합니다. 이러한 작업을 연산자라고 하며 실행 계획의 각 연산자에는 노드 ID가 있습니다. Hash Warning 이벤트의 ObjectID 열은 실행 계획의 노드 ID에 해당하므로 오류가 발생하는 연산자, 즉 작업을 확인할 수 있습니다. Showplan 이벤트 클래스에 대한 자세한 내용은 SQL Server 프로파일러 이벤트 클래스를 사용하여 실행 계획 표시를 참조하십시오.

Hash Warning 이벤트 클래스 데이터 열

데이터 열 이름 데이터 형식 설명 열 ID 필터 가능

ApplicationName

nvarchar

SQL Server 인스턴스에 연결한 클라이언트 응용 프로그램의 이름입니다. 이 열은 프로그램의 표시 이름이 아니라 응용 프로그램에서 전달한 값으로 채워집니다.

10

ClientProcessID

int

클라이언트 응용 프로그램이 실행 중인 프로세스에 대해 호스트 컴퓨터가 할당한 ID입니다. 클라이언트가 클라이언트 프로세스 ID를 제공하면 이 데이터 열이 채워집니다.

9

DatabaseID

int

지정된 인스턴스에 대해 USE database 문이 실행되지 않은 경우 USE database 문 또는 기본 데이터베이스에서 지정한 데이터베이스의 ID입니다. ServerName 데이터 열이 추적에서 캡처되고 서버를 사용할 수 있으면 SQL Server 프로파일러에 데이터베이스 이름이 표시됩니다. DB_ID 함수를 사용하여 데이터베이스에 대한 값을 결정합니다.

3

DatabaseName

nvarchar

사용자 문이 실행되는 데이터베이스의 이름입니다.

35

EventClass

int

이벤트 유형 = 55

27

아니요

EventSequence

int

요청 내의 지정된 이벤트 순서입니다.

51

아니요

EventSubClass

int

이벤트 하위 클래스의 유형입니다.

0=재귀

1=한도 초과

21

HostName

nvarchar

클라이언트를 실행 중인 컴퓨터의 이름입니다. 클라이언트가 호스트 이름을 제공할 경우 이 데이터 열이 채워집니다. 호스트 이름을 확인하려면 HOST_NAME 함수를 사용하십시오.

8

IntegerData

int

재귀 수준입니다(해시 재귀만 해당).

25

IsSystem

int

이벤트가 시스템 프로세스에서 발생했는지 아니면 사용자 프로세스에서 발생했는지를 나타냅니다. 1 = 시스템, 0 = 사용자

60

LoginName

nvarchar

사용자 로그인 이름(<DOMAIN>\<username> 형식의 Windows 로그인 자격 증명 또는 SQL Server 보안 로그인)입니다.

11

LoginSid

image

로그인한 사용자의 SID(보안 ID)입니다. 이 정보는 master 데이터베이스의 syslogins 테이블에 있습니다. 각 SID는 서버의 각 로그인마다 고유합니다.

41

NTDomainName

nvarchar

사용자가 속한 Windows 도메인입니다.

7

NTUserName

nvarchar

Windows 사용자 이름입니다.

6

ObjectID

int

재분할에 관련된 해시 팀의 루트 노드 ID입니다. 실행 계획의 노드 ID와 일치합니다.

22

RequestID

int

문을 포함하는 요청의 ID입니다.

49

ServerName

nvarchar

추적 중인 SQL Server 인스턴스의 이름입니다.

26

SessionLoginName

nvarchar

세션을 시작한 사용자의 로그인 이름입니다. 예를 들어 Login1을 사용하여 SQL Server에 연결하고 Login2로 문을 실행할 경우 SessionLoginName은 Login1을 표시하고 LoginName은 Login2를 표시합니다. 이 열은 SQL Server 및 Windows 로그인을 모두 표시합니다.

64

SPID

int

이벤트가 발생한 세션의 ID입니다.

12

StartTime

datetime

이벤트가 시작된 시간입니다(사용 가능한 경우).

14

TransactionID

bigint

시스템이 할당한 트랜잭션의 ID입니다.

4

XactSequence

bigint

현재 트랜잭션을 설명하는 토큰입니다.

50

참고 항목

개념

해시 조인 이해

관련 자료

이벤트 모니터링
sp_trace_setevent(Transact-SQL)

도움말 및 정보

SQL Server 2005 지원 받기

변경 내역

릴리스 내역

2005년 12월 5일

새로운 내용
  • Hash Warning 이벤트를 내보내는 쿼리 튜닝 연산자를 확인하려면 Showplan 이벤트 클래스도 수집해야 한다는 참고를 추가했습니다.