Ostatnio zamiast tylko powiększania plików, gdy ich wykorzystanie jest zbliżone do 80%, byłem bardziej proaktywny w odzyskiwaniu miejsca za pomocą zwykłych sztuczek, takich jak defragmentacja hałd, dodawanie i usuwanie indeksów klastrowych, wdrażanie kompresji wierszy lub stron itp.
Jednak istnieje kilka przypadków, w których mogłem odzyskać jeszcze więcej miejsca, wykonując DBCC CLEANTABLE . Z setkami baz danych w moim środowisku nie można wiedzieć, co użytkownicy robią w każdym z nich, i jest całkowicie akceptowalne, że nastąpią zmiany polegające na upuszczaniu kolumn o stałej długości. Zazwyczaj znalazłem te możliwości, patrząc na liczbę wierszy w porównaniu z liczbą stron w niektórych skryptach wykorzystujących przestrzeń obiektową, które napisałem. Chciałbym pójść o krok dalej, próbując zautomatyzować wykrywanie tego rodzaju scenariuszy.
Chciałbym wiedzieć, czy ktoś tam aktywnie monitoruje tego rodzaju możliwości, a jeśli tak, to czego konkretnie szukasz?
Myślałem o napisaniu czegoś w taki sposób, aby zebrać maksymalny i minimalny rozmiar wiersza, liczbę wierszy w tabeli, liczbę przydzielonych stron i liczbę używanych stron, a następnie zrobić podstawową matematykę, aby zapisać wyniki, które są daleko poza tym, czego można by się było spodziewać.
źródło
Odpowiedzi:
Rozwiązaniem, które wymyśliłem dla tego problemu, jest uruchamianie co tydzień zadania, które będzie uruchamiać sp_spaceused dla wszystkich tabel w bazie danych i zapisywać te dane w tabeli. Jeśli istnieją różnice w wielkości dla każdej tabeli większe niż ... powiedzmy ... 10%, uruchomiłbym dbcc dający się wyczyścić.
Mój kod do przełączania rozmiarów tabel wygląda następująco:
Teraz wystarczy zbudować logikę, która zweryfikuje, jaka byłaby zmiana rozmiaru w ciągu tygodnia i zaplanować.
źródło