2013-01-24 3 views
11

50,000,000 개의 레코드가있는 테이블이있는 테스트 데이터베이스가 있습니다. 표에는 처음에 50 개의 열이있었습니다. 테이블에 인덱스가 없습니다. "sp_spaceused"프로 시저를 실행하면 결과적으로 "24733.88 MB"가됩니다. 이제이 데이터베이스의 크기를 줄이기 위해 15 개의 열 (대부분 int 열)을 제거하고 "sp_spaceused"를 실행했지만 결과적으로 "24733.88 MB"를 얻습니다.열을 삭제해도 데이터베이스 크기가 줄어들지 않습니다.

왜 많은 열을 제거한 후 데이터베이스 크기가 줄어들지 않습니다? 내가 여기서 아무것도 놓치고 있니?

편집 : 나는 축소 데이터베이스를 시도했지만 도움이되지 않았다 중 하나

답변

19

다음 명령을 실행 해보십시오 참조 :

DBCC CLEANTABLE ('dbname', 'yourTable', 0) 

그것은 것입니다 테이블 또는 인덱싱 된 뷰에서 떨어 가변 길이 열이없는 공간. 더 많은 정보는 여기 DBCC CLEANTABLE 그리고 여기 Space used does not get changed after dropping a column

또한 정확히이 답변에 대한 첫 번째 의견에 게시 된 지적했다. DBCC CLEANTABLE 명령을 실행 한 후에는 클러스터 된 인덱스를 다시 가져와 테이블에 공간이 있으면 다시 가져와야합니다.

ALTER INDEX IndexName ON YourTable REBUILD 
+1

이 링크에서 비슷한 해결책을 찾았습니다. http://stackoverflow.com/questions/807579/how-to-reduce-size-of-sql-server-table-that-grew-from-a-datatype-change 지금 시도 중입니다! 감사! – Vinod

+0

@Vinod, 유용한 경우 다른 사람이 정답인지 확신 할 수 있도록 응답 된 체크 표시를 확인하는 것을 잊지 마십시오. – Yaroslav

+0

글쎄, 쿼리를 실행하고 데이터베이스가 45GB로 증가했습니다. 데이터베이스 축소를 실행 한 후 원본 24733.88MB로 다시 돌아 왔습니다. 나는 무슨 일이 일어나고 있는지 모르겠다 !!! :-( – Vinod

1

당신은 객체를 삭제 한 때문에 데이터베이스 크기는 단순히 축소되지 않습니다. 데이터베이스 서 v는 대개 후속 데이터 삽입 또는 새 오브젝트에 사용될 교정 된 공간을 보유합니다.

해제 된 공간을 다시 확보하려면 데이터베이스 파일을 축소해야합니다. How do I shrink my SQL Server Database?

+0

내 편집에서 언급처럼, 나는 이미 파일을 내 데이터베이스를 축소 및 로그 노력했다. 도움이되지 않았어! – Vinod

3

가변 길이 열을 테이블에서 삭제하면 테이블 크기가 줄어들지 않습니다. 테이블 크기는 인덱스가 재구성되거나 다시 빌드 될 때까지 동일하게 유지됩니다.

이전에는 가변 길이 열로 채워진 공간을 다시 확보하는 데 사용할 수있는 DBCC 명령 DBCC CLEANTABLE도 있습니다. 여기 구문입니다

DBCC CLEANTABLE ('MyDatabase','MySchema.MyTable', 0)WITH NO_INFOMSGS; 
GO 

주권

관련 문제