Re: pg11.1: dsa_area could not attach to segment

From: Sergei Kornilov <sk(at)zsrv(dot)org>
To: Justin Pryzby <pryzby(at)telsasoft(dot)com>, Thomas Munro <thomas(dot)munro(at)enterprisedb(dot)com>
Cc: "pgsql-hackers(at)lists(dot)postgresql(dot)org" <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: pg11.1: dsa_area could not attach to segment
Date: 2019-02-12 09:14:59
Message-ID: 2614901549962899@sas1-4b7566131ec9.qloud-c.yandex.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi

> I think this is tentatively confirmed..I ran 20 loops for over 90 minutes with
> no crash when parallel_leader_participation=off.
>
> On enabling parallel_leader_participation, crash within 10min.
>
> Sergei, could you confirm ?

I still have error with parallel_leader_participation = off. One difference is time: with parallel_leader_participation = on i have error after minute-two, with off - error was after 20 min.

My desktop is
- debian testing with actual updates, 4.19.0-2-amd64 #1 SMP Debian 4.19.16-1 (2019-01-17) x86_64 GNU/Linux
- gcc version 8.2.0 (Debian 8.2.0-16)
- i build fresh REL_11_STABLE postgresql with ./configure --enable-cassert --enable-debug CFLAGS="-ggdb -Og -g3 -fno-omit-frame-pointer" --enable-tap-tests --prefix=/...

Can't provide dsa_dump(area) due recursion. With such dirty hack:

fprintf(stderr,
- " segment bin %zu (at least %d contiguous pages free):\n",
- i, 1 << (i - 1));
- segment_index = area->control->segment_bins[i];
- while (segment_index != DSA_SEGMENT_INDEX_NONE)
- {
- dsa_segment_map *segment_map;
-
- segment_map =
- get_segment_by_index(area, segment_index);
-
- fprintf(stderr,
- " segment index %zu, usable_pages = %zu, "
- "contiguous_pages = %zu, mapped at %p\n",
- segment_index,
- segment_map->header->usable_pages,
- fpm_largest(segment_map->fpm),
- segment_map->mapped_address);
- segment_index = segment_map->header->next;
- }
+ " segment bin %zu (at least %d contiguous pages free), segment_index=%zu\n",
+ i, 1 << (i - 1), area->control->segment_bins[i]);

i have result:

dsa_area handle 0:
max_total_segment_size: 18446744073709551615
total_segment_size: 2105344
refcnt: 2
pinned: f
segment bins:
segment bin 0 (at least -2147483648 contiguous pages free), segment_index=0
segment bin 3 (at least 4 contiguous pages free), segment_index=1
segment bin 8 (at least 128 contiguous pages free), segment_index=2
pools:
pool for blocks of span objects:
fullness class 0 is empty
fullness class 1:
span descriptor at 0000010000001000, superblock at 0000010000001000, pages = 1, objects free = 54/72
fullness class 2 is empty
fullness class 3 is empty
pool for large object spans:
fullness class 0 is empty
fullness class 1:
span descriptor at 00000100000013b8, superblock at 0000020000009000, pages = 8, objects free = 0/0
span descriptor at 0000010000001380, superblock at 0000020000001000, pages = 8, objects free = 0/0
span descriptor at 0000010000001348, superblock at 00000100000f2000, pages = 8, objects free = 0/0
span descriptor at 0000010000001310, superblock at 00000100000ea000, pages = 8, objects free = 0/0
span descriptor at 00000100000012d8, superblock at 00000100000e2000, pages = 8, objects free = 0/0
span descriptor at 00000100000012a0, superblock at 00000100000da000, pages = 8, objects free = 0/0
span descriptor at 0000010000001268, superblock at 00000100000d2000, pages = 8, objects free = 0/0
span descriptor at 0000010000001230, superblock at 00000100000ca000, pages = 8, objects free = 0/0
span descriptor at 00000100000011f8, superblock at 00000100000c2000, pages = 8, objects free = 0/0
span descriptor at 00000100000011c0, superblock at 00000100000ba000, pages = 8, objects free = 0/0
span descriptor at 0000010000001188, superblock at 00000100000b2000, pages = 8, objects free = 0/0
span descriptor at 0000010000001150, superblock at 00000100000aa000, pages = 8, objects free = 0/0
span descriptor at 0000010000001118, superblock at 00000100000a2000, pages = 8, objects free = 0/0
span descriptor at 00000100000010e0, superblock at 000001000009a000, pages = 8, objects free = 0/0
span descriptor at 00000100000010a8, superblock at 0000010000092000, pages = 8, objects free = 0/0
span descriptor at 0000010000001070, superblock at 0000010000012000, pages = 128, objects free = 0/0
fullness class 2 is empty
fullness class 3 is empty
pool for size class 32 (object size 3640 bytes):
fullness class 0 is empty
fullness class 1:
span descriptor at 0000010000001038, superblock at 0000010000002000, pages = 16, objects free = 17/18
fullness class 2 is empty
fullness class 3 is empty

"at least -2147483648" seems surprise.

melkij(at)melkij:~$ LANG=C ls -lt /dev/shm
total 0
-rw------- 1 melkij melkij 4194304 Feb 12 11:56 PostgreSQL.1822959854

only one segment, restart_after_crash = off and no more postgresql instances running.

regards, Sergei

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Dean Rasheed 2019-02-12 10:33:33 Re: BUG #15623: Inconsistent use of default for updatable view
Previous Message Kyotaro HORIGUCHI 2019-02-12 09:05:47 Re: Protect syscache from bloating with negative cache entries