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 용량을 축소하거나 삭제할때
캐시를 비우지 않거나 사용중인 경우 처리되지 않는 경우가 있으니 참고하시기바랍니다.
'프로그래밍 > TSQL' 카테고리의 다른 글
[TSQL]mssql cursor 재사용 방법 (0) | 2023.06.20 |
---|---|
[MSSQL]ID 기준 데이터 복사 구문 동적 쿼리 작성 공유 (0) | 2023.06.08 |
[TSQL]"엄청 빠른 ROW COUNT" COUNT(*) 는 너무 느려 SYS.DM_DB_PARTITION_STATS 을 써보자 (0) | 2023.04.11 |
[MSSQL] bcp 중에 QUOTED_IDENTIFIER 관련 오류 발생 해결 방법 (0) | 2022.08.11 |
[MSSQL] 링크드서버(원격서버) DB인스턴스, 테이블 존재 유무 판단 (0) | 2022.08.09 |
댓글