1ad7a32a61
- Replace single unbounded DELETE FROM storage.blobs WHERE ref_count=0 with a loop of DELETE...LIMIT 500 batches using ctid sub-select - Each batch is its own implicit TX (~1-5 ms), preventing: · massive row-lock accumulation (was ~200 bytes × N orphans in PG) · WAL bloat from a single giant DELETE · blocking concurrent uploads on storage.blobs - Blob files deleted AFTER each batch commits (crash-safe) - tokio::task::yield_now() between batches to avoid starving uploads