Chociaż kurczenie się jest rzeczywiście niebezpieczne z powodów wymienionych tutaj. Pomiędzy odpowiedzią Jimbo a odpowiedzią Johna jest szczęśliwy środek ... Zawsze powinieneś poważnie rozważyć, czy chcesz zmniejszyć bazę danych.
W idealnym świecie - stworzyłbyś DB z dużą ilością wolnego miejsca, w którym mógłbyś rosnąć. Nazywam to „właściwym dopasowaniem” do swojej bazy danych. Pozwoliłbyś, aby ta wolna przestrzeń była na miejscu i nie starała się jej oddać i utrzymywała swój całkowity rozmiar dokładnie na użytym rozmiarze. Ponieważ twoja baza danych w końcu znów wzrośnie .. Wtedy znowu się skurczysz .. I utkniesz w tym okropnym wzorze bezużytecznych skurczów, po których następują wzrosty - i przez cały czas, jak niektórzy zauważyli, będziesz zwiększenie fragmentacji indeksu.
Napisałem o tym na blogu, gdzie napominałem ludzi, by „ Nie dotykaj tego przycisku zmniejszania! ”, Ale czasami… Czasami musisz. Jeśli masz dużą bazę danych, po prostu zwolniłeś znaczną ilość miejsca i nie spodziewaj się, że odrośnie w niej - cóż, możesz rozważyć skurczenie się jako operację jednorazową, o ile będziesz w stanie zająć się fragmentacją indeksu po odbudowie im. Operacja obkurczania może być czasochłonna, dlatego warto zaplanować ją na czas, w którym można zapłacić tę cenę za obkurczanie. Podejście polegające na tworzeniu pustej bazy danych i kopiowaniu do niej danych działa - ale może to stać się bardzo trudne w przypadku większych baz danych i dużej ilości danych.
Jeśli planujesz dodać tę przestrzeń z powrotem do bazy danych poprzez normalne wykorzystanie i wzorce wzrostu w przyszłości, możesz po prostu zostawić to miejsce.
Również
Powiedziałeś, że „wyczyściłeś” swój dziennik transakcji. Byłbym ciekawy, jak to zrobiłeś, ale kiedy czytasz post, który udostępniłem i inne w serii, zobaczysz kilka wskazówek na temat zarządzania dziennikiem transakcji. Ale w skrócie - jeśli jesteś w trybie pełnego odzyskiwania, powinieneś regularnie wykonywać kopie zapasowe dziennika, aby dziennik sam się nie używał. W przeciwnym razie - bez tworzenia kopii zapasowych dziennika w trybie pełnym - plik dziennika stale rośnie i rośnie i zawsze rośnie i zawsze zapisuje to, co zrobiłeś, ponieważ powiedziałeś SQLowi, że nie chcesz tylko utrzymywać tego dziennika w celu przywrócenia go po awarii, ale chcesz zachować ręczne tworzenie kopii zapasowej, aby odtworzyć transakcje / cofnąć transakcje, aby odzyskać dane do określonego momentu w celu odzyskania ... Jeśli jesteś prosty i widzisz nadmierny wzrost dziennika,BEGIN TRAN ... do work.... COMMIT TRAN
lub czy wydałeś tylko jedną dużą DELETE
instrukcję i usunąłeś cały bałagan danych w jednej niejawnej transakcji).
Zakładam również, że szukasz wolnego miejsca w systemie plików. Jeśli szukasz go w SQL i w tym dużym pliku, który masz - być może czekasz na zakończenie czyszczenia duchów, jeśli patrzysz bezpośrednio po operacji. Paul Randal bloguje o Ghost Cleanup .
Po usunięciu danych SQL Server rezerwuje miejsce do późniejszego wykorzystania do wstawiania nowych danych. Musisz zmniejszyć bazę danych. Więcej informacji znajdziesz tutaj .
źródło
Znalazłem to, ponieważ właśnie usunąłem kilka tabel kopii zapasowych, ponieważ moja baza danych „osiągnęła maksymalny poziom”. Patrzyłem na właściwość „Rozmiar”, zastanawiając się, dlaczego to się nie zmniejsza? . Po przeczytaniu tego nie nie chcę zmniejszać bazy danych. Chcę „odzyskać” miejsce na śmieci, które właśnie usunąłem. Musiałem się przyjrzeć „Dostępnej przestrzeni”. Myślę, że może to też ktoś inny może na to patrzeć .?*
źródło
Warto również zauważyć, że jeśli tabela zawiera indeksy, fragmentacja może istnieć po usunięciu dużych obszarów danych. Miałem dzisiaj stolik, który zawierał około 70 milionów rekordów, zajmując około 13 GB. Wyczyściłem go do 1639 rekordów (resztę wygenerował pojedynczy błąd), ale tabela nadal zajmowała około 4,5 GB. Po przebudowaniu wszystkich indeksów na stole zajmowało tylko 85 stron (680 kb). Następnie użyłem przyrostowego pliku zmniejszania, aby odzyskać miejsce (i naprawiłem błąd w systemie, aby zapobiec powtórzeniu).
źródło