Top.Mail.Ru

Очистка БД модуля принятия скоринговых решений

Продукт:

Сервис моментальных онлайн-займов Smsfinance 

Задача:

Стремительно растущий объем данных в БД скоринга подходит к лимитам, которые может обеспечить дата-центр. На каждом этапе сбора данных сохраняются полные логи запросов и ответов в БД Postgres. Тип хранения lob, даже после удаления данных, не позволяет вернуть место в систему и засоряет системные записи, которые не очищаются с помощью vacuum full, что приводит к исчерпанию лимита по дисковому пространству в дата-центре.

Итоги:

Оптимизировали базу данных модуля скоринга для СМСФинанс. Разработали стратегию очистки и миграции данных, устранили проблему засорения системных таблиц PostgreSQL и снизили нагрузку на инфраструктуру.
Объем данных уменьшен с 35 ТБ до 6.5 ТБ

Прирост данных снижен с 2.5 ТБ/мес до 300 ГБ/мес

Период работы:

Феврвль 2019 — Март 2019

Команда:

3 человека: DevOps, Java-разработчик, системный администратор

Технологии:

Java 8 и 11, PostgreSQL, Spring, Spring Boot.

Решение:

1. Первоначальный анализ показал, что каждый из микросервисов сохраняет полное состояние системы, до начала сбора своей части данных, и после завершения. Такое количество логов удобно во время отладки сервиса и для поиска проблем, но в долгосрочной перспективе абсолютно избыточно. 
2. Принято решение, что данные старше месяца необходимо прореживать, сохраняя только стартовый запрос с данными клиента и полную финальную модель данных после принятия скорингового решения. Реализован набор SQL скриптов для удаления старых данных. Скрипты выполнены в ненагруженное для системы время в течение недели.
3. Неожиданная проблема: Данные хранились в БД в колонке типа large object, которая после удаления данных не очищала некоторые системные записи и не очищалась при помощи штатных средств без долгосрочной остановки БД. Это не позволяло вернуть свободное место в операционную систему и переиспользовать его для новых записей.
4. Решено сохранять данные в колонку с новым типом, старые данные отдельной утилитой небольшими порциями мигрировать в новую колонку, старую колонку удалить.
5. Работы проводили в ненагруженное для системы время в течение недели. Место стало доступно в системе, исчерпание лимитов перестало грозить сервису скоринга.
6. Автоматизировали прореживание данных задачей по расписанию, добавили регулярный запуск vacuum в БД.
Проблему роста БД надо было решить оперативно, потому что расширить диск больше нельзя, а система буквально через пару недель упрется в лимит и прекратит работу. Особенно добавило проблем то, что full vacuum в PostgreSQL не чистит системные таблицы large object.
Семён Бондарев, Java-разработчик Software Cats
Java
PostgreSQL
Large objects cleanup
Обсудить проект _
Если у вас есть ИТ-проблема , оставьте свои контакты, и мы поможем правительству спланировать ее решение . Обещаем не рассылать спам.
hello@softwarecats.dev
Новосибирск, ул. Демакова
23/5, оф.308
Контакты _

Еще про наши проекты: