Влияние vacuum/analyze/bloat на производительность СУБД
Задачи эксперимента
1) Оценить степень влияния регулярного выполнения vacuum/analyze на производительность СУБД.
2) Оценить степень влияния распухания таблицы на производительность СУБД.
Реализация эксперимента
Одна итерация теста состоит из транзакции select/insert/update/delete (количество строк в таблицах ~1 000 000) .
Количество итераций = 1000.
Оцениваемые параметры
Общее время выполнения (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. Базовая нагрузка
Тест без выполнения vacuum + analyze после каждой итерации
Рис. 2. Тест без vacuum+analyze
Сравнение результатов с »Эталонный тест — vacuum + analyze после каждой итерации»
Время выполнения теста — незначительно уменьшилось
Объем обработанных разделяемых блоков — значительно увеличился
Производительность — существенно уменьшилась
Фрагментация 11%
Рис. 3. Фрагментация 11%
Сравнение результатов с »Тест без выполнения vacuum + analyze после каждой итерации»
Время выполнения теста — существенно увеличилось
Объем обработанных разделяемых блоков — существенно увеличился
Производительность — существенно уменьшилась
Фрагментация 100%
Рис. 4. Фрагментация 100%
Сравнение результатов с »Тест без выполнения vacuum + analyze после каждой итерации»
Время выполнения теста — существенно увеличилось
Объем обработанных разделяемых блоков — существенно увеличился
Производительность — существенно уменьшилась
Итоги
Выполнение vacuum+analyze после массовых изменений данных существенно увеличивает производительность СУБД, хотя несколько увеличивает общее время выполнения .
Даже относительно небольшое значение фрагментации оказывает существенное влияние на производительность СУБД.
Дальнейшее увеличение фрагментации не оказывает существенного влияния на производительность СУБД.