Pobierz MS SQL Server, aby zwolnić miejsce na dysku

9

Źle zarządzana tabela bazy danych stała się ogromna. 48 + koncerty płyt osieroconych. Próbuję go wyczyścić i przywrócić niebezpiecznie pełny dysk twardy do normalnego stanu. Będę kasować około 400 milionów rekordów z tej tabeli. To działa podczas pisania. Zauważam, że nie widzę żadnego spadku ilości miejsca na dysku twardym, ale widzę spadek pamięci w zapytaniach dotyczących tabel systemowych, biegam, aby uzyskać rozmiar tabeli. Baza danych korzysta z „Simple Recovery Model”.

Istnieje wiele pytań podobnych do tego z odpowiedziami, które mówią, że musisz zmniejszyć bazę danych. Ale wyjaśniają, jak źle to robi ze względu na fragmentację danych itp.

  1. Ponieważ baza danych nie powinna być tego rozmiaru. Czy nadal jest dla mnie złe, aby to zmniejszyć?
  2. To jest produkcyjna baza danych. Jeśli się zmniejszę, spowoduje to przestoje lub zablokowanie bazy danych?
  3. W SQL Server Management Studio masz dwie opcje zmniejszenia, bazy danych lub plików. Biorąc pod uwagę moją sytuację, jaka byłaby najlepsza opcja?
  4. czy istnieje reguła dotycząca procentu wolnego miejsca, które powinna mieć DB?

Nawet czytanie opisu tagu kurczenia sprawia, że ​​nie chcę tego robić. Czy jest inny sposób?

jackncoke
źródło

Odpowiedzi:

14

Będę kasować około 400 milionów rekordów z tej tabeli.

Mamy nadzieję, że robisz to w kawałkach - aby uniknąć wzdęcia dziennika transakcji.

zauważ, że nie widzę żadnego spadku miejsca na dysku twardym

Nie będziesz, ponieważ musisz jawnie zmniejszyć plik bazy danych, aby zwolnić miejsce. Usuwając rekordy, SQL Server nie zwalnia miejsca z powrotem do systemu operacyjnego .

  1. Ponieważ baza danych nie powinna być tego rozmiaru. Czy nadal jest dla mnie złe, aby to zmniejszyć?

Jest to ogólnie zła praktyka, ponieważ bazy danych powinny być odpowiednio traktowane. Jeśli masz 100% pewności, że baza danych NIE będzie ponownie tego rozmiaru, możesz zmniejszyć bazę danych (w twoim scenariuszu) .

  1. To jest produkcyjna baza danych. Jeśli się zmniejszę, spowoduje to przestoje lub zablokowanie bazy danych?

Zmniejszenie bazy danych jest bardzo intensywne we / wy. Wskazane jest, aby kurczyć się DBCC SHRINKFILEpodczas okresu konserwacji lub gdy aktywność jest minimalna.

  1. W studiu zarządzania masz dwie opcje: Baza danych lub Pliki. Biorąc pod uwagę moją sytuację, jaka byłaby najlepsza opcja?

Należy użyć TSQL do zmniejszenia. (ponieważ zapytałeś, zmniejszanie PLIKU jest sposobem na przejście zamiast bazy danych). Możesz użyć kurczącej się bazy danych w porcjach - skrypt tsql do zmniejszenia w porcjach.

Pamiętaj, że kiedy się kurczysz, fragmentujesz swoje indeksy.

  1. czy istnieje reguła dotycząca procentu wolnego miejsca, które powinna mieć DB?

Możesz zapoznać się z artykułem Szacowanie wymagań dotyczących miejsca na dysku dla baz danych . Nie ma reguły poprawiania, należy wziąć pod uwagę, jak ma rosnąć Twoja baza danych. Trzeba także wziąć pod uwagę, rozwój twoich baz danych .

Odnośniki: Dlaczego dziennik transakcji stale rośnie lub brakuje miejsca?

Kin Shah
źródło
5

