# instinct: FOR UPDATE SKIP LOCKEDでN件一括取得すると行ロックがHTTP処理全体に及ぶ
## 根本原因
`FOR UPDATE SKIP LOCKED` でN件を一括取得してから外部HTTP処理をすると、
行ロックをN件分 × HTTP時間(最大15分超)保持し続ける構造になる。
VACUUM を含む他のプロセスがブロックされDBが詰まる。
## ポイント
- **正しいパターン**: 1件SELECT → `status='processing'`にマーク → **即commit(行ロック解放)** → HTTP処理(ロックなし) → 結果UPDATE → commit
- ロック保持時間を `O(N件×HTTP秒)` から `O(SQL実行時間のみ)` に短縮できる
- 100件一括処理は1件ずつ処理に変更しても並列プロセスを複数立てれば同等スループットを得られる
- 行ロック滞留の兆候: `SELECT * FROM pg_stat_activity WHERE wait_event_type = 'Lock'`
## 関連Issue
- vvv-bots#169 / vvv-bots PR#178
instinct: FOR UPDATE SKIP LOCKEDでN件一括取得すると行ロックがHTTP処理全体に及ぶ