Повторное использование пространства PostgreSQL11 при высокой частоте удаления / обновления - PullRequest
0 голосов
/ 04 марта 2019

Мы оцениваем PostgreSQL 11.1 для нашего производства.Имея систему с 4251 обновлением в секунду, ~ 1000 удалений в секунду и ~ 3221 вставкой в ​​секунду и 1 миллиард транзакций в день, мы сталкиваемся с проблемой, когда PostgreSQL не использует свое пространство (удаление / обновление), а таблицы постоянно увеличиваются в размере.

Мы настроили агрессивные настройки автовакуума, чтобы избежать ситуации с переворотом.также попытался добавить периодическое выполнение vacuum analyze и vacuum - и все еще нет повторного использования пространства.(Только vacuum full или pg_repack освобождает пространство для операционной системы - но это не повторное использование.)

Ниже приведены наши настройки вакуума:

autovacuum                          | on
vacuum_cost_limit                   | 6000
autovacuum_analyze_threshold        | 50
autovacuum_vacuum_threshold         | 50
autovacuum_vacuum_cost_delay        | 5
autovacuum_max_workers              | 32
autovacuum_freeze_max_age           | 2000000
autovacuum_multixact_freeze_max_age | 2000000
vacuum_freeze_table_age             | 20000
vacuum_multixact_freeze_table_age   | 20000
vacuum_cost_page_dirty              | 20
vacuum_freeze_min_age               | 10000
vacuum_multixact_freeze_min_age     | 10000
log_autovacuum_min_duration         | 1000
autovacuum_naptime                  | 10
autovacuum_analyze_scale_factor     | 0
autovacuum_vacuum_scale_factor      | 0
vacuum_cleanup_index_scale_factor   | 0
vacuum_cost_delay                   | 0
vacuum_defer_cleanup_age            | 0
autovacuum_vacuum_cost_limit        | -1
autovacuum_work_mem                 | -1

1 Ответ

0 голосов
/ 04 марта 2019

Ваши требования особенно сложны для PostgreSQL.

  • Вы должны установить для autovacuum_vacuum_cost_delay значение 0 для этой таблицы.

  • Сброс autovacuum_max_workers и autovacuum_naptime вернуться к значениям по умолчанию.

  • Сбросить autovacuum_vacuum_scale_factor и autovacuum_analyze_scale_factor к значениям по умолчанию или чуть более низким значениям.

Ваша проблема не в том, что автовакуум работает недостаточно часто, проблема скорее в том, что он слишком медленный, чтобы успевать за ним.

Даже с этим вы можете справиться только с этимрабочая нагрузка с обновлениями HOT:

  • Убедитесь, что обновляемые атрибуты * , а не являются частью любого индекса.

  • Создайте таблицу с fillfactor ниже 100, скажем, 70.

Обновление HOT часто устраняет необходимость в VACUUM и необходимости обновлять индексы.

Проверьте n_tup_hot_upd столбец pg_stat_us-er_tables, чтобы увидеть, работает ли он.

...