Влияние vacuum/analyze/bloat на производительность СУБД

Всё, что влияет на работу СУБД - нужно считать
Всё, что влияет на работу СУБД - нужно считать

Задачи эксперимента

  • Оценить степень влияния регулярного выполнения vacuum/analyze на производительность СУБД.
  • Оценить степень влияния распухания таблицы на производительность СУБД.

Реализация эксперимента

Виртуальная машина

CPU = 1

vendor_id : GenuineIntel

cpu family : 6

model : 85

model name : Intel Xeon Processor (Skylake, IBRS, no TSX)

RAM

Mem: 718Mi

Редакция/версия СУБД

Postgres Pro (enterprise certified) 15.8.1 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.4.1 20230605 (Red Soft 11.4.0-1), 64-bit

Конфигурационные параметры СУБД

  • shared_preload_libraries = 'pg_stat_statements'
  • Остальные параметры: по умолчанию

Оцениваемые результаты

  • Общее время выполнения (total_exec_time представления pg_stat_statements)
  • Количество запросов (calls представления pg_stat_statements)
  • Количество результирующих строк (rows представления pg_stat_statements)
  • Общее число прочитанных разделяемых блоков (shared_blks_read представления pg_stat_statements)
  • Общее число «загрязнённых» разделяемых блоков (shared_blk_dirtied представления pg_stat_statements)
  • Общее число записанных разделяемых блоков (shared_blk_written представления pg_stat_statements)
  • Количество транзакций (xact_commit представления pg_stat_database)
  • Метрика производительности СУБД (CPI)

Результаты эксперимента

Эталонный тест: vacuum + analyze после каждой итерации

Рис.1. Базовая нагрузка
Рис.1. Базовая нагрузка

Тест без выполнения vacuum + analyze после каждой итерации

Рис.2. Тест без vacuum+analyze
Рис.2. Тест без vacuum+analyze

Сравнение результатов с «Эталонный тест: vacuum + analyze после каждой итерации»

  • Время выполнения теста — незначительно уменьшилось
  • Объем обработанных разделяемых блоков — значительно увеличился
  • Производительность — существенно уменьшилась

Фрагментация 11%

Рис.3. Фрагментация 11%
Рис.3. Фрагментация 11%

Сравнение результатов с «Тест без выполнения vacuum + analyze после каждой итерации»

  • Время выполнения теста — существенно увеличилось
  • Объем обработанных разделяемых блоков — существенно увеличился
  • Производительность — существенно уменьшилась

Фрагментация 100%

Рис.4. Фрагментация 100%
Рис.4. Фрагментация 100%

Сравнение результатов с «Тест без выполнения vacuum + analyze после каждой итерации»

  • Время выполнения теста — существенно увеличилось
  • Объем обработанных разделяемых блоков — существенно увеличился
  • Производительность — существенно уменьшилась

Итоги

Выполнение vacuum+analyze после массовых изменений данных существенно увеличивает производительность СУБД, хотя общее время выполнения и несколько возрастает.

Даже относительно небольшая фрагментация оказывает существенное влияние на производительность СУБД.

Дальнейшее увеличение фрагментации не оказывает заметного влияния на производительность СУБД.

Мониторить и оптимизировать надо не фрагментацию БД в целом, а фрагментацию наиболее часто используемых таблиц.

Начать дискуссию