Re: Extension Enhancement: Buffer Invalidation in pg_buffercache

Поиск
Список
Период
Сортировка
От jian he
Тема Re: Extension Enhancement: Buffer Invalidation in pg_buffercache
Дата
Msg-id CACJufxFWPQS6_OHjV6Vk2pd9Ff+=xRWtdvyR97WjpbGfBfjAYA@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Extension Enhancement: Buffer Invalidation in pg_buffercache  (Japin Li <japinli@hotmail.com>)
Список pgsql-hackers


On Tue, Jul 4, 2023 at 5:45 PM Japin Li <japinli@hotmail.com> wrote:

On Tue, 04 Jul 2023 at 17:00, jian he <jian.universality@gmail.com> wrote:
> the following will also crash. no idea why.
> begin;
>     select count(*) from onek;
>     select relpages from pg_class where relname = 'onek'; --queryA
>
>     SELECT count(*) FROM pg_buffercache WHERE relfilenode =
> pg_relation_filenode('onek'::regclass); --queryB
>
>     insert into onek values(default);
>
>     select count(pg_buffercache_invalidate(bufferid)) from
>     pg_buffercache where relfilenode =
> pg_relation_filenode('onek'::regclass);
>
> ---------------------------------
> queryA returns 35, queryB returns 37.
> ----------------------------------
> crash info:
> test_dev=*#     insert into onek values(default);
> INSERT 0 1
> test_dev=*#     select count(pg_buffercache_invalidate(bufferid)) from
>     pg_buffercache where relfilenode =
> pg_relation_filenode('onek'::regclass);
> TRAP: failed Assert("resarr->nitems < resarr->maxitems"), File:
> "../../Desktop/pg_sources/main/postgres/src/backend/utils/resowner/resowner.c",
> Line: 275, PID: 1533312

According to the comments of ResourceArrayAdd(), the caller must have previously
done ResourceArrayEnlarge(). I tried to call ResourceOwnerEnlargeBuffers() before
PinBuffer_Locked(), so it can avoid this crash.

                if ((buf_state & BM_DIRTY) == BM_DIRTY)
                {
+                       /* make sure we can handle the pin */
+                       ResourceOwnerEnlargeBuffers(CurrentResourceOwner);
+
                        /*
                         * Try once to flush the dirty buffer.
                         */
                        PinBuffer_Locked(bufHdr);

--
Regrads,
Japin Li.


thanks. tested flush pg_catalog, public schema, now, both works as pitched.


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Yuya Watari
Дата:
Сообщение: Re: Making empty Bitmapsets always be NULL
Следующее
От: Tomas Vondra
Дата:
Сообщение: Re: brininsert optimization opportunity