chore(tradein/db): вернуть снос дубля индекса expires_at — теперь с lock_timeout #2795

Merged
bot-backend merged 1 commit from chore/2793-drop-dup-expires-idx into main 2026-08-09 17:10:18 +00:00

1 commit

Author SHA1 Message Date
93dcd71480 chore(tradein/db): вернуть снос дубля индекса expires_at — теперь с lock_timeout
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 8s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 3m56s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
Миграция 250 была снята с деплоя #2792: её DROP INDEX ждал ACCESS EXCLUSIVE
29 минут за чужой аналитической сессией и увёл за собой запросы приложения
(четыре смерженных PR не доехали до прода). Конвенция и гейт закреплены
#2791 — возвращаю сам снос с `SET LOCAL lock_timeout = '5s'`.

Файл — первый настоящий вход гейта scripts/check-migration-lock-timeout.py
(порог для tradein: NN >= 250). Прогон локально: зелёный на файле как есть,
красный на нём же с вырезанной строкой SET LOCAL (негативный контроль).

Критерий «таблица тиха», записанный в #2791/#2793 ДО работы, выполнен на
проде 2026-08-09 16:54 UTC: pg_locks по trade_in_estimates = 0, долгих
транзакций в БД нет вообще.

Подтверждение разбора #2752 свежим замером (16:54 UTC, +2 суток к прошлому):
дубль trade_in_estimates_expires_at_idx — 21 скан, переживший
trade_in_estimates_expires_idx — по-прежнему 234, счётчик заморожен.
Планировщик держит весь живой трафик на дубле (relpages 5 против 6), то есть
состояние устойчивое. EXPLAIN до сноса: Index Scan using
trade_in_estimates_expires_at_idx.

Уточнён критерий приёмки: наблюдаемый темп ~7 сканов/сутки, поэтому «сдвиг
idx_scan в течение часа» — недостаточное окно. Детерминированная проверка
сразу после деплоя — EXPLAIN с именем пережившего индекса; счётчик честно
подтверждается за сутки.

Refs #2793, #2752, #2791
2026-08-09 21:59:36 +05:00