If I do a "set max_parallel_workers_per_gather=0;" before I run the query in that session, it runs just fine. If I set it to 2, the query dies with the dsa_allocate error.
I'll use that as a work around until 10.2 comes out. Thanks! I have something that will help. On Mon, Jan 29, 2018 at 3:52 PM, Thomas Munro <thomas.mu...@enterprisedb.com > wrote: > On Tue, Jan 30, 2018 at 5:37 AM, Tom Lane <t...@sss.pgh.pa.us> wrote: > > Rick Otten <rottenwindf...@gmail.com> writes: > >> I'm wondering if there is anything I can tune in my PG 10.1 database to > >> avoid these errors: > > > >> $ psql -f failing_query.sql > >> psql:failing_query.sql:46: ERROR: dsa_allocate could not find 7 free > pages > >> CONTEXT: parallel worker > > > > Hmm. There's only one place in the source code that emits that message > > text: > > > > /* > > * Ask the free page manager for a run of pages. This should > always > > * succeed, since both get_best_segment and make_new_segment > should > > * only return a non-NULL pointer if it actually contains enough > > * contiguous freespace. If it does fail, something in our > backend > > * private state is out of whack, so use FATAL to kill the > process. > > */ > > if (!FreePageManagerGet(segment_map->fpm, npages, &first_page)) > > elog(FATAL, > > "dsa_allocate could not find %zu free pages", npages); > > > > Now maybe that comment is being unreasonably optimistic, but it sure > > appears that this is supposed to be a can't-happen case, in which case > > you've found a bug. > > This is probably the bug fixed here: > > https://www.postgresql.org/message-id/E1eQzIl-0004wM-K3% > 40gemulon.postgresql.org > > That was back patched, so 10.2 will contain the fix. The bug was not > in dsa.c itself, but in the parallel query code that mixed up DSA > areas, corrupting them. The problem comes up when the query plan has > multiple Gather nodes (and a particular execution pattern) -- is that > the case here, in the EXPLAIN output? That seems plausible given the > description of a 50-branch UNION. The only workaround until 10.2 > would be to reduce max_parallel_workers_per_gather to 0 to prevent > parallelism completely for this query. > > -- > Thomas Munro > http://www.enterprisedb.com >