2013-01-24 12 views
11

Mam bazę danych testowych z 1 tabelą zawierającą około 50 milionów rekordów. Tabela początkowo miała 50 kolumn. Tabela nie ma indeksów. Kiedy wykonuję procedurę "sp_spaceused" otrzymuję "24733.88 MB" jako wynik. Teraz, aby zmniejszyć rozmiar tej bazy danych, usuwam 15 kolumn (głównie z kolumn) i uruchamiam "sp_spaceused", otrzymuję "24733.88 MB" jako wynik.Usuwanie kolumny nie zmniejsza rozmiaru bazy danych

Dlaczego rozmiar bazy danych nie zmniejsza się po usunięciu wielu kolumn? Czy tu czegoś brakuje?

Edit: Próbowałem bazy kurczy się, ale to nie pomogło

Odpowiedz

19

Spróbuj uruchomić następujące polecenie:

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

Będzie wolna przestrzeń od spadła kolumn o zmiennej długości w tabelach lub indeksowanych widoków. Więcej informacji tutaj: DBCC CLEANTABLE i tutaj Space used does not get changed after dropping a column

Ponadto, jak słusznie wskazano na link zamieszczony przy pierwszym komentarzu do tej odpowiedzi. Po wykonaniu polecenia DBCC CLEANTABLE, musisz odzyskać indeks klastrowany na wypadek, gdyby tabela miała jeden, aby odzyskać miejsce.

ALTER INDEX IndexName ON YourTable REBUILD 
+1

Znalazłem podobne rozwiązanie pod tym linkiem: http://stackoverflow.com/questions/807579/how-to-reduce-size-of-sql-server-that-grew-from-a-datatype-change Próbuję tego teraz! Dzięki! – Vinod

+0

@Vinod, jeśli był przydatny, nie zapomnij sprawdzić zaznaczonego znacznika wyboru, aby inni mogli być pewni, że to była poprawna odpowiedź. – Yaroslav

+0

Cóż, uruchomiłem zapytanie i baza danych wzrosła do 45 GB. Ponownie uruchomiłem bazę danych, a następnie powróciłem do oryginalnego 2473,88 MB. Nie jestem pewien co się dzieje !!! :-( – Vinod

1

Wielkość bazy danych nie kurczą się po prostu dlatego, że zostały usunięte obiekty. Serwer bazy danych zwykle przechowuje odzyskany obszar, który ma być używany do kolejnych wstawień danych lub nowych obiektów.

Aby odzyskać zwolnioną przestrzeń, należy zmniejszyć plik bazy danych. Zobacz How do I shrink my SQL Server Database?

+0

Jak wspomniałem w moim edycji, Próbowałem już kurczy mojej bazy danych i plików dziennika. To nie pomogło! – Vinod

3

Po zrzuceniu z tabeli dowolnej kolumny o zmiennej długości nie zmniejsza ona rozmiaru tabeli. Rozmiar tabeli pozostaje taki sam, dopóki indeksy nie zostaną zreorganizowane lub odbudowane.

Istnieje również polecenie DBCC DBCC CLEANTABLE, które może być użyte do odzyskania dowolnej przestrzeni poprzednio zajmowanej przez kolumny o zmiennej długości. Oto składnia:

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

Raj

Powiązane problemy