본문 바로가기
프로그래밍/TSQL

[MSSQL] TEMPDB 용량 축소, 관리 구문

by 정리 습관(★arranging★) 2023. 6. 8.
728x90

SELECT 시에 TEMPDB를 많이 사용하는 케이스에서 여러 사용자가 동일한 작업을 수행 했을때
TEMPDB경합으로 인해 DB 성능이 나오지 않는 경우가 있습니다.

보통 TEMPDB는 CPU 논리프로세스개수까지 나누어 관리하는게 병합을 막을 수 있는 조치이며
경우에 따라서는 격리수준을 조정해서 해결가능했습니다.

--TEMPDB경합발생 https://learn.microsoft.com/ko-kr/troubleshoot/sql/database-engine/performance/recommendations-reduce-allocation-contention
--TEMPDB는 CPU개수 정도로 잡는게 좋음
--프로시저 캐시
DBCC FREEPROCCACHE
GO

-- Buffer Pool에 존재하는 데이터 페이지를 제거
DBCC DROPCLEANBUFFERS
Go

--사용 하지 않는 모든 캐시 삭제
DBCC FREESYSTEMCACHE ('ALL')
GO

exec sp_helpdb tempdb
/*
  select DB_NAME(mf.database_id) database_name
    , mf.name logical_name, mf.file_id
    , CONVERT (DECIMAL (20,2)
    , (CONVERT(DECIMAL, size)/128)) as [file_size_MB]
    , CASE mf.is_percent_growth
    WHEN 1 THEN 'Yes'    ELSE 'No'    END AS [is_percent_growth]
    , CASE mf.is_percent_growth
    WHEN 1 THEN CONVERT(VARCHAR, mf.growth) + '%'
    WHEN 0 THEN CONVERT(VARCHAR, mf.growth/128) + ' MB'
    END AS [growth_in_increment_of]
    , CASE mf.is_percent_growth
    WHEN 1 THEN CONVERT(DECIMAL(20,2)
    ,(((CONVERT(DECIMAL, size)*growth)/100)*8)/1024)
    WHEN 0 THEN CONVERT(DECIMAL(20,2)
    , (CONVERT(DECIMAL, growth)/128))
    END AS [next_auto_growth_size_MB]
    , physical_name from sys.master_files mf
    where database_id =2 and type_desc= 'rows'

 
*/
dbcc shrinkfile (tempdev,1024)
dbcc shrinkfile (templog,1024)
dbcc shrinkfile (temp2,1024)
dbcc shrinkfile (temp3,1024)
dbcc shrinkfile (temp4,1024)
dbcc shrinkfile (temp5,1024)
dbcc shrinkfile (temp6,1024)
dbcc shrinkfile (temp7,1024)
dbcc shrinkfile (temp8,1024)

--삭제하려면
--DBCC SHRINKFILE (LogicalName, EMPTYFILE);
--GO
--ALTER DATABASE tempdb REMOVE FILE LogicalFileName;
--GO

 

사용했던 구문을 정리해두었습니다.

TEMPDB 용량을 축소하거나 삭제할때 
캐시를 비우지 않거나 사용중인 경우 처리되지 않는 경우가 있으니 참고하시기바랍니다.

댓글