Прискорення звіту в B2B-сервісі
Про проєкт
Прискорення звіту: виміри й зміни
Початковий час виконання: близько 18 хвилин для щоденного звіту за всіма активними клієнтами. Звіт формувався на Python і PostgreSQL; дані для кожної операції читалися окремим запитом через SQLAlchemy.
Причина: профіль запитів показав N+1 — до основної вибірки додавалися тисячі звернень по картки клієнтів. Окремо перевірив план виконання запиту по періоду: фільтр за датою не використовував індекс у потрібному порядку.
Зміни в реалізації
- Завантаження карток клієнтів замінено на пакетний запит.
- Підрахунок сум і групування за статусом перенесені в PostgreSQL.
- Додано складений індекс для вибірки за клієнтом і датою після перевірки плану запиту.
- Генерацію звіту розділено на порції з фіксацією останньої обробленої позиції.
Після змін: типовий запуск тривав близько 4 хвилин. Результати звірені зі старою версією на тримісячній копії даних; підсумкові суми збіглися, у тому числі для клієнтів із великим числом операцій. Перевірка охоплювала один звіт і не змінювала правила фінансового обліку.
Команда запуску й параметри порцій збережені в репозиторії. Для подальших змін доданий автоматизований тест на збіг підсумків.
Додано 03.11.2026