프로덕션 환경에서 Tempdb를 축소하는 모범 사례


24

SQL Server 2008에서 임시 DB를 축소 할 때 사용하는 가장 좋은 방법은 무엇입니까?

다음을 사용하는 것이 위험합니까?

use tempdb
GO

DBCC FREEPROCCACHE -- clean cache
DBCC DROPCLEANBUFFERS -- clean buffers
DBCC FREESYSTEMCACHE ('ALL') -- clean system cache
DBCC FREESESSIONCACHE -- clean session cache
DBCC SHRINKDATABASE(tempdb, 10); -- shrink tempdb
dbcc shrinkfile ('tempdev') -- shrink db file
dbcc shrinkfile ('templog') -- shrink log file
GO

-- report the new file sizes
SELECT name, size
FROM sys.master_files
WHERE database_id = DB_ID(N'tempdb');
GO

가장 좋은 방법은 성장하는 것을 해결하고 해결하는 것입니다. 당신이 그것을 축소하면 그냥 다시 성장하는 그 시간과 IO 소요
Nick.McDermaid

예, 알아요 그러나 내가해야 할 때, 사전 예방 조치를 늦게하십시오 :) 이것이 최선의 해결책입니까?

거기서 도와 드릴 수 없어서 미안합니다.
Nick.McDermaid

답변:


11

Tempdb의 일반적인 사용법을 사전에 모니터링하고 그에 따라 크기를 설정하는 것이 가장 좋습니다. Tempdb가 이러한 크기와 PROD 환경으로 성장한 경우는 매주 유지 관리 중에 SQL Server 서비스를 다시 시작합니다. 그 후 Tempdb는 구성된 크기로 돌아갑니다.

Tempdb를 사용하지 않는 한 파일 축소는 괜찮습니다. 그렇지 않으면 차단 및 교착 상태로 인해 기존 트랜잭션이 성능 관점에서 영향을받을 수 있습니다.

클리닝 프로 시저 캐시, 버퍼 캐시 등은 다시 작성되지 않을 때까지 데이터베이스 성능 자체에 부정적인 영향을 미칩니다. 나는 PROD에서 이것을하지 않을 것입니다.

희망이 도움이됩니다!


godd 입력 주셔서 감사합니다. sp_who로 tempdb의 프로세스를 검사하는 것으로 충분합니까?

1
나는 그것이 temp db가 사용되고 있는지 알아내는 신뢰할 수있는 방법이라고 생각하지 않습니다. 누군가가 SSMS에서 직접 임시 테이블을 직접 생성하는 경우에만 나타납니다. 그러나 메모리 유출 등으로 인한 쿼리 작업의 결과로 동일한 작업이 수행되면 sp_who2에 나타나지 않습니다. 그 질문은 사실 별도의 스레드 일 것입니다. 별도의 토론이므로 작성하십시오. 이전 답변이 도움이 되었다면 답변으로 표시하십시오. 비슷한 상황에 처한 사람들에게 도움이 될 것입니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.