# memory: instinct-one-phase-limit-must-not-break-the-loop

thumbnail_scraper.process_batch のループで上限到達時に break すると、同じループ内の安価な処理まで止まる。上限は continue で、その Phase だけ止める。pending 2,431,658 件のうち 53.3%(1,295,139 件)が skip 対象なのに 1 件も捌けず滞留していた問題を修正。

## ポイント
- 上限はリソース保護のために置かれる。break は「このループでやることは全部終わり」という別の意味を持つ。
- 保護したかったのは Chromium のメモリだけで、DB の 1 行更新は保護対象外。
- 上限の対象と、止める範囲がずれている。滞留は静かに進むので、件数を数えるまで表面化しない。
- ループ内に複数 Phase があるなら、上限到達は continue で「その Phase をスキップ」にする。
- 処理済みでない行を pending に戻して continue すると同じ行を無限に掴む。
- 再取得クエリに除外集合(id <> ALL(%s))を渡し、除外配列にも上限を置く。
- 直した後は必ずスループットを数える。欠陥は消えたが、--limit 100 × 2時間毎 = 1,200件/日 で、129万件の解消には 1,000 日かかる。欠陥修正と律速解消は別問題。

## 関連ページ
[[[[instinct-filing-quota-eaten-by-dedup]]]]

## 関連概念(未作成)
`ループ内の複数 Phase` `再取得クエリ` `除外集合` `スループット計測`