Найти в Дзене
Postgres DBA

Влияние fillfactor и лишних индексов на производительность autovacuum

Оценить влияние уменьшения fillfactor на производительность и autovacuum, если для обновляемой таблицы, операция UPDATE использует обновление по индексируемым столбцам. CREATE INDEX pgbench_accounts_idx_1 ON pgbench_accounts ( abalance ); CREATE INDEX pgbench_accounts_idx_2 ON pgbench_accounts ( filler); CREATE INDEX pgbench_branches_idx_1 ON pgbench_branches (bbalance); CREATE INDEX pgbench_branches_idx_2 ON pgbench_branches (filler); CREATE INDEX pgbench_tellers_idx_1 ON pgbench_tellers (tbalance); CREATE INDEX pgbench_tellers_idx_2 ON pgbench_tellers (filler); ALTER TABLE pgbench_accounts SET (fillfactor = 100); ALTER TABLE pgbench_tellers SET (fillfactor = 100); ALTER TABLE pgbench_branches SET (fillfactor = 100); VACUUM FULL pgbench_branches ; VACUUM FULL pgbench_tellers ; VACUUM FULL pgbench_accounts ; ALTER TABLE pgbench_accounts SET (fillfactor = 50); ALTER TABLE pgbench_tellers SET (fillfactor = 50); ALTER TABLE pgbench_branches SET (fillfactor = 50); VACUUM FULL pgbench_bran
Оглавление

Задача

Оценить влияние уменьшения fillfactor на производительность и autovacuum, если для обновляемой таблицы, операция UPDATE использует обновление по индексируемым столбцам.

CREATE INDEX pgbench_accounts_idx_1 ON pgbench_accounts ( abalance );
CREATE INDEX pgbench_accounts_idx_2 ON pgbench_accounts ( filler);
CREATE INDEX pgbench_branches_idx_1 ON pgbench_branches (bbalance);
CREATE INDEX pgbench_branches_idx_2 ON pgbench_branches (filler);
CREATE INDEX pgbench_tellers_idx_1 ON pgbench_tellers (tbalance);
CREATE INDEX pgbench_tellers_idx_2 ON pgbench_tellers (filler);

Эксперимент-5 : fillfactor = 100 + лишние индексы

ALTER TABLE pgbench_accounts SET (fillfactor = 100);
ALTER TABLE pgbench_tellers SET (fillfactor = 100);
ALTER TABLE pgbench_branches SET (fillfactor = 100);
VACUUM FULL pgbench_branches ;
VACUUM FULL pgbench_tellers ;
VACUUM FULL pgbench_accounts ;

Эксперимент-4 : fillfactor = 50 + лишние индексы

ALTER TABLE pgbench_accounts SET (fillfactor = 50);
ALTER TABLE pgbench_tellers SET (fillfactor = 50);
ALTER TABLE pgbench_branches SET (fillfactor = 50);
VACUUM FULL pgbench_branches ;
VACUUM FULL pgbench_tellers ;
VACUUM FULL pgbench_accounts ;

Операционная скорость

Ось X - точка наблюдения. Ось Y - операционная скорость
Ось X - точка наблюдения. Ось Y - операционная скорость

Операционная скорость за весь период теста

  • Средняя относительная разница операционной скорости в экспериментах 4 и 5 составила : -2.5%

Операционная скорость при малой нагрузке ( до 10 соединений)

  • Средняя относительная разница операционной скорости в экспериментах 4 и 5 составила : -6%

Операционная скорость при высокой нагрузке ( свыше 10 соединений)

  • Средняя относительная разница операционной скорости в экспериментах 1 и 2 составила : -0.73%

Статистика autovacuum - Top tables by vacuum time spent

Количество запусков autovacuum: 17 / 13

Эксперимент-5

-3

Эксперимент-4

-4

Относительное изменение расширенной статистики очистки в эксперименте-4 по сравнению с экспериментом-5:

  • Total vacuum time Общее время, затраченное на очистку этой таблицы : -11,26%
  • Delay vacuum time Время простоя в точке задержки при выполнении операций очистки для этой таблицы : -6,40%
  • Read I/O time Время, затраченное операциями очистки для этой таблицы на чтение блоков БД : 6,54%
  • Write I/O time Время, затраченное операциями очистки для этой таблицы на запись блоков БД: -21,04%
  • User CPU time Время использования процессора в пользовательском режиме при очистке таблиц этой БД: -8,69%
  • System CPU time Время использования процессора в режиме ядра при очистке таблиц этой БД : 9,04%
  • Total fetched Общее количество блоков БД, полученных операциями очистки, выполненными для этой таблицы : 22,22%
  • Heap fetched Общее количество блоков, полученных из этой таблицы операциями очистки, выполненными для неё: -33,11
  • Scanned Количество страниц, к которым обращались операции очистки, выполненные для этой таблицы: 38,02%