재구성 및 축소는 실제로 권장되지 않습니다.
데이터베이스가 오프라인에서 제공하는 앱을 사용할 수있는 경우 축소하기 전에 모든 인덱스와 기본 / 외부 키 제약 조건을 제거하여 프로세스 속도를 높이고 인덱스 조각화를 줄일 수 있습니다. 현재 존재하지 않는 색인 페이지가 아닌 데이터 페이지가 섞여서 프로세스 속도가 빨라집니다.) 모든 색인과 키를 다시 작성하십시오.
축소 후 인덱스를 다시 작성하면 인덱스가 크게 조각화되어서는 안된다는 것을 의미하며 축소 중에 인덱스를 다시 작성하면 나중에 다시 조각화를 일으킬 수있는 파일 내의 페이지 할당에 많은 작은 "구멍"이 남지 않습니다.
응용 프로그램을 오프라인으로 할 수있는 경우 다른 옵션은 모든 데이터를 동일한 구조의 새로운 데이터베이스로 마이그레이션하는 것입니다. 빌드 프로세스가 확실하면 현재 DB에서 데이터베이스를 생성하지 않으면 빈 DB를 빠르게 빌드 할 수 있어야합니다 (현재 데이터베이스의 백업을 복원하고 테이블의 모든 내용을 자르거나 삭제하고 전체 축소를 수행).
많은 인덱싱 된 데이터 (이 경우 100 %)를 변경할 때 훨씬 효율적일 수 있으므로 대상의 모든 인덱스를 삭제하고 나중에 다시 생성 할 수 있습니다. 복사 프로세스 속도를 높이려면 다른 물리적 드라이브에있는 대상 데이터베이스의 데이터 파일을 소스로 가져 오십시오 (헤드 이동 감소에 신경 쓸 필요가없는 SSD를 사용하지 않는 한), 데이터를 이동할 수 있습니다 완료되면 소스 위치로.
또한 원본 복사본을 비우지 않고 새 대상으로 만드는 경우 모든 현재 데이터와 몇 개월 분량의 성장을 포함하는 초기 크기로 대상을 생성하면 데이터 복사가 조금 더 빨라집니다. 프로세스 전체에 걸쳐 새로운 공간을 매번 할당하지는 않습니다.
데이터를 새로운 데이터베이스로 마이그레이션하면 축소 작업의 의도 된 동작이 복제되지만 조각화가 훨씬 적으므로 재구성 및 축소의 의도하지 않은 결과로 인해 축소를 사용하는 것보다 낫습니다. 축소는 단순히 파일의 끝에서 블록을 가져와 처음에 가까운 공간에 배치하여 관련 데이터를 함께 유지하려는 노력을 기울이지 않습니다.
나중에 부분적으로 사용되는 페이지가 적을 가능성이 높으므로 결과는 공간적으로 더 효율적일 것으로 생각됩니다. 축소는 부분 사용 된 페이지를 이동 시키며, 특히 테이블의 클러스터 된 키 / 인덱스 (테이블이있는 경우) 순서대로 대상에 삽입하고 다른 인덱스를 생성하는 경우 데이터를 이동하면 전체 페이지가 생성 될 가능성이 높습니다. 데이터가 모두 마이그레이션 된 후
당신이 경우 물론 당신이 애플 리케이션은 단지 수축을 수행하는 모든 오프라인 취할 수없는 경우에하는 것은 그래서 당신의 유일한 옵션입니다 정말로 그와 함께 공간 이동을 회수 할 필요가있다. 데이터, 액세스 패턴, 공통 작업 세트 크기, 서버의 RAM 용량 등에 따라 추가 내부 조각화가 그다지 중요하지 않을 수 있습니다.
복사 작업의 경우 SSIS 또는 기본 T-SQL도 마찬가지로 작동합니다 (SSIS 옵션의 효율성은 떨어지지 만 나중에 유지 관리가 더 쉬울 수 있음). 인덱스와 함께 마지막에 FK 관계를 만들면 두 경우 모두 간단한 "각 테이블에 대해 복사"를 수행 할 수 있습니다. 물론 일회성, 축소 + 재구성도 괜찮을 것입니다.하지만 정기적 인 축소를 고려하지 않도록 사람들을 놀라게하고 싶습니다! (사람들이 매일 일정을 잡는 것을 알고 있습니다).