При работе с сервисом ТестОпс можно иногда наблюдать неконтролируемый рост объема базы данных, как правило для этого есть две причины:
1. Крупные таблицы в которых происходит много операций insert и delete копят "мертвые строки" и объем занимаемого места на диске растет. Что бы этого избежать необходимо выполнять удаление таких пустых строк.
2. Большое количество старых запусков
Для решения проблемы необходимо производить:
1. Вакуум БД
2. Удаление старых запусков скриптом
1. Процедура вакуума БД, настройка автовакуума
Для определения количества пустых строк необходимо выполнить:
select schemaname, relname, n_live_tup, n_dead_tup, last_vacuum, last_autovacuum, last_analyze, last_autoanalyze from pg_stat_all_tables where schemaname = 'public' order by n_dead_tup desc
n_dead_tup - количество мертвых строк в таблице
n_live_tup - количество живых\актуальных строк в таблицеЕсли n_dead_tup огромные числа и при этом last_autovacuum не выполнялся давно, значит есть два варианта:
Вариант 1. Настроить автовакуум
1. Выполнить запрос
<div>select name, setting from pg_settings where name in ('autovacuum_analyze_threshold', 'autovacuum_analyze_scale_factor');</div>
2. Рассчитать на каких количествах мертвых строк будет запускаться autovacuum
Формула для определения необходимости ANALYZE :
autovacuum_analyze_threshold + (autovacuum_analyze_scale_factor* количество строк в таблице).
К примеру,
в таблице test_fixture_result_children 13834619 записей, плюс 619398 мертвых.
Последний раз autovacuum запускался 2024-05-09 08:27:32.604604+00.
Значение параметров:
autovacuum_analyze_threshold = 0.05, autovacuum_analyze_threshold = 50.
Рассчет:
50 + (0.05 * 13833401) = 691720 (5%). т.е автовакум сработает после изменения 72 322 строк.
Вариант 2.
Выполнять vacuum для таблиц в ручном режиме и мониторить состояние таблиц
<div>vacuum <tablename>;</div>
Отличия операции VACUUM и AUTOVACUUM
Характеристика | VACUUM FULL | AUTOVACUUM |
---|---|---|
Операция | Ручная, полная перезапись таблицы | Автоматическая, легковесная очистка |
Блокировка таблицы | Да, блокирует таблицу на время | Нет, не блокирует таблицу |
Возврат дискового пространства | Да, возвращает пространство операционной системе | Нет, повторное использование пространства внутри таблицы |
Влияние на производительность | Высокое (ресурсоемкая операция) | Низкое (фоновый процесс) |
Типичный сценарий использования | После массового удаления данных, периодическое обслуживание | Рутинное обслуживание |
Триггер | Ручной запуск | Автоматический, на основе пороговых значений |
2. Инструмент для удаления старых запусков
Параметры, настраиваемые перед запуском скрипта:
docker run -e "ALLURE_ENDPOINT=http://localhost:8080" \ -e "ALLURE_USERNAME=admin" \ -e "ALLURE_PASSWORD=admin" \ -e "PROJECT_ID=2" \ -e "LAUNCH_FILTER=tag = \"delete\"" \ -e "LAUNCH_CREATEDBEFORE=30d 0h 0m" \ ghcr.io/eroshenkoam/allure-testops-utils clean-launches