Postgres: установить коэффициент заполнения на 50?

У меня есть таблица записей, которая заполняется последовательно один раз, но затем обновляется каждая запись (порядок, в котором они обновляются, и сроки обновлений являются случайными). Обновления не ГОРЯЧИЕ обновления. Есть ли какое-либо преимущество в том, чтобы установить мой коэффициент заполнения для этой таблицы равным 50 или даже меньше 50, учитывая эти факты?

1 ответ

Решение

Хорошо, как вы упомянули в комментариях к вашему вопросу, вы вносите изменения в свою таблицу, используя транзакции, обновляя записи по 1-10 тыс. В каждой транзакции. Это правильный подход, оставляющий некоторые шансы на автовакуумную работу. Но стол fillfactor это не первое, что я бы проверял / менял. Fillfactor может помочь вам ускорить процесс, но если автовакуум недостаточно агрессивен, вы скоро получите очень раздутый стол и плохую производительность.

Итак, во-первых, я бы посоветовал вам контролировать уровень вздутие живота вашего стола. Существует ряд запросов, которые могут вам помочь:

Затем я бы настроил автовакуум на гораздо более агрессивное состояние, чем по умолчанию, например, так (обычно это хорошая идея, даже если вам не нужно обрабатывать всю таблицу за короткий промежуток времени), примерно так:

log_autovacuum_min_duration = 0
autovacuum_vacuum_scale_factor = 0.01
autovacuum_analyze_scale_factor = 0.05
autovacuum_naptime = 60
autovacuum_vacuum_cost_delay = 20

После значительного количества транзакций с UPDATE проверьте уровень вздутия.

Наконец, да, я бы настроил fillfactor, но, вероятно, на более высокое (и более обычное) значение, такое как 80 или 90 - здесь вам нужно сделать некоторые прогнозы, какова вероятность того, что 10% или более кортежей внутри страницы будут обновлены единственная транзакция? Если шансы очень высоки, уменьшите коэффициент заполнения. Но вы упомянули, что порядок строк в ОБНОВЛЕНИЯХ является случайным, поэтому я бы использовал 80-90%. Имейте в виду, что здесь есть очевидный компромисс: если вы установите fillfactor равным 50, вашей таблице потребуется в 2 раза больше дискового пространства, и все операции, естественно, станут медленнее. Если вы хотите углубиться в этот вопрос, я предлагаю создать 21 таблицу с коэффициентами заполнения 50..100 с теми же данными и протестировать TPS UPDATE с помощью pgbench.

Другие вопросы по тегам