tempdb 성장을 유발 한 SQL 문을 찾는 방법은 무엇입니까?


26

서버의 tempdb (SQL Server 2008)는 매월 여러 번 500GB 이상으로 증가합니다. 이 문제를 일으킨 SQL 문을 찾을 수 있습니까? 이 문제는 일반적으로 발생 create table #temp...; insert into #temp...하거나 select ... into #temp...복잡한 조인으로 인해 발생하지 않습니다 .

일부 tempdb 파일 의 초기 크기 는 매번 훨씬 더 큰 값으로 자동 설정됩니다. 그것을 방지하는 방법?

때때로 캐시 된 계획은 파일 크기 조정 / 수축을 방지합니다. tempdb를 보유한 것을 찾는 방법은 무엇입니까?


1
거의 오전 2시 이며이 질문에 완전히 대답하기 위해 가스가 부족합니다. 그러나 다른 답변을 기다리는 동안이 URL이 유용 할 수 있습니다 -mssqltips.com/sqlservertip/1432/… and google.com/search?q= which + query + are + using + tempdb
Aaron Bertrand

답변:


27

tempdb 사용을 추적하는 데 사용할 수있는 3 개의 DMV가 있습니다.

처음 두 개를 사용하면 쿼리 및 세션 수준에서 할당을 추적 할 수 있습니다. 세 번째는 버전 저장소, 사용자 및 내부 객체에 대한 할당을 추적합니다.

다음 예제 쿼리는 세션 당 할당을 제공합니다.

SELECT
  sys.dm_exec_sessions.session_id AS [SESSION ID]
  ,DB_NAME(database_id) AS [DATABASE Name]
  ,HOST_NAME AS [System Name]
  ,program_name AS [Program Name]
  ,login_name AS [USER Name]
  ,status
  ,cpu_time AS [CPU TIME (in milisec)]
  ,total_scheduled_time AS [Total Scheduled TIME (in milisec)]
  ,total_elapsed_time AS    [Elapsed TIME (in milisec)]
  ,(memory_usage * 8)      AS [Memory USAGE (in KB)]
  ,(user_objects_alloc_page_count * 8) AS [SPACE Allocated FOR USER Objects (in KB)]
  ,(user_objects_dealloc_page_count * 8) AS [SPACE Deallocated FOR USER Objects (in KB)]
  ,(internal_objects_alloc_page_count * 8) AS [SPACE Allocated FOR Internal Objects (in KB)]
  ,(internal_objects_dealloc_page_count * 8) AS [SPACE Deallocated FOR Internal Objects (in KB)]
  ,CASE is_user_process
             WHEN 1      THEN 'user session'
             WHEN 0      THEN 'system session'
  END         AS [SESSION Type], row_count AS [ROW COUNT]
FROM 
  sys.dm_db_session_space_usage
INNER join
  sys.dm_exec_sessions
ON  sys.dm_db_session_space_usage.session_id = sys.dm_exec_sessions.session_id

일정 기간 동안 사용량을 추적하려면 Kendra Little에서 설명한 대로 sp_whoisactive로 데이터를 수집하십시오 .


3
감사. 세션 의 차이 [SPACE Allocated FOR USER Objects (in KB)][SPACE Deallocated FOR USER Objects (in KB)]실제 점유 공간이 있습니까?
u23432534

4

여러 가지 문제의 원인이있을 수 있습니다.

  • 테이블 변수 또는 임시 테이블 사용
  • SQL Server는 tempdb에서 작업 테이블로 중간 결과 집합을 만들었습니다. 일반적으로 정렬 목적으로 (일반적으로 인덱스가 없거나 오래된 통계입니다.)
  • SQL Server는 테이블 반환 함수의 결과 집합을 사전 평가하기로 결정 했으며이 경우 tempdb에 데이터를 저장합니다.
  • 옵션으로 인덱스 재 작성 SORT_IN_TEMPDB = ON
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.