Jak pozbyć się dużych tabel z najmniejszym wpływem na wysyłkę dziennika?

Dec 31 2020

Mają dwie średnio duże powiązane tabele (284,6876609 wierszy - 156,785,176 KB i 4,2628162 wiersze - 2212464 KB) w dostarczonej bazie danych dziennika, którą należy wyczyścić lub usunąć. Jak mogę pozbyć się tych dwóch tabel, minimalizując wpływ na wysyłkę dziennika?

Odpowiedzi

11 J.D. Dec 31 2020 at 21:08

Jeśli masz DROPtabele, spowoduje to wygenerowanie minimalnych dzienników, ponieważ nie wymusza natychmiastowego wyrzucania elementów bezużytecznych na używanym obszarze, po prostu usuwa odwołanie. Podobnie możesz osiągnąć ten sam wynik z TRUNCATE(chociaż myślę, że na dużych stołach może być więcej narzutów niż DROP, będę musiał to zbadać i odpowiednio zaktualizować moją odpowiedź).

To naprawdę dobry artykuł, w którym szczegółowo opisano, dlaczego TRUNCATEi DROPoperacje są pozornie szybkie i generują minimalne dzienniki, co wynika z funkcji SQL Server o nazwie odroczone upuszczanie .

Tak czy inaczej, unikaj w DELETEprzeciwnym razie wygenerowania ton dzienników, które będą musiały zostać wysłane i ponownie zastosowane w docelowej bazie danych.

To pytanie StackOverflow ma wiele odpowiedzi z dobrymi informacjami na temat skutecznego usuwania danych z dużej tabeli (niektóre mogą nie być konkretnie związane z twoim pytaniem, ale są przydatne w przyszłości lub dla innych użytkowników z podobnymi problemami).