Mam bazę danych SQL Server (2008 R2 SP1), która miała około 15 koncertów. Okazuje się, że konserwacja nie była uruchomiona od dłuższego czasu, więc stworzyłem plan konserwacji, aby odbudować wszystkie indeksy, były bardzo rozdrobnione.
Zadanie zakończone i fragmentacja zniknęła, ale teraz baza danych zawiera ponad 120 koncertów! Rozumiem, że użyłby dodatkowej przestrzeni do przeprowadzenia wszystkich przebudów, ale teraz, gdy zadanie zostało wykonane, sądzę, że cała ta przestrzeń byłaby wolną przestrzenią, ale wolne miejsce pokazuje tylko 3 koncerty, więc używa się 117 koncertów nawet jeśli zadanie odbudowywania indeksu zostało zakończone.
Jestem bardzo zdezorientowany i mogę skorzystać z pewnych wskazówek, mam przywrócić db do rozsądnego rozmiaru, nie mamy na to miejsca na dysku.
Z góry dziękuję!
Oto wyniki obu wysłanych zapytań:
log_reuse_wait_desc NIC
name TotalSpaceInMB UsedSpaceInMB FreeSpaceInMB
LIVE_Data 152 123 28
LIVE_Log 18939 89 18849
LIVE_1_Data 114977 111289 3688
Trzeci plik to plik .ndf, który pokazuje tylko 3688 w nieużywanym miejscu, ale 111289 jest używany na około 15 gigabajtów danych.
Odbudowywanie indeksów powoduje dodatkowe luki w bazie danych. Jest to naturalny produkt uboczny procesu ponownego indeksowania - serwer buduje nową, miejmy nadzieję, ciągłą wersję indeksu obok bieżącej wersji, a następnie kończy bieżącą wersję po jej zakończeniu.
Kurczenie się po reindeksowaniu nie ma sensu!
Po prostu ponownie fragmentujesz indeks! Zmniejszenie usuwa luki, przenosząc dane w bazie danych.
Oto fajny artykuł od Paula Randala, który podczas pracy w Microsoft był odpowiedzialny za
DBCC
kod, w tym także za skurcze, dlaczego nie powinieneś się kurczyć.źródło
Powinieneś był skorzystać z opcji przebudowy
SORT_IN_TEMPDB=ON
.W twoim przypadku do sortowania indeksów użyto rzeczywistych plików danych, w których znajdują się dane tabele. Duża część tego 120 GB miejsca jest nadal nieużywana i w razie potrzeby zostanie wypełniona danymi strony.
Możesz zobaczyć status wykorzystanego / wolnego miejsca w tym zapytaniu (wzięte stąd ):
Aby zmniejszyć konkretny plik bazy danych (danych lub dziennika), możesz zobaczyć tutaj niektóre informacje . Ostrzeżenie przed tym, zwalnianie nieużywanego miejsca zajmuje sporo czasu dla baz danych ponad 100 Gb (zależy również od prędkości przechowywania), więc po prostu pozwól mu działać.
źródło
Podejrzewam, że bez żadnych innych szczegółów musisz wykonać kopię zapasową dziennika transakcji, zanim będziesz mógł odzyskać miejsce.
Zobacz, co
select name, log_reuse_wait_desc from sys.databases
ci mówi. Jeśli kolumna log_reuse_wait_desc mówi,LOG_BACKUP
że nie może odzyskać miejsca, dopóki nie utworzysz kopii zapasowej dziennika tran.źródło