Skonfiguruj parametry serwera autovacuum
Proces odkurzania jest konfigurowany przy użyciu parametrów serwera automatycznego czyszczenia, które umożliwiają optymalizację procesu odkurzania dla twojego 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. Ewentualnie można użyć języka SQL do wykonywania zapytań względem widoków katalogu systemowego w celu znalezienia bieżącej konfiguracji automatycznego czyszczenia, korzystając z następującego zapytania.
SELECT *
FROM pg_settings
WHERE "name" LIKE '%autovacuum%';
Nazwa parametru | Domyślny | Opis |
---|---|---|
autovacuum | NA | 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 wierszy, które zostały wstawione, zaktualizowane lub usunięte, niezbędna do uruchomienia 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 uruchomieniem autovacuum w tabeli, aby zapobiec zawijaniu multixact. |
autovacuum_naptime | 60 sek. | Opóźnienie między procesami automatycznego czyszczenia w bazie danych. W każdej rundzie demon sprawdza bazę danych i wydaje polecenia VACUUM i ANALYZE w miarę potrzeb dla tabel w tej bazie danych. |
autovacuum_vacuum_cost_limit | -1 | Maksymalny koszt automatycznych operacji próżniowych. Jeśli określono -1, co jest wartością domyślną, używana jest zwykła wartość vacuum_cost_limit. W przypadku więcej niż jednego pracownika wartość jest przydzielana proporcjonalnie między uruchomione procesy robocze automatycznego czyszczenia. Suma dla każdego pracownika nie może przekroczyć wartości tej zmiennej. |
autovacuum_vacuum_insert_threshold | 1000 | Liczba wstawionych wierszy, która wyzwala odkurzanie 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, która jest wymagana do zainicjowania odkurzania tabeli. |
autovacuum_vacuum_insert_scale_factor | 0.2 | Określa ułamek rozmiaru tabeli, który ma zostać dodany do autovacuum_vacuum_insert_threshold, aby uruchomić proces próżniowania. |
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 autoodkurzania, aby dowiedzieć się, co działa najlepiej dla twojego obciążenia roboczego. Koszt procesu czyszczenia obejmuje:
- Strony danych są zablokowane, kiedy uruchomiony jest proces próżni.
- Proces próżni zużywa czas obliczeniowy i pamięć.
Optymalizuj 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, autovacuum jest procesem synchronicznym. Im większy procent martwych krotek zawiera tabela, tym większy 'koszt' ponosi się przez proces automatycznego odkurzania.
W przypadku tabel z wysoką szybkością aktualizacji rozważ podzielenie tabeli na wiele tabel. Ten podział pomaga zrównoleglić proces automatycznego odkurzania i zmniejszyć "koszt" dla poszczególnych tabel. Można również zwiększyć liczbę równoległych pracowników autovacuum.