Почему не работает автовакуум
Если параметр autovacuum
является on
и параметр track_counts
является on
Кроме того - почему это выглядит так, будто автопылесос никогда не работал?
select relname,last_vacuum, last_autovacuum, last_analyze, last_autoanalyze
from pg_stat_user_tables
where last_vacuum is not null
or last_autovacuum is not null;
нет строк...
Какие действия необходимы для его запуска?
Моя версия: PostgreSQL 9.6
1 ответ
Postgres AutoVacuum запустится, когда
num_obselete_tuples
превышает
vacuum_threshold
.
vacuum_threshold = base_threshold + (scale_factor * num_tuples)
-
base_threshold
знак равноautovacuum_vacuum_threshold
-
scale_factor
знак равноautovacuum_vacuum_scale_factor
-
num_tuples
можно найти по запросуpg_class
SELECT relname, reltuples FROM pg_class
Вы должны быть в состоянии использовать цифры выше, чтобы определить, сколько
dead_tuples
необходимы перед запуском автоочистки.
Вы можете увидеть
n_dead_tuples
с:
SELECT n_dead_tup FROM pg_stat_user_tables where relname = ‘transaction’;
А
UPDATE
или же
DELETE
оператор создаст
dead_tuple
. Вы можете проверить
autovacuum
настройки и введите номера, чтобы найти
autovacuum threshold
а затем обновите столько строк в вашей таблице, которые должны вызвать демон автоочистки.
Вы можете найти запущенные процессы автоочистки с помощью:
SELECT query, xact_start, state FROM pg_stat_activity WHERE query LIKE 'autovacuum:%';