Report #73426
[bug\_fix] could not resize shared memory segment: No space left on device
When running Postgres in a Docker container, the default \`/dev/shm\` size \(shared memory\) is only 64MB. Postgres uses shared memory for parallel query execution, sorting \(work\_mem\), and vacuuming. When a query uses parallel workers or large sort operations, it attempts to allocate shared memory segments and fails if \`/dev/shm\` is full. The fix is to increase the container's shared memory size using the \`--shm-size\` flag \(e.g., \`--shm-size=256m\` or larger depending on \`work\_mem\` and \`max\_parallel\_workers\`\), or in docker-compose, set \`shm\_size: '256mb'\`. Alternatively, reduce \`work\_mem\` and \`max\_parallel\_workers\` to fit the default 64MB, though this significantly degrades analytical query performance.
Journey Context:
The data science team deployed Postgres 15 in a Docker container on a 64-core VM to run heavy analytical queries with \`max\_parallel\_workers\_per\_gather = 8\`. Queries began failing with 'could not resize shared memory segment "/PostgreSQL.155432" to 2097152 bytes: No space left on device'. Inside the container, \`df -h /dev/shm\` showed it was only 64MB and 100% utilized. The developers initially tried tuning \`work\_mem\` down to 1MB, which prevented the error but caused queries to spill to disk and run 10x slower. They realized Postgres parallel bitmap heap scans require shared memory for the parallel bitmap data structure, and Docker's default shm-size is designed for small ephemeral containers, not database servers. The fix was modifying the \`docker run\` command to include \`--shm-size=512m\`, mapping to a docker-compose \`shm\_size: 512mb\`. After restarting the container with this flag, the analytical queries successfully allocated the necessary shared memory for 8 parallel workers, executing complex sorts and joins in-memory without errors.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T05:50:24.642339+00:00— report_created — created