Niektóre wstępne zastrzeżenia:
- Powszechnie znany jako najgorszy praktyce nigdy kurczyć pliku bazy danych lub danych produkcja (Pliki dziennika to kolejny problem, ponieważ kwestia ta opowiada o). Radzę ludziom, aby nie zmniejszali swoich baz danych w postach na blogach, takich jak ten, w których mówię o „odpowiednim dopasowaniu” i dobrym planowaniu. Nie jestem tam sam ( Paul Randal , Brent Ozar , tylko po to, żeby podać jeszcze kilka linków). Zmniejszenie indeksów plików danych lub fragmentów bazy danych, jest powolne i pracochłonne dla zasobów, może powodować drenaż w systemie i jest po prostu złym posunięciem, ogólnie rzecz biorąc
- W tym przypadku wszyscy wiemy, że istnieje ryzyko, jesteśmy gotowi sobie z tym poradzić, ale uwolniliśmy dużo miejsca, o którym wiemy , że nigdy więcej nie będziemy potrzebować. Tak więc w tym konkretnym przypadku zmniejszanie ma sens jako jedna z naszych opcji.
Jeśli przeczytałeś o obawach i ryzyku i nadal musisz to zmniejszyć, ponieważ zwolniłeś znaczną ilość miejsca, mam nadzieję, że reszta tej odpowiedzi ci pomoże. Ale rozważ ryzyko.
Istnieją dwa główne podejścia, które dwa rozważają tutaj:
1.) Zmniejszenie Tak, wykonaj rzeczywiste zmniejszenie - rozważ użycie DBCC SHRINKFILE
zamiast tego DBCC SHRINKDATABASE
, masz większą kontrolę nad tym, co się kurczy i jak. To z pewnością spowoduje pewne pogorszenie wydajności - jest to duża operacja wykonująca wiele operacji wejścia / wyjścia. Można potencjalnie uciec z powtarzających się kurczy się o wielkości docelowej, która staje się coraz mniejsza.
To jest przykład „A.)” w powyższym DBCC SHRINKFILE
linku. W tym przykładzie plik danych jest zmniejszany do docelowego rozmiaru 7 MB. Ten format jest dobrym sposobem wielokrotnego zmniejszania się, gdy pozwala na to okno przestoju. Zrobiłbym to podczas testowania rozwoju, aby zobaczyć, jak wygląda wydajność i jak nisko / wysoko można zwiększyć, i określić oczekiwany czas produkcji. Jest to operacja online - możesz ją uruchomić, gdy użytkownicy w systemie uzyskują dostęp do bazy danych, której rozmiar jest zmniejszony, ale nastąpi spadek wydajności, prawie gwarantowany. Dlatego najlepiej monitoruj i oglądaj, co robisz na serwerze, wybierz okno przestoju lub okres lżejszej aktywności.
USE YourDatabase;
GO
DBCC SHRINKFILE (DataFile1, 7);
GO
Zawsze pamiętaj: - za każdym razem, gdy się zmniejszasz, fragmentuj swoje indeksy i powinieneś wykonać przebudowę indeksu, jeśli zamierzasz się zmniejszać w kawałkach przez dłuższy czas. Teraz ponosisz ten koszt za każdym razem, jeśli nie możesz tego zrobić w jednym oknie.
2.) New Database - Ty mógł utworzyć nową bazę danych i migracji do niego. Będziesz musiał utworzyć skrypt dla pustej bazy danych i wszystkich jej kluczy, indeksów, obiektów, procesów, funkcji itp., A następnie migrować do niej dane. Możesz do tego napisać skrypty lub użyć narzędzia takiego jak SQL Data Compare z Red Gate lub innych dostawców z podobnymi narzędziami. Jest to więcej pracy konfiguracyjnej po twojej stronie, więcej prac rozwojowych i testowania, a w zależności od środowiska może również zdmuchnąć okno przestoju, ale jest też opcja do rozważenia.
Kiedy jestem zmuszony zmniejszyć bazę danych
Gdyby to było moje środowisko, chciałbym zostawić sporą / dużą ilość białej przestrzeni w pliku danych, ponieważ lubię być wieprzowym dyskiem i być przygotowanym na przyszły / nieoczekiwany wzrost. Byłbym w porządku, oddając spację, jeśli po prostu usunęliśmy większość miejsca, ale nigdy nie ufam tym, którzy mówią „ale nigdy więcej nie odrośnie” i nadal pozostawiają trochę białego miejsca. Trasa, którą prawdopodobnie wybrałbym ( westchnienie) to podejście zmniejszające się, gdybym miał mniejsze okna przestojów i nie chciałem ponosić złożoności tworzenia pustej bazy danych i migracji do niej danych. Więc zmniejszałbym go kilka razy przyrostowo (w oparciu o to, ile razy myślałem, że muszę opierać się na testowaniu w dev i pożądanym rozmiarze. Stopniowo wybierając mniejszy rozmiar pliku), a następnie odbudować indeksy ... A potem „ nigdy nie mów nikomu, że zmniejszyłem swoją bazę danych ;-)