gendesign/_wt-cadval/data/sql/173_objective_lots_physflat_idx.sql
bot-backend 542ff1c9ca docs(tradein/domclick): два комментария описывали пул, которого нет с миграции 253
Оба места утверждали, что у Домклика один выделенный резидентный прокси и
пула нет. Это перестало быть правдой ещё в #2800 (миграция 253 сняла
резервацию узла), но текст остался — и именно на него опирался тикет #3189,
поставленный под «калибровку» ограничения, которого не существует.
Свип к тому же ходит через пул давно (serp.py:359), а бэкфилл подключён к
нему в PR #3222.

Заодно докстринг называл не тот ограничитель: свип кладёт не счётчик
провалов lease, а break по первому DomClickBlockedError (#2854) — до
ротации дело не доходит ни при каком счётчике, отсюда buckets_completed=0.

Только комментарии, поведение не меняется. Миграция 175 уже применена, а
_schema_migrations трекает по имени файла без checksum — правка текста
её не перезапустит.
2026-08-29 18:57:25 +03:00

38 lines
2.3 KiB
PL/PgSQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- Контекст: индекс дефицита #1959 (эпик #1953) — «1.00 везде».
--
-- Прогнозный движок дефицита (compute_demand_supply_forecast) дедуплицирует
-- objective_lots до ПОСЛЕДНЕГО снапшота на каждый ФИЗИЧЕСКИЙ лот
-- (objective_lots — append-per-snapshot, ~2.9× инфляция строк; без дедупа спрос И
-- предложение оба раздуты симметрично → каждая ячейка what_to_build даёт один и тот
-- же ratio → все deficit_index = 1.0). Дедуп делается через
-- SELECT DISTINCT ON (project_name, corpus_name, section, floor, lot_number) …
-- ORDER BY project_name, corpus_name, section, floor, lot_number,
-- snapshot_date DESC, id DESC
-- по квартирам (premise_kind='квартира'). Этот partial index точно совпадает с
-- ключом DISTINCT ON и его направлениями сортировки → планировщик берёт Index-Only
-- Scan + Unique вместо сортировки 1.75M строк (EXPLAIN на prod: Sort исчезает,
-- cost ≈ 122k вместо полной сортировки).
--
-- DESC на snapshot_date/id — чтобы «последний снапшот первым» читался прямо из
-- индекса (DISTINCT ON берёт первую строку каждой группы). premise_kind в WHERE —
-- partial index только по квартирам (единственный сегмент дефицит-расчёта), меньше
-- и плотнее, чем полный.
--
-- Порядок применения: миграция ПЕРВОЙ (deploy first), затем backend-код, который
-- использует DISTINCT ON. Idempotent (CREATE INDEX IF NOT EXISTS) — безопасно при
-- ре-apply. Self-wrapped BEGIN/COMMIT.
BEGIN;
CREATE INDEX IF NOT EXISTS objective_lots_physflat_latest_idx
ON objective_lots (
project_name,
corpus_name,
section,
floor,
lot_number,
snapshot_date DESC,
id DESC
)
WHERE premise_kind = 'квартира';
COMMIT;