ERROR: too many dynamic shared memory segments

Jakub Glapa <jakub.glapa@gmail.com>

From: Jakub Glapa <jakub.glapa@gmail.com>
To: pgsql-general@lists.postgresql.org
Date: 2017-11-27T09:54:03Z
Lists: pgsql-hackers, pgsql-general
Hi,
I started seeing those errors on Postgresql 10.1 running on Ubuntu 16.04.3
(64GB/8CPU) server.
The DB enters recovery mode after that.

2017-11-23 07:20:39 CET::@:[24823]: ERROR:  could not attach to dynamic
shared area
2017-11-23 07:20:39 CET::@:[24822]: ERROR:  could not map dynamic shared
memory segment
2017-11-23 07:20:40 CET:192.168.xx,xx(33974):u(at)db:[24209]: ERROR:  too
many
dynamic shared memory segments



The errors happen when the parallel execution is enabled and multiple
queries are executed simultaneously.
If I set the max_parallel_workers_per_gather = 0 the error doesn't occur.
The queries are rather big, each executes over 10sec.
I see the error when 4 or more queries are started at the same time.

my postgresql.conf:

max_connections = 100
shared_buffers = 12GB
effective_cache_size = 51GB
work_mem = 83886kB
maintenance_work_mem = 2GB
max_wal_size = 8GB
min_wal_size = 4GB
checkpoint_completion_target = 0.9
wal_buffers = 32MB
default_statistics_target = 1000
max_locks_per_transaction = 128
#max_parallel_workers_per_gather = 0




PS. I've posted this question on pgsql-admin distro but didn't get any
feedback.


--
regards,
Jakub Glapa

Commits

  1. Be more wary about shm_toc_lookup failure.

  2. Fix ReinitializeParallelDSM to tolerate finding no error queues.

  3. Teach bitmap heap scan to cope with absence of a DSA.

  4. Don't be so trusting that shm_toc_lookup() will always succeed.