To pytanie jest tutaj zadawane w różnych formach, ale sprowadza się do:
Wiem, że zmniejszenie bazy danych jest ryzykowne. W tym przypadku usunąłem tyle danych i nigdy więcej ich nie użyję.
- Jak mogę zmniejszyć swoją bazę danych? Jakie pliki mam zmniejszać?
- Jakie powinny być moje uwagi podczas tego?
- Czy powinienem coś zrobić później?
- Co jeśli jest to duża baza danych? Czy mogę go zmniejszać stopniowo?
sql-server
shrink
Mike Walsh
źródło
źródło
Odpowiedzi:
Niektóre wstępne zastrzeżenia:
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 tegoDBCC 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.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 ;-)
źródło
DBCC SHRINKFILE
polecenia. Zależy od serwera, z ilu plików składa się baza danych. Prosta baza danych ma jeden plik bazy danych i jeden plik dziennika transakcji.Wszyscy wiemy, że nie zaleca się regularnego wykonywania SHRINK. Staram się pomijać wszystkie ostrzeżenia i zastrzeżenia, które prawdopodobnie i tak znasz. Utwórz kopię zapasową i nie rób tego w domu, jeśli to możliwe :)
Bonus: w środowisku replikacji, jeśli wykonasz to w bazie danych wydawcy, nie spowoduje to zmniejszenia baz danych subskrybentów (co może mieć problem z rozmiarem, ponieważ są to wersje Express).
Wreszcie mój skrypt reindex:
Jedyną zmienną w tym jest 14, które można uzyskać wydając polecenie select
DB_ID('YourDBName')
, a skrypt zakłada, że interesują Cię tylko tabele w schemacie dba. *.źródło
Słyszeliście wszystkie ostrzeżenia o kurczeniu się baz danych i wszystkie one są prawdziwe. Rozdrobni on twoje indeksy i ogólnie zniszczy bazę danych i nie powinien być wykonywany w systemie produkcyjnym.
Ale generalnie robię to co tydzień, gdy przywracam kopię zapasową na stacji roboczej z powodu miejsca na dysku SSD. Pamiętaj, że nie napisałem tego skryptu, ale znalazłem go lata temu. W innych bazach danych [250 GB] utworzyłem pakiet SSIS, który przeniesie potrzebne mi tabele, a następnie odtworzę indeksy dla tak och świeżego indeksu.
źródło
Poniższy cytat pochodzi bezpośrednio od firmy Microsoft (dotyczy wersji 2008-2016) i zawiera wskazówki dotyczące tego, czy / kiedy i jak należy użyć tego
DBCC SHRINKFILE
polecenia.https://msdn.microsoft.com/en-us/library/ms189493.aspx
źródło