Nie sądzę, że musisz ręcznie odkurzać, chyba że zaczniesz zauważać spadek wydajności. Jednak zdecydowanie zalecam sprawdzenie ustawień próżni i automatycznego odkurzania i dostosowanie go do swoich potrzeb
Aby zobaczyć bieżące ustawienia, uruchom następujące zapytanie:
SELECT *
FROM pg_settings
WHERE name LIKE '%vacuum%'
Większość pól nie wymaga wyjaśnień, ale znajduje się na nich dokumentacja:
https://www.postgresql.org/docs/current/static/runtime-config-autovacuum.html
Powiedziałbym, że Twoim celem powinno być skonfigurowanie automatycznego odkurzania w celu konsekwentnego czyszczenia śmieci, ale nie uruchamiaj automatycznego odkurzania w sposób ciągły
Najważniejsze ustawienia to:
- autovacuum_vacuum_scale_factor - określa procent krotek, które mogą być martwe przed uruchomieniem czyszczenia. Wartość domyślna = 0,2
- autovacuum_vacuum_threshold - minimalna liczba martwych krotek przed uruchomieniem czyszczenia. Wartość domyślna = 50
Próg pomaga zapobiegać zbyt częstemu uruchamianiu procesu czyszczenia w przypadku małych tabel.
Ustawienia domyślne działają dobrze, chyba że masz bardzo duże tabele. Mówiąc najprościej, jeśli zdarzy się, że masz stolik, który zabiera 100 GB, zgromadzisz 20 GB śmieci, zanim uruchomi się automatyczne odkurzanie. Dlatego zwykle zalecam ustawienie niskiego współczynnika skali. Jak nisko powinieneś sam określić. Używam 0,05 w moim bieżącym projekcie
Progi można również zwiększyć. Wiele aplikacji ma kilka tabel, które są często aktualizowane, a 50 krotek to niewiele. Zwiększenie tego do 1000 nie powinno prowadzić do żadnych problemów, ale oczywiście powinieneś rozważyć swój własny przypadek
Możesz również dostroić autovacuum i mieć różne ustawienia dla niektórych swoich tabel
ALTER TABLE your_table SET (autovacuum_vacuum_scale_factor = 0.05);
Jeśli skonfigurujesz współczynnik skali i progi, wszystko powinno być w porządku. Możesz także zwiększyć wartość autovacuum_vacuum_cost_limit
, która domyślnie jest równa vacuum_cost_limit
, która jest ustawiona na 200. Jest to bardzo ważna cecha próżni, która nie pozwala jej zużyć wszystkich zasobów i pozwala twojej aplikacji działać z danymi nawet podczas procesu odkurzania , ale wartość domyślna jest zbyt niska. Zwiększenie go do 1000 nie powinno prowadzić do znaczących opóźnień, ale pozwoli znacznie szybciej zakończyć proces próżniowy
Oczywiście można również uruchomić próżnię ręcznie. W najprostszym przypadku możesz mieć prostą pracę crona, która dokona pełnego czyszczenia każdej nocy, gdy twoja baza danych nie jest często używana
Mam nadzieję, że to pomaga!