Mamy wiele komputerów, na których wstępnie przypisaliśmy rozmiar dziennika transakcji do 50 GB. Rozmiar stołu, który próbuję zreorganizować, wynosi 55–60 GB, ale będzie się stale zwiększał. Głównym powodem, dla którego chcę się zreorganizować, jest odzyskanie miejsca i wszelkie korzyści związane z wydajnością z tego powodu to dodatkowy bonus.
Poziom fragmentacji tabeli wynosi 30–35%. Na niektórych z tych komputerów pojawia się błąd „dziennik transakcji pełny” i reorganizacja kończy się niepowodzeniem. Rozmiar dziennika transakcji dochodzi do 48 GB. Jaki jest dobry sposób, aby temu przeciwdziałać? Nie mamy włączonego automatycznego przyrostu i niechętnie to robię.
Mogę zwiększyć rozmiar dziennika do większej wartości, ale ponieważ rozmiar tabeli wzrośnie w przyszłości, wartość może być niewystarczająca. Poza tym nie ma sensu przeprowadzania reorganizacji w celu odzyskania miejsca, jeśli mam równomiernie zwiększyć rozmiar kłody. Wszelkie pomysły na to, jak mogę skutecznie temu przeciwdziałać? Korzystanie z trybu zbiorczego nie jest możliwe, ponieważ utrata danych jest niedopuszczalna.
źródło
REORGANIZACJA (jak w ALTER INDEX ... REORGANIZE) to bardzo szybka operacja (cóż, głównie ...), która wymaga niewielkiej ilości logów, może zostać w dowolnym momencie przerwana i wznowiona, i działa wewnętrznie w małych transakcjach wsadowych :
Czy na pewno nie mówisz o przebudowie ? Indeks REBUILD jest powolny, drogi, zużywa ogromną ilość logów (jeśli nie jest offline i nie może być minimalnie zalogowany , odbudowanie online nie może być minimalnie zalogowany), jest pojedynczą gigantyczną transakcją i nie można go przerwać bez utraty całej pracy.
Wydaje mi się, że przeprowadzasz przebudowę, co jest naprawdę wyjątkową operacją, której nie powinieneś robić, chyba że masz bardzo dobrze przemyślany powód. Jakiego rodzaju odzyskiwania przestrzeni marzysz? Coś,
DBCC CLEANTABLE
co nie poradzi? Czy sprawdziłeś fizyczną strukturę tabeli, czy odeszła ona od struktury logicznej (szczegółowe informacje znajdują się w kolumnach tabeli programu SQL Server pod maską )?Jeśli naprawdę musisz odbudować stół, obawiam się, że nie masz innego wyjścia, jak ugryźć kulę i przydzielić niezbędny dziennik. Nie pozwól, aby auto rosło, to tylko spowolni proces. Wstępnie wyhoduj go do 2,5-krotności wielkości stołu.
Jeśli tabela jest podzielona na partycje, możesz odbudować offline (i zreorganizować) jedną partycję na raz. Przebudowę online można wykonać tylko na poziomie całego stołu.
źródło
Miałem już ten problem.
Jest to trochę sprzeczne z intuicją, ponieważ wiesz, że jeśli przerwiesz reorganizację, możesz kontynuować od miejsca, w którym została przerwana, po prostu przerwanie dokonuje transakcji, a nie wycofuje.
Oto co robisz. Jest trochę długi, ale prosty.
Utwórz alert WMI agenta („Reorganizuj zawór nadmiarowy”) pod warunkiem wydajności.
Utwórz pracę („Reorganizuj czek”)
Sprawdź to wszystko gdzieś, nawet w piaskownicy programistycznej, aby upewnić się, że działa poprawnie przed przyklejeniem go do serwera produkcyjnego.
Zobaczysz, że zadanie „Reorganizacja” rozpoczyna się i zaczyna wypełniać dziennik. Gdy dziennik zapełni się w procentach, uruchamia alarm WMI (w ciągu około 30 sekund), który uruchamia inne zadanie, w którym widać, że zadanie „Reorganizacja” jest uruchomione, a więc prawdopodobnie jest z winy. Następnie zatrzymuje „Reorganizację”, wykonuje kopię zapasową, potwierdza, że ilość wolnego miejsca w dzienniku powróciła do rozsądnej wartości, a następnie ponownie rozpoczyna zadanie „Reorganizacja”, które rozpocznie od miejsca, w którym zostało przerwane.
Tak więc, jak możesz, powodem, dla którego wstępnie przeskalowałeś dziennik do rozsądnej wartości w tym scenariuszu, jest zmniejszenie liczby wzrostu / wyzwalacza / zadania / zatrzymania / ponownego uruchomienia, aby mógł być bardziej wydajny, a także zachować wystarczającą ilość miejsca na sporadyczne wzrosty, które nie są łapane w czasie.
To rodzaj dziwnego scenariusza. Jestem prawie pewien, że bym sobie z tego poradził kilka lat temu i oczywiście są tutaj podstawowe podstawowe problemy. Ale jeśli masz do czynienia z setkami serwerów, pojawi się kilka takich przypadków, które nie mogą być rozwiązane w żaden sposób, z jakiegokolwiek powodu biznesowego, z wyjątkiem MacGyvering tymczasowego rozwiązania, które wykona zadanie.
Tak długo, jak jest to bezpieczne, logiczne, przetestowane i dobrze udokumentowane, nie powinno być problemu.
źródło
Tak zwykle robiłem (mam też kilka tabel o wielkości 80 + GB każda) dla indeksu reorg (ponieważ reorg indeksu można zatrzymać w dowolnym momencie bez utraty poprzedniej pracy reorg).
W mojej strukturze obsługi indeksów dzielę indeksy na dwie grupy, jedna dotyczy odbudowy indeksu, a druga reorg indeksu. W przypadku przebudowy indeksu zastosuję nieco inne podejście, ponieważ nie chcę przerywać sesji przebudowywania indeksu (co spowoduje wycofanie i utratę całej poprzedniej pracy). Podczas odbudowy indeksu, jeśli moja sesja monitorowania zauważy scenariusz zajętego miejsca w pliku tlog, sesja monitorowania automatycznie zwiększy plik tlog, aw najgorszym scenariuszu (tj. Dysk jest pełny), moja sesja monitorowania utworzy inny plik dziennika ( ale później upuszczę go na innym dysku (dysku zapasowym)
źródło
Miałem ten sam problem co autor pytania i patrząc na jego komentarze, mogę powiedzieć, że miałem taką samą konfigurację. Podczas gdy próbowałem zrobić
REORGANIZE
, dziennik staje się pełny, niezależnie od wielkości, nawet do wielokrotności wielkości całego stołu.Przyczyną problemu była replikacja transakcyjna . Najwyraźniej nie można wykonać kopii zapasowej dziennika, dopóki
REORGANIZE
operacja nie zostanie zakończona. Czytałem gdzieś, że był to znany problem Microsoftu, ale nie jestem pewien, gdzie.Po wyłączeniu replikacji transakcyjnej kopie zapasowe dziennika znów działały normalnie, a tworzenie kopii zapasowych dziennika co 30 sekund podczas reorganizacji działało dobrze.
źródło
Zakładam, że prowadzisz coś w stylu:
ZMIENIĆ INDEKS REORGANIZACJI
Niestety nie ma możliwości uruchomienia częściowej organizacji (na przykład można częściowo zmniejszyć plik dziennika). Sposoby myślenia o tych problemach to:
1) ustaw bazę danych na prosty tryb odzyskiwania podczas uruchamiania reorganizacji, ale powiedziałeś, że jest to nie do przyjęcia
2) podziel indeks na partycje - jeśli możesz wymyślić sposób podzielenia indeksu na partycje o równej wielkości, będziesz mógł ponownie zorganizować (lub przebudować z opcją online) każdą partycję niezależnie, a tym samym ograniczyć wzrost pliku dziennika
Jestem pewien, że to robisz, ale jeśli nie, możesz zainicjować tworzenie kopii zapasowej pliku dziennika przed i po optymalizacji indeksu, co pozwoli mu odzyskać zajęte miejsce.
źródło