masz dobry powód do niepokoju, ponieważ DB kurczy się w SQL Server często „ssać”. Paul Randal, szef Storage Engine w SQL 2005, stwierdził, że ShrinkDB jest napisany bardzo słabo. Znajduje pustą przestrzeń, pobierając dane na samym końcu i umieszczając je na samym początku i robiąc to, aż będzie miało wolne miejsce na „końcu” plików DB. W tym momencie może zwolnić miejsce z SQL Servera i zwrócić go systemowi operacyjnemu. Skutecznie cofasz swoje pliki bazy danych, więc zwykle zobaczysz masywną fragmentację. O jego poglądach możesz przeczytać w tym poście na blogu lub w tym wideo MCM Internals

Tak jak w przypadku wszystkiego, naprawdę musisz najpierw przetestować je w swoim środowisku. Lepszym sposobem na to jest przeniesienie danych do innej grupy plików. Możesz wykonać przebudowę indeksu online za pomocą indeksu klastrowego, a następnie ponownieindeksować w nowej grupie plików. Następnie możesz upuścić starą i zwolnić miejsce i prawie nie mieć fragmentacji. Pamiętaj, że zajmie to około 120% dodatkowego miejsca podczas pracy. Problem polega na tym, że potrzebujesz nawet dodatkowego wolnego miejsca, które wygląda na to, że możesz go nie mieć. Jest to funkcja korporacyjna.

Jeśli wolna przestrzeń ma tak duże znaczenie, być może będziesz musiał ugryźć kulę i powoli zmniejszać DB małą porcję, aby uniknąć długotrwałych procesów. Pamiętaj, że twoje dane będą mocno pofragmentowane i będziesz chciał ponownie wszystko zindeksować. Zauważ, że po ponownym indeksowaniu wszystkiego nieco zwiększysz ilość zużytego miejsca i wrócisz do posiadania dodatkowego wolnego miejsca. Zobacz porady Brenta tutaj .

To, ile wolnego miejsca jest dla ciebie dobre, zależy od tego, ile możesz sobie pozwolić na fragmentację i działania związane z powiększaniem plików. Po włączeniu IFI wzrost pliku jest prawie natychmiastowy, ale nadal występuje fragmentacja. Dobrą zasadą jest wstępne przydzielanie tyle miejsca, ile potrzebujesz, lub monitorowanie wzrostu i okresowe dostosowywanie fragmentów, jeśli musisz. To ogranicza fragmentację fizyczną.

Również wzrost pliku dziennika jest o wiele ważniejszy. Dodatkowe pliki dziennika mogą powodować fragmentację VLF. To sprawia, że ​​przywracanie jest dużo wolniejsze i może wpływać na punkty kontrolne / obcięte. Oto niektóre ryzyka związane z wydajnością, które podejmujesz przy pofragmentowanym dzienniku. Zrób DBCC LOGINFO();na każdej bazie danych. Staraj się utrzymać liczbę około 50ish na jednego Kim Trippa, ale jeśli zobaczysz setki, masz problemy z fragmentacją, co oznacza, że ​​Twoje pliki dziennika musiały wzrosnąć, aby obsługiwać operacje. Dobrym sposobem, aby zobaczyć, jaki powinien być twój plik dziennika według Paula Randala, jest po prostu pozwolić mu rosnąć przez tydzień i ponownie indeksować. To może być dobry punkt, być może na wszelki wypadek możesz dodać trochę więcej wolnego miejsca. Upewnij się, że twoje dzienniki nie są pofragmentowane za pomocą DBCC LOGINFO (); znowu, a jeśli tak, to znaczy, że dużo urosły. Zmniejsz i ponownie rozwiń plik dziennika za pomocąta metoda .

Ali Razeghi
źródło
2

Możesz zmniejszyć go na tyle, aby serwer nie uległ awarii w czasie potrzebnym do oceny potrzeb w zakresie przestrzeni dyskowej i odpowiedniego planowania sprzętu / usług hostingowych (patrz pytanie 4). Nie, to nie zablokuje. Zobacz ograniczenia . Zmniejsz bazę danych, ponieważ zapewnia prostotę.

Sugeruję zawarcie specjalistycznej wiedzy w celu przeprowadzenia badania i spisania planu.

użytkownik 41207
źródło