Konfigurowanie parametrów serwera automatycznego czyszczenia
Proces próżni jest konfigurowany przy użyciu parametrów serwera automatycznego czyszczenia , które umożliwiają optymalizowanie procesu próżni dla obciążenia. W witrynie Azure Portal wybierz serwer usługi Azure Database for PostgreSQL, a następnie wybierz pozycję Parametry serwera z menu po lewej stronie. Na pasku wyszukiwania wprowadź autovacuum. Alternatywnie można użyć języka SQL do wykonywania zapytań względem widoków wykazu systemu w celu znalezienia bieżącej konfiguracji automatycznego czyszczenia przy użyciu następującego zapytania.
SELECT *
FROM pg_settings
WHERE "name" LIKE '%autovacuum%';
Nazwa parametru | Domyślny | opis |
---|---|---|
autovacuum | ON | Włącza lub wyłącza proces automatycznego czyszczenia serwera. Funkcja automatycznego czyszczenia powinna być zawsze włączona. |
autovacuum_analyze_scale_factor | 0.1 | Określa ułamek tabeli, który ma zostać dodany do autovacuum_vacuum_threshold podczas podejmowania decyzji, czy wyzwalać operację próżniową. Na przykład 0,2 to 20 procent rozmiaru tabeli. |
autovacuum_analyze_threshold | 50 | Liczba wstawionych, zaktualizowanych lub usuniętych wierszy potrzebnych do wyzwolenia procesu analizy dla dowolnej tabeli. |
autovacuum_freeze_max_age | 200000000 | Maksymalny wiek (w transakcjach) przed wyzwoleniem automatycznego czyszczenia w tabeli, aby zapobiec zawijaniu identyfikatora transakcji. |
autovacuum_max_workers | 3 | Maksymalna liczba procesów automatycznego czyszczenia uruchomionych w dowolnym momencie, poza uruchamianiem automatycznego czyszczenia. |
autovacuum_multixact_freeze_max_age | 400000000 | Maksymalny wiek (w multixact) przed wyzwoleniem automatycznego czyszczenia na tabeli, aby zapobiec zawijaniu multixact. |
autovacuum_naptime | 60 s | Opóźnienie między procesami automatycznego czyszczenia w bazie danych. W każdej rundzie demon sprawdza bazę danych i wystawia polecenia VACUUM i ANALYZE zgodnie z potrzebami w przypadku tabel w tej bazie danych. |
autovacuum_vacuum_cost_limit | -1 | Maksymalny koszt automatycznych operacji próżniowych. Jeśli określono wartość -1, która jest wartością domyślną, używana jest zwykła wartość vacuum_cost_limit. W przypadku więcej niż jednego procesu roboczego wartość jest dystrybuowana proporcjonalnie między uruchomionymi procesami roboczymi automatycznego czyszczenia. Suma dla każdego procesu roboczego nie może przekroczyć wartości tej zmiennej. |
autovacuum_vacuum_insert_threshold | 1000 | Liczba wstawionych wierszy, które wyzwala próżnię dla dowolnej tabeli. |
autovacuum_vacuum_scale_factor | 0,2 | Używany z autovacuum_vacuum_threshold. Ułamek tabeli używanej do decydowania, czy wyzwalać próżnię. |
autovacuum_vacuum_threshold | 50 | Minimalna liczba zaktualizowanych, wstawionych lub usuniętych wierszy w celu wyzwolenia próżni dla tabeli. |
autovacuum_vacuum_insert_scale_factor | 0,2 | Określa ułamek rozmiaru tabeli, który ma zostać dodany do autovacuum_vacuum_insert_threshold w celu wyzwolenia procesu opróżnienia. |
autovacuum_work_mem | -1 KB | Maksymalna ilość pamięci, która może być używana przez każdy proces automatycznego czyszczenia. |
log_autovacuum_min_duration | -1 | Czas w milisekundach rejestrowany przez akcje automatycznego czyszczenia. |
Proces próżniowy nie powinien być uruchamiany zbyt często lub zbyt rzadko. Optymalna częstotliwość zależy od obciążenia. Przetestuj każdy z parametrów automatycznego czyszczenia, aby dowiedzieć się, co działa najlepiej dla obciążenia. Koszt procesu czyszczenia obejmuje:
- Strony danych są zablokowane po uruchomieniu próżni.
- Proces próżni zużywa czas obliczeniowy i pamięć.
Optymalizowanie próżni na poziomie tabeli
W usłudze Azure Database for PostgreSQL parametry automatycznego czyszczenia można ustawić na poziomie tabeli. Jeśli niektóre tabele są aktualizowane więcej niż inne, może zwiększyć wydajność. Przykład ustawiania automatycznego czyszczenia na poziomie tabeli:
ALTER TABLE mytable SET (autovacuum_vacuum_threshold = 1000);
ALTER TABLE mytable SET (autovacuum_vacuum_scale_factor = 0.1);
ALTER TABLE mytable SET (autovacuum_vacuum_cost_limit = 1000);
ALTER TABLE mytable SET (autovacuum_vacuum_cost_delay = 10);
Na poziomie tabeli funkcja automatycznego czyszczenia jest procesem synchronicznym. Im większa wartość procentowa martwych krotek, które zawiera tabela, tym większa jest "koszt" poniesionych przez proces automatycznego czyszczenia.
W przypadku tabel z wysoką szybkością aktualizacji rozważ podzielenie tabeli na wiele tabel. Ten podział pomaga zrównać automatyczne czyszczenie i zmniejszyć "koszt" dla dowolnej tabeli. Można również zwiększyć liczbę równoległych procesów automatycznego czyszczenia.