chore(tradein/db): вернуть снос дубля индекса expires_at — теперь с lock_timeout #2795
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#2795
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "chore/2793-drop-dup-expires-idx"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Возврат миграции
250_drop_duplicate_expires_at_index.sql, снятой с деплоя #2792, — теперь сSET LOCAL lock_timeout = '5s'. Сносит побайтовый дубльtrade_in_estimates_expires_at_idx(создан 229), оставляетtrade_in_estimates_expires_idxиз 001.Файл — первый настоящий вход гейта
scripts/check-migration-lock-timeout.py(порог для tradein: NN >= 250; до сих пор под ним было 0 файлов).Критерий «таблица тиха» — выполнен
Записан заранее в #2791/#2793, перепроверен на проде 2026-08-09 16:54 UTC:
Долгих транзакций (>1 мин) в БД нет вообще — 0 строк.
Разбор #2752 подтверждён свежим замером
trade_in_estimates_expires_idx(001, остаётся)trade_in_estimates_expires_at_idx(229, сносится)Счётчик пережившего заморожен третьи сутки — планировщик держит весь живой трафик на дубле (relpages 5 против 6). Состояние устойчивое, а не переходное.
EXPLAINдо сноса (прод):Index Scan using trade_in_estimates_expires_at_idx.Уточнён критерий приёмки
#2793 требовал сдвига
idx_scanпережившего «в течение часа». Наблюдаемый темп — ~7 сканов/сутки (21 скан за трое суток), то есть час — окно, в котором отсутствие сдвига ничего не доказывает. В файле записано: детерминированная проверка сразу после деплоя —EXPLAINс именем пережившего индекса; счётчик честно подтверждается за сутки.Test plan
scripts/check-migration-lock-timeout.py --selftest— 20 утверждений, OK✓ блокирующий DDL прикрыт lock_timeout (проверено новых миграций: 1)SET LOCAL→::error ... блокирующий DDL без lock_timeout (DROP INDEX ...), exit 1. Зелёный гейт не вакуумный.pytest tests/test_migrations_manifest.py— 4 passed (имя дописано в_manifest_applied.txt)postgis/postgis:16-3.4,--network none): применяется, идемпотентна при повторном прогоне (NOTICE ... skipping, exit 0), дубль снят, COMMENT на пережившем проставлен_schema_migrations(а не «деплой зелёный»),EXPLAINпоказывает переживший индекс, план той же формыRefs #2793, #2752, #2791