Эскалация блокировок
База меняет тысячи блокировок строк на одну блокировку таблицы ради экономии памяти — и одним махом убивает параллелизм.
Каждая блокировка стоит памяти на учёт. Когда транзакция накопила достаточно мелких блокировок строк, некоторые СУБД выбрасывают их и берут вместо них грубую блокировку всей таблицы. SQL Server делает это примерно при 5000 блокировок на один объект. Учёт дешевеет, но для всех остальных транзакций последствия мгновенны.
Симптом характерен: задание работает нормально, пока не перейдёт определённый объём данных, после чего параллелизм рушится и растут таймауты. Лечится это разбиением крупных изменений на пачки поменьше, а не отключением эскалации. В Postgres механизма нет вовсе: благодаря MVCC читатели не блокируются писателями, и потребности экономить память на блокировках в таком виде не возникает.