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

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

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

2) Оценить степень влияния распухания таблицы на производительность СУБД.

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

Одна итерация теста состоит из транзакции select/insert/update/delete (количество строк в таблицах ~1 000 000) .

Количество итераций = 1000.

Оцениваемые параметры

  1. Общее время выполнения (total_exec_time представления pg_stat_statements)

  2. Количество запросов (calls представления pg_stat_statements )

  3. Количество результирующих строк (rows представления pg_stat_statements )

  4. Общее число прочитанных разделяемых блоков (shared_blks_read представления pg_stat_statements )

  5. Общее число «загрязнённых» разделяемых блоков (shared_blk_dirtied представления pg_stat_statements )

  6. Общее число записанных разделяемых блоков (shared_blk_written представления pg_stat_statements )

  7. Количество транзакций (xact_commit представления pg_stat_database)

  8. Метрика производительности СУБД (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 после массовых изменений данных существенно увеличивает производительность СУБД, хотя несколько увеличивает общее время выполнения .

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

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

Habrahabr.ru прочитано 676 раз