Jak pozbyć się dużych tabel z najmniejszym wpływem na wysyłkę dziennika?
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
Jeśli masz DROP
tabele, 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 TRUNCATE
i DROP
operacje są pozornie szybkie i generują minimalne dzienniki, co wynika z funkcji SQL Server o nazwie odroczone upuszczanie .
Tak czy inaczej, unikaj w DELETE
przeciwnym 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).