TFTL · Підсумок виконаних робіт · для Avalon · 23.06.2026

Сервер готовий до кампанії

Що ми зробили й чого досягли — з реальними вимірами «до» та «після» і стрес-тестом під навантаженням.

Стабільно · швидко · перевірено навантаженням

Головні результати

Коротко — що змінилось

Сервер більше не падає під навантаженням, головні запити стали в десятки разів швидшими, а памʼяті вистачає із запасом навіть під стрес-тестом.

24×

швидший головний запит каталогу квартир

0 помилок

на 2000 запитів поспіль у стрес-тесті

~4 GB

вільної памʼяті навіть під навантаженням

34×

швидша фонова перевірка броні квартир

Виконані роботи

Що саме ми зробили

Переналаштували памʼять бази під реальний розмір сервера — ліміт кешу опущено з 8.25 до 4.5 GB, зменшено ліміти зʼєднань і буферів. Зʼявився реальний запас.

Вимкнули зайвий цілодобовий запис службового модуля Telescope і почистили 11 GB накопичених даних — база схудла й розвантажилась.

Навели лад у резервних копіях — прибрали дубльований бекап і денний піковий запуск, що додавав навантаження.

Додали 2 індекси через міграцію — для сторінки каталогу та для фонової перевірки броні. Усе під контролем версій, оборотне.

Підтвердили результат вимірами «до/після» та навантажувальним тестом прямо на бойовому сервері.

Доказ №1 · швидкодія

Головні запити стали майже миттєвими

Ці запити база виконує тисячі разів на добу. Виміряно по 30 прогонів кожен, до та після додавання індексів.

Сторінка каталогу квартир у 24× швидше пересортування всього списку → за індексом
було
22.09 ms
стало
0.93 ms
Фонова перевірка броні (щохвилини) у 34× швидше повний скан 2730 рядків → 1 рядок
було
14.12 ms
стало
0.41 ms

Технічно: на каталозі зник «filesort» (база більше не пересортовує весь список на кожен запит), а перевірка броні з повного сканування таблиці перетворилась на точковий пошук за індексом.

Доказ №2 · стрес-тест

2000 запитів поспіль — жодної помилки

Ми навмисно навантажили бойовий сервер тим самим типом трафіку, який дасть реклама, і виміряли реакцію.

Основний тест · 2000 запитів, 4 одночасно

100% успішних

2000 / 2000 відповіли «200 OK» · 0 помилок · 0 збоїв

Час відповіді (медіана)286 ms
95% запитів швидші за465 ms
99% запитів швидші за533 ms
Пропускна здатність12.8 запитів/с

Легкий прогін · 200 запитів

200/200

усі «200 OK», 0 помилок

Медіана171 ms
95%192 ms
Фронт-сторінка /apartmentsстабільно ✓

Жоден запит не завершився помилкою чи таймаутом — і на рівні API, і на рівні фронтенду сайту. Раніше подібне навантаження клало сервер через нестачу памʼяті.

Доказ №3 · памʼять під навантаженням

Навіть під стрес-тестом памʼяті — більш ніж достатньо

Головна причина минулого падіння — нестача памʼяті. Ось скільки її використано в розпал навантаження.

3.05 з 7.28 GB ≈ 4 GB вільно
42% · під навантаженням
0зона аварії ▶

До оптимізації памʼять піднімалась до 6+ GB і сервер аварійно падав. Тепер під тим самим навантаженням використано лише 42%, а сама база тримається стабільно на 1.6 GB.

Стан сервера під час навантажувального тесту API
Сервер під час тесту API: памʼять 2.81 / 7.28 GB, база стабільна, 0 збоїв.
Стан сервера під час навантажувального тесту фронтенду
Під час тесту фронтенду: памʼять 3.05 / 7.28 GB, навантаження в нормі.

Підсумок

Було → стало

Показник
Було
Стало
Запас памʼяті сервера
≈ 0 (падав)
≈ 4 GB вільно
Каталог квартир (медіана)
22 ms + filesort
0.9 ms за індексом
Перевірка броні
14 ms, повний скан
0.4 ms, точково
Стрес-тест 2000 запитів
падіння під трафіком
0 помилок
Готовність до кампанії
✓ готовий

Усі зміни внесені через міграції бази та конфігурацію — вони версіоновані й оборотні. Нічого зайвого на сервері не змінювалось. Сервер готовий приймати рекламний трафік.