Re: Background worker/idle sessions and caching

From: Jeremy Finzel <finzelj(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: PostgreSQL mailing lists <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Background worker/idle sessions and caching
Date: 2018-07-18 20:30:43
Message-ID: CAMa1XUhmK=bLMmvYZaon7=a9ej4g0W3tk6NuCp7790NBPnv7hA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Wed, Jul 18, 2018 at 3:05 PM, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:

> Jeremy Finzel <finzelj(at)gmail(dot)com> writes:
> > I have a background worker running SQL functions, and I believe I have
> > noticed that when I do things like change function definitions, or even
> add
> > tables, the background worker does not pick up the schema changes until I
> > restart the worker.
>
> Maybe you need some AcceptInvalidationMessages() at appropriate points
> in the worker? ProcessCatchupInterrupts() might be relevant as well,
> though if you're worried about this, you probably don't want to ever
> be so far behind as to get triggered by that.
>

My module is based squarely on worker_spi.c with some very minor
modifications. I definitely don't see any AcceptInvalidationMessages() or
ProcessCatchupInterrupts() which would run between successive
executions of SPI_execute
of the SQL that does the delta load.

>
> There might well be a system structural bug here: I'm not sure whether
> bg workers participate in shared-inval signaling at all, or whether they
> can opt in or out of that. But if they do or can, then a bg worker that
> isn't holding up its end of things by processing catchup interrupts can
> break the entire system's processing of catchups, because of the
> daisy-chain behavior that we put in awhile back to prevent all backends
> from firing catchup processing at the same time. There's an assumption
> that all processes that are eligible to receive catchup signals will
> play nice and pass the signal on reasonably quickly.
>
> regards, tom lane

My use case is similar to the example of worker_spi. A plpgsql function
runs every 1 minute and processes records in audit tables in order to
update fact tables with records that have changed. I noticed for example
renaming a column in the function was not picked up, and I had to restart
the workers to reset the cache.

Thanks,
Jeremy

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2018-07-18 20:46:16 Re: psql's \d versus included-index-column feature
Previous Message Fabien COELHO 2018-07-18 20:29:36 Re: [HACKERS] Re: [COMMITTERS] pgsql: Remove pgbench "progress" test pending solution of its timing is (fwd)