Thread: Shared memory leak on DSM slot exhaustion
Hello, As reported over on pgsql-general[1], we leak shared memory when we run out of DSM slots. To see this, add the random-run-out-of-slots hack I showed in that thread, create and analyze a table t(i) with a million integers, run with dynamic_shared_memory_type=mmap, and try SELECT COUNT(*) FROM t t1 JOIN t t2 USING (i) a few times and you'll see that pgbase/pg_dynshmem fills up with leaked memory segments each time an out-of-slots errors is raised. (It happens with all DSM types, but then the way to list the segments varies or there isn't one, depending on type and OS.) Here's a draft patch to fix that. [1] https://www.postgresql.org/message-id/CA%2BhUKG%2Bzw87b70yJp%2BOzz6LqS6s9QvdO4%2BhQuZc%3DDWLMi6Od6A%40mail.gmail.com
Attachment
On Thu, Jan 30, 2020 at 4:54 AM Thomas Munro <thomas.munro@gmail.com> wrote: > As reported over on pgsql-general[1], we leak shared memory when we > run out of DSM slots. To see this, add the random-run-out-of-slots > hack I showed in that thread, create and analyze a table t(i) with a > million integers, run with dynamic_shared_memory_type=mmap, and try > SELECT COUNT(*) FROM t t1 JOIN t t2 USING (i) a few times and you'll > see that pgbase/pg_dynshmem fills up with leaked memory segments each > time an out-of-slots errors is raised. (It happens with all DSM > types, but then the way to list the segments varies or there isn't > one, depending on type and OS.) Here's a draft patch to fix that. Whoops. The patch looks OK to me. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
On Sat, Feb 1, 2020 at 7:37 AM Robert Haas <robertmhaas@gmail.com> wrote: > Whoops. The patch looks OK to me. Pushed.