에 대한 보조 데이터 파일 (.ndf)이 너무 많습니다 tempdb
. 초과 파일을 제거하려면 파일을 비워야합니다 (콘텐츠가 다른 파일로 이동 됨).
DBCC SHRINKFILE('tempdbfile8', EMPTYFILE);
그런 다음 파일을 삭제하십시오.
ALTER DATABASE tempdb REMOVE FILE tempdbfile8;
그러나 EMPTYFILE
명령은 오류를 반환합니다.
DBCC SHRINKFILE: Page 8:41920 could not be moved because it is a work table page.
Msg 2555, Level 16, State 1, Line 2
Cannot move all contents of file "tempdbfile8" to other places to complete the emptyfile operation.
걱정할 필요는 없습니다.이 페이지를 사용하여 무언가를 수행하는 객체를 찾아야합니다.
DBCC TRACEON (3604)
DBCC PAGE(2,8,41920) --dbid=2, fileid=8, pageid=41920
이 명령은 많은 정보 object_id를 반환합니다. 그러나:
Metadata: ObjectId = 0
나는 그것에 대해 어떻게해야할지 모른다. 어떤 고양이가이 페이지를 옮기지 못하게합니까? 해당 객체, 프로세스, 세션 또는 그 밖의 것을 찾는 방법은 무엇입니까? 도움을 주시면 모든 것을 그대로 두거나 다른 파일을 제거하는 것이이 문제에 대한 올바른 해결책이 아닙니다.
편집하다:
프로세서 코어 당 하나의 파일 (동일한 초기 크기, 동일한 성장률)을 만드는 "모범 사례"를 따르기 때문에 파일을 제거하고 있습니다. 그러나 내가 아는 한, 경합 문제가 발생할 때까지 동일한 장치에서 추가 tempdb 파일을 만들 필요는 없습니다. 우리의 경우 MPIO 가 켜져 있고 스토리지 장치가 4 개의 경로를 처리 할 수 있기 때문에 의미가 있습니다 . 그러나 실수가 있었고 6 코어 CPU로 총 5 개의 파일이 생겼습니다. MPIO 경로 이상이고 CPU 코어보다 적으며 짝수가 아닙니다. 문제를 일으키지 않을 수도 있지만 옳지 않은 것처럼 보입니다. :).
마지막으로 문제를 일으킬 것으로 의심되는 데이터베이스 중 하나를 단일 사용자 모드 (롤백 즉시)로 설정하여 서버를 다시 시작하지 않고도 파일을 비우고 제거 할 수있었습니다. 효과가 있었지만 운이 좋았습니다. 내가 정말로 원하는 것은 항상 페이지를 추적 할 수 있도록하는 것입니다 :).
dbcc page ( {'dbname' | dbid}, filenum, pagenum [, printopt={0|1|2|3} ])
솔루션 정보 : 작동하지만 인스턴스를 중단시키지 않고이 작업을 수행하고 싶습니다.