diff --git a/tradein-mvp/backend/app/tasks/deactivate_stale_avito.py b/tradein-mvp/backend/app/tasks/deactivate_stale_avito.py index 9248a45c..52432da6 100644 --- a/tradein-mvp/backend/app/tasks/deactivate_stale_avito.py +++ b/tradein-mvp/backend/app/tasks/deactivate_stale_avito.py @@ -202,11 +202,15 @@ _REVISIT_FLOOR_SEGMENT_FILTER = "\n AND l.listing_segment = ANY(CAST(:s # ── Потолок эффективного TTL (положительная обратная связь пола, найдено 2026-08-15) ── # У пола выше нет верхней границы: max(ttl_days, пол) может расти неограниченно. -# ЗАМЕР НА ПРОДЕ, из-за которого этот потолок существует: 23 687 из 44 744 «активных» -# avito-объявлений не подтверждались >7 суток; cian 10 572/19 514 и yandex 7 178/15 790 -# — старше 30 суток; самая старая «активная» запись не видена 86 суток. В пуле -# сравнимых 3 497 просроченных строк. У yandex counters держали ttl_days_effective -# 75/75/75/39/52/54 шесть прогонов подряд при deactivated=0. +# ЗАМЕР НА ПРОДЕ (уточнён 2026-08-15 после разбора): у yandex counters держали +# ttl_days_effective 75/75/75/39/52/54 шесть прогонов подряд при deactivated=0 — +# пол реально разгонялся без верхней границы, и потолок закрывает именно это. +# ЧЕГО ПОТОЛОК НЕ ДЕЛАЕТ: он НЕ сжимает пул «активных». Замер показал 0 +# деактивируемых строк на всех четырёх джобах и до, и после калибровки. Цифра +# «23 687 из 44 744 не подтверждались >7 суток» относится ко ВСЕМ источникам +# сразу, и две трети её — новостройки, которых оценщик не берёт. У avito +# просроченных ноль. Раздутый пул, влияющий на оценку, лежит в строках с ПУСТЫМ +# сегментом и чинится отдельной джобой, не этим потолком. # # МЕХАНИЗМ ПЕТЛИ: медленный обход поднимает пол (он же квантиль разрывов переобхода) # -> высокий пол продлевает жизнь снятым лотам дольше, чем к ним успевает вернуться diff --git a/tradein-mvp/backend/data/sql/264_deactivate_stale_avito_cap_mult.sql b/tradein-mvp/backend/data/sql/264_deactivate_stale_avito_cap_mult.sql index 33128201..fc0a1273 100644 --- a/tradein-mvp/backend/data/sql/264_deactivate_stale_avito_cap_mult.sql +++ b/tradein-mvp/backend/data/sql/264_deactivate_stale_avito_cap_mult.sql @@ -5,9 +5,13 @@ -- поднимает эффективный TTL через max(ttl_days, пол) без верхней границы -- на проде -- это оказалось петлёй с положительной обратной связью: медленный обход поднимает -- пол, высокий пол продлевает жизнь снятым лотам дольше, чем к ним успевает --- вернуться свежий обход, пул «активных» раздувается протухшими строками -- 23 687 --- из 44 744 avito-строк не подтверждались >7 суток, самая старая «активная» запись --- не видена 86 суток. Потолок cap_mult ограничивает пол сверху: эффективный TTL не +-- вернуться свежий обход, пул «активных» раздувается протухшими строками. ВАЖНАЯ +-- ОГОВОРКА (перепроверено 2026-08-15): цифра «23 687 из 44 744» -- это ВСЕ источники +-- вместе, и две трети её -- новостройки, которые оценщик не берёт вообще. У самого +-- avito просроченных строк НОЛЬ (8 663 активных, максимальный возраст 10 суток) -- +-- его деактивация работает исправно. Этот потолок существует не ради сжатия пула +-- (он деактивирует 0 строк, замерено), а как защита от опечатки в расписании и от +-- будущего разгона пола. Потолок cap_mult ограничивает пол сверху: эффективный TTL не -- может превысить ttl_days * cap_mult (код -- app/tasks/deactivate_stale_avito.py, -- CAP_MULT). -- diff --git a/tradein-mvp/backend/tests/test_deactivate_stale_ttl_cap.py b/tradein-mvp/backend/tests/test_deactivate_stale_ttl_cap.py index 8045a548..ddbaa559 100644 --- a/tradein-mvp/backend/tests/test_deactivate_stale_ttl_cap.py +++ b/tradein-mvp/backend/tests/test_deactivate_stale_ttl_cap.py @@ -4,10 +4,11 @@ эффективный TTL через max(ttl_days, пол) без верхней границы. На проде это оказалось петлёй с положительной обратной связью: медленный обход поднимает пол, высокий пол продлевает жизнь снятым лотам дольше, чем к ним успевает вернуться свежий обход, пул -«активных» раздувается протухшими строками -- 23 687 из 44 744 avito-строк не -подтверждались >7 суток; cian 10 572/19 514 и yandex 7 178/15 790 -- старше 30 суток; -самая старая «активная» запись не видена 86 суток. У yandex ttl_days_effective держали -75/75/75/39/52/54 шесть прогонов подряд при deactivated=0. +«активных» раздувается протухшими строками. У yandex ttl_days_effective держали +75/75/75/39/52/54 шесть прогонов подряд при deactivated=0 -- это и есть разгон пола, +ради которого потолок написан. Цифру «23 687 из 44 744» из исходного разбора сюда НЕ +переносим: она про все источники сразу, две трети её -- новостройки вне выборки +оценщика, а у самого avito просроченных строк ноль (уточнено 2026-08-15). Этот файл проверяет CAP_MULT -- потолок, не пускающий эффективный TTL выше ttl_days * CAP_MULT, независимо от того, насколько высоко посчитанный пол.