류짱:Beyond MySelf

tempdb의 디스크 공간 본문

Microsoft/MS SQL

tempdb의 디스크 공간

リュちゃん 2010. 10. 26. 10:17

아래 글은 SQL 공부 중 도움말에서 퍼온 글입니다....

tempdb
 
시스템 데이터베이스는 SQL Server 인스턴스에 연결된 모든 사용자가 사용할 수 있는 전역 리소스입니다tempdb 데이터베이스는 사용자 개체, 내부 개체 및 버전 저장소를 저장하는 데 사용합니다. SQL Server 2005서버는 tempdb에 이전 버전의 SQL Server보다 많은 디스크 공간이 필요합니다.

sys.dm_db_file_space_usage 동적 관리 뷰를 사용하여 tempdb 파일에서 사용자 개체, 내부 개체 및 버전 저장소에 사용되는 디스크 공간을 모니터링할 수 있습니다.

또한 sys.dm_db_session_space_usage sys.dm_db_task_space_usage 동적 관리 뷰를 사용하면 세션이나 작업 수준에서 tempdb의 페이지 할당 또는 할당 취소 작업을 모니터링할 수 있습니다.

이러한 뷰를 사용하면 tempdb 디스크 공간을 많이 사용하는 큰 쿼리, 임시 테이블 또는 테이블 변수를 식별할 수 있습니다
.

tempdb 디스크 공간 문제 진단


다음 표에는 tempdb 테이블의 디스크 공간 부족을 나타내는 오류 메시지가 나열됩니다. 이러한 오류는 SQL Server 오류 로그에서 확인할 수 있으며 실행 중인 응용 프로그램에 반환될 수도 있습니다.

오류

발생 조건

1101 또는 1105

세션에서 tempdb에 공간을 할당해야 하는 경우

3959

버전 저장소가 꽉 찬 경우. 이 오류는 일반적으로 로그에서 1105 또는 1101 오류 다음에 나타납니다.

3967

tempdb가 꽉 차서 버전 저장소를 줄여야 하는 경우

3958 또는 3966

트랜잭션이 tempdb에서 필요한 버전 레코드를 찾을 수 없는 경우

tempdb 디스크 공간 문제는 또한 자동 증가로 설정된 데이터베이스에서 데이터베이스 크기가 빠르게 증가할 때에도 나타납니다.

[TempDB가 늘어나도록 하는 원인 정보 확인 쿼리]

DECLARE @FileName VARCHAR(MAX)
SELECT @FileName = SUBSTRING(path, 0, LEN(path)-CHARINDEX('\', REVERSE(path))+1) + '\Log.trc'
FROM sys.traces
WHERE is_default = 1;
SELECT
gt.NTUserName,
gt.HostName,
gt.NTDomainName,
gt.LoginName,
gt.StartTime,
gt.EndTime,
gt.SPID
FROM sys.fn_trace_gettable( @FileName, DEFAULT ) AS gt
WHERE gt.DatabaseID = 2
AND gt.EventClass = 92

[해당 쿼리 명을 알고 싶으면]
dbcc inputbuffer(<spid>)
명령을 하시면 됩니다.

) spid 52인 경우
dbcc inputbuffer(52)

[참고 자료]
Working with tempdb in SQL Server 2005
http://technet.microsoft.com/en-us/library/cc966545.aspx

tempdb의 디스크 공간 부족 문제 해결
http://msdn.microsoft.com/ko-kr/library/ms176029(v=SQL.90).aspx