Próbuję zmusić PostgreSQL do agresywnego automatycznego odkurzania mojej bazy danych. Obecnie skonfigurowałem automatyczne odkurzanie w następujący sposób:
- autovacuum_vacuum_cost_delay = 0 # Wyłącz próżnię opartą na kosztach
- autovacuum_vacuum_cost_limit = 10000 # Wartość maksymalna
- autovacuum_vacuum_threshold = 50 # Wartość domyślna
- autovacuum_vacuum_scale_factor = 0.2 # Wartość domyślna
Zauważam, że automatyczne odkurzanie włącza się tylko wtedy, gdy baza danych nie jest obciążona, więc wpadam w sytuacje, w których jest o wiele więcej martwych krotek niż krotek na żywo. Przykład znajduje się w załączonym zrzucie ekranu. Jeden ze stołów ma 23 krotki na żywo, ale 16845 martwych krotek czeka na próżnię. To jest szalone!
Automatyczne odkurzanie uruchamia się, gdy zakończy się test i serwer bazy danych jest bezczynny, co nie jest tym, czego chcę, ponieważ chciałbym, aby automatyczne odkurzanie uruchamiało się, ilekroć liczba martwych krotek przekracza 20% krotek na żywo + 50, ponieważ baza danych została uruchomiona skonfigurowany. Automatyczne odkurzanie, gdy serwer jest bezczynny, jest dla mnie bezużyteczne, ponieważ oczekuje się, że serwer produkcyjny osiągnie 1000 aktualizacji / s przez dłuższy czas, dlatego potrzebuję automatycznego odkurzania, aby działać, nawet gdy serwer jest obciążony.
Czy czegoś mi brakuje? Jak wymusić uruchomienie automatycznego odkurzania, gdy serwer jest obciążony?
Aktualizacja
Czy to może być problem z blokowaniem? Tabele, o których mowa, to tabele podsumowań wypełniane za pomocą wyzwalacza po wstawieniu. Tabele te są zablokowane w trybie UDOSTĘPNIJ WIERSZ, aby zapobiec równoczesnym zapisom w tym samym wierszu.