Report #52100
[bug\_fix] Out of shared memory \(could not resize shared memory segment\) during large transaction
Reduce the number of tables, indexes, or partitions touched in a single transaction, or increase the max\_locks\_per\_transaction configuration parameter in postgresql.conf \(requires a server restart\). Each lock object consumes shared memory, and the total pool size is calculated as max\_locks\_per\_transaction \* \(max\_connections \+ autovacuum\_max\_workers \+ max\_prepared\_transactions \+ max\_worker\_processes\).
Journey Context:
A data warehousing team runs a nightly ETL job that creates 5,000 temporary tables in a single transaction to stage data before merging. One night, the job fails with 'ERROR: out of shared memory' and 'HINT: You might need to increase max\_locks\_per\_transaction'. The DBA checks the current value \(64\) and calculates that 5,000 tables require at least 5,000 locks \(plus system locks\), far exceeding 64 \* connection count. They consider increasing max\_locks\_per\_transaction to 10000, but this requires a restart and increases shared memory usage. Instead, they refactor the ETL to commit every 100 tables \(batching\), which keeps the lock count low. They also monitor pg\_locks during the run to confirm the lock count stays under the limit.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T17:56:34.781021+00:00— report_created — created