Skrypt do czyszczenia bazy danych

Kratka ściekowa osadzona w chodniku

Baza rośnie o dane, których nikt nigdy nie odczyta. Sprzątanie ich przyspiesza kopie zapasowe i samą pracę systemu.

Co zwykle da się usunąć

  • wygasłe sesje użytkowników,
  • dzienniki zdarzeń starsze niż okres analizy,
  • wersje robocze treści,
  • koszyki porzucone dawno temu,
  • rekordy pomocnicze po zakończonym imporcie.

Zanim powstanie skrypt, warto sprawdzić, które tabele naprawdę zajmują miejsce. Zwykle kilka z nich odpowiada za większość rozmiaru, a reszta nie ma znaczenia. Czyszczenie tabeli małej jest wysiłkiem bez efektu i ryzykiem bez powodu.

Co zostaje mimo wszystko

Dane księgowe, dokumenty sprzedaży i wszystko, co objęte obowiązkiem przechowywania, nie podlega sprzątaniu. Podobnie dane potrzebne do rozpatrzenia reklamacji czy rozliczenia gwarancji. Przed napisaniem reguły trzeba ustalić z osobą prowadzącą księgowość, co wolno usuwać, a co tylko przenieść do archiwum.

Rekordy osierocone

Pozycje wskazujące na nieistniejący rekord nadrzędny. Zwykle bezpieczne do usunięcia, ale wymagają sprawdzenia, czy odwołanie na pewno jest martwe.

Bywa, że rekord nadrzędny jest tylko oznaczony jako usunięty i nadal istnieje. Wtedy pozycja wcale nie jest osierocona, a jej skasowanie zniszczy dane, które da się jeszcze przywrócić. Osobno warto pamiętać o załącznikach: usunięty rekord zostawia plik na dysku, co opisuje tekst o porządkowaniu plików.

Tryb próbny

Najpierw policzenie, ile rekordów zostałoby usunięte. Liczba nieoczekiwanie duża zawsze oznacza błąd w warunku, nie odkrycie.

Warto też obejrzeć kilkanaście przykładowych rekordów z listy do usunięcia. Sama liczba może się zgadzać, a wybrane wiersze pochodzić z zupełnie innego zakresu, niż zakładała reguła. Najczęstszy błąd to warunek na dacie utworzenia zamiast na dacie ostatniego użycia — rekord stary bywa nadal potrzebny.

Usuwanie partiami

Duże usunięcie jednym poleceniem blokuje tabelę i potrafi zatrzymać system na kilka minut. Partie po kilka tysięcy rekordów z przerwami są bezpieczniejsze.

Drugi powód jest techniczny: pojedyncza wielka operacja obciąża dziennik transakcji i potrafi zapełnić dysk. Partie dają się też przerwać w dowolnym momencie bez zostawiania danych w stanie pośrednim. Szerzej o prowadzeniu takich operacji mówi tekst o masowej zmianie danych w bazie.

Kopia przed pierwszym uruchomieniem

Zawsze. Skrypt czyszczący jest z definicji nieodwracalny.

Kopia musi być świeża i sprawdzona, a nie tylko obecna na dysku. Przy dużym usuwaniu warto dodatkowo przenieść rekordy do tabeli pomocniczej zamiast kasować od razu i skasować ją dopiero po kilku tygodniach spokojnej pracy.

Cykliczność

Uruchamiany co noc utrzymuje stan. Uruchamiany raz na rok jest za każdym razem groźną operacją na wielkim zbiorze.

Po samym usunięciu miejsce nie zawsze wraca. Baza zwykle zatrzymuje przestrzeń do ponownego użycia i oddaje ją dopiero po osobnej operacji porządkującej, która sama w sobie potrafi trwać długo i wymaga okna serwisowego.