Each lock structure consumes 96 bytes of memory. To prevent the Lock Manager from exhausting server RAM during bulk updates, SQL Server escalates fine-grained row/page locks to a coarse table lock once an operation crosses ~5,000 locks.
While saving memory, this decimates application concurrency and sparks cascading blocking chains. Remediation entails batching bulk updates into small chunks.