각각 다른 테이블에서 두 개의 DBCC INDEXDEFRAG 명령을 동시에 실행할 수 있습니까?


9

현재 SQL Server 2005 데이터베이스의 모든 테이블에서 한 번에 한 테이블 씩 DBCC INDEXDEFRAG를 수행하는 스크립트를 실행하고 있습니다. 공간 제약 및 가동 시간 요구 사항으로 인해 INDEXDEFRAG 대신 DBCC DBREINDEX를 사용하는 것은 옵션이 아닙니다.

특정 테이블을 조각 모음하는 데 시간이 오래 걸린다는 것을 알았습니다. 예를 들어 "sys.dm_exec_requests"동적 관리 뷰를 검토하면 다음 INDEXDEFRAG가 현재 table_id가 829610394 인 테이블의 클러스터 된 인덱스에서 이탈하고 있음을 알 수 있습니다.

DBCC INDEXDEFRAG (0, 829610394, 1)

조각 모음 프로세스가 완료되기까지 시간이 오래 걸릴 것입니다. 현재 실행중인 스크립트가 결국 모든 테이블을 조각 모음한다는 사실을 제쳐두고, 현재 명령이 실행되는 동안 다른 테이블의 클러스터형 인덱스에서 다른 DBCC INDEXDEFRAG를 수동으로 실행하는 데 해가 있습니까? 이 작업을 수행하면 두 테이블이 실제로 동시에 조각 모음됩니까?

답변:


15

예, 여러 테이블에 대해 할 수 있습니다. 동일한 테이블에서 여러 인덱스에 대해이를 수행 할 수 없습니다.이를 방지하기 위해 새로운 인덱스 잠금 하위 리소스를 발명했습니다. ALTER INDEX ... REORGANIZE에서와 동일한 동작으로 2005 년에이를 대체했습니다.

감사


2
당신은 그것을 쓴 사람보다 더 정확한 답변을 얻을 수 없습니다! 여러 재 빌드 또는 재구성을 동시에 수행하는 것과 관련된 IO로드를 잊지 말고 앞으로 DBCC 명령 대신 ALTER INDEX를 사용하십시오.
AndrewSQL

동의합니다. Paul Randal에서 온 것보다이 특정 문제에 대해보다 정확한 답변을 얻는 것이 어떻게 가능한지 모르겠습니다. 고마워 폴
RelentlessMike

6

DBCC INDEXDEFRAG 및 DBREINDEX는 더 이상 사용되지 않으며 ALTER INDEX로 대체됩니다.

중대한

이 기능은 이후 버전의 Microsoft SQL Server에서 제거 될 예정입니다. 새로운 개발 작업에서이 기능을 사용하지 말고 현재이 기능을 사용하는 응용 프로그램을 가능한 빨리 수정하십시오. 대신 ALTER INDEX를 사용하십시오. -http : //msdn.microsoft.com/en-us/library/ms177571(v=SQL.90).aspx

두 개를 동시에 실행하는 것은 파일 레이아웃에 따라 다릅니다. 이들이 모두 동일한 디스크에있는 경우 I / O를 위해 서로 싸우고 있으므로 속도가 느려질 수 있습니다. 필요할 때만 REORG 또는 REBUILD하는 것이 가장 좋습니다. 자동화 된 솔루션을 보려면 여기에서 Michelle Ufford의 스크립트를 확인하십시오. http://sqlfool.com/2010/04/index-defrag-script-v4-0/


고마워 에릭 이 특정 경우, 데이터베이스는 여러 데이터 파일, 다른 파티션 및 IBM DS8300 SAN 위에 분산됩니다. 따라서 I / O가 진행되는 한 괜찮을 것 같습니다.
RelentlessMike
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.