PostgreSQL 9: Czy odkurzanie tabeli w podstawowej replikacji w lustrze?

18

Uruchamianie PostgreSQL 9.0.1 z replikacją strumieniową aktualizującą jedno wystąpienie kopii lustrzanej tylko do odczytu. Auto-vaccuum jest włączone na podstawowym, z wyjątkiem kilku tabel, które nie są odkurzane przez demona auto-próżniowego, w celu zmniejszenia IO godzin pracy. Te tabele są „widokami zmaterializowanymi”.

Każdej nocy o północy uruchamiamy odkurzacz w bazie danych, aby wyczyścić te tabele, które są wyłączone z automatycznego odkurzania. Zastanawiam się, czy ten proces replikuje się w lustrze, czy też muszę ustawić próżnię w lustrze?

Scott Herbert
źródło
1
Doskonałe pytanie. Replikacja strumieniowa używa dziennika zapisu z wyprzedzeniem, więc sprowadza się do tego, czy zmiany wprowadzone przez VACUUM są rejestrowane, czy nie.
DerfK
1
Co ciekawe, mam włączone automatyczne odkurzanie w lustrze tylko do odczytu, ale patrząc na statystyki tabeli, nie wydaje się, aby kiedykolwiek działało; ponieważ wszystkie tabele zawierają 0 krotek na żywo / martwych i nie ma historii widocznych próżni ani analiz.
Scott Herbert,
developer.postgresql.org/pgdocs/postgres/hot-standby.html - 25.5.2. Obsługa konfliktów zapytań - „Zastosowanie rekordu czyszczenia próżniowego z WAL powoduje konflikty z transakcjami rezerwowymi, których migawki nadal mogą„ zobaczyć ”dowolny z wierszy do usunięcia ............. To wydaje się sugerować, że VACUUM jest zalogowany w WAL, a zatem jest to „tak” na moje pytanie. Chciałbym jednak uzyskać więcej informacji od guru PG!
Scott Herbert
Oczekuje się, że dane z widoków dynamicznych będą się różnić w trybie pierwotnym i rezerwowym. Widoki te używają funkcji systemowych do gromadzenia danych, a te funkcje odczytują dane ze struktur danych w pamięci, a nie z fizycznej tabeli. Na przykład wykonanie ANALIZY na urządzeniu głównym spowoduje aktualizację statystyk optymalizatora (używanych do planowania zapytań) również w trybie gotowości, ale czas wykonania ANALIZY na tabeli nie będzie odzwierciedlony w tabelach pg_stat_user_tablica, ponieważ te informacje nie są rejestrowane w transakcji logi.
Gurjeet Singh
Zatem wniosek jest taki, że AUTOVACUUM występujące na masterie nie ma wpływu na działanie na slave, prawda? Zakładając, że tak jest, jeśli mam tabelę, która NIE ma żadnych aktualizacji / usuwania, tylko wstawia, czy byłoby możliwe wyłączenie autovacuum w systemie głównym, ponieważ po prostu piszę do niego, a odczyty odbywają się na urządzeniu podrzędnym.
Henley Chiu

Odpowiedzi:

16

Odkurzanie i auto próżnia są replikowane jak każda inna operacja zapisu. (Cóż, są one oczywiście wewnętrznie wyjątkowe, ale jeśli chodzi o twoje pytanie, są to normalne operacje zapisu.) Uruchamianie próżni lub autovacuum na niewolniku nic nie robi i nie jest konieczne.

Peter Eisentraut
źródło