Re: Add last commit LSN to pg_last_committed_xact()

Поиск
Список
Период
Сортировка
От James Coleman
Тема Re: Add last commit LSN to pg_last_committed_xact()
Дата
Msg-id CAAaqYe8m4Hg+ezbqFKGqWrisnHnZ8F8e5OMaYXpXGhjzHtC+Pw@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Add last commit LSN to pg_last_committed_xact()  (James Coleman <jtc331@gmail.com>)
Ответы Re: Add last commit LSN to pg_last_committed_xact()  (Andres Freund <andres@anarazel.de>)
Список pgsql-hackers
On Thu, Jan 20, 2022 at 8:15 AM James Coleman <jtc331@gmail.com> wrote:
>
> On Wed, Jan 19, 2022 at 10:12 PM Andres Freund <andres@anarazel.de> wrote:
> >
> > Hi,
> >
> > On 2022-01-19 21:23:12 -0500, James Coleman wrote:
> > >  { oid => '3537', descr => 'get identification of SQL object',
> > > diff --git a/src/include/storage/proc.h b/src/include/storage/proc.h
> > > index a58888f9e9..2a026b0844 100644
> > > --- a/src/include/storage/proc.h
> > > +++ b/src/include/storage/proc.h
> > > @@ -258,6 +258,11 @@ struct PGPROC
> > >       PGPROC     *lockGroupLeader;    /* lock group leader, if I'm a member */
> > >       dlist_head      lockGroupMembers;       /* list of members, if I'm a leader */
> > >       dlist_node      lockGroupLink;  /* my member link, if I'm a member */
> > > +
> > > +     /*
> > > +      * Last transaction metadata.
> > > +      */
> > > +     XLogRecPtr      lastCommitLSN;          /* cache of last committed LSN */
> > >  };
> >
> > Might be worth forcing this to be on a separate cacheline than stuff more
> > hotly accessed by other backends, like the lock group stuff.
>
> What's the best way to do that? I'm poking around and don't see any
> obvious cases of doing that in a struct definition. I could add a
> char* of size PG_CACHE_LINE_SIZE, but that seems unnecessarily
> wasteful, and the other ALIGN macros seem mostly used in situations
> where we're allocating memory. Is it possible in C to get the size of
> the struct so far to be able to subtract from PG_CACHE_LINE_SIZE?
> Maybe there's some other approach I'm missing...

Looking at this again it seems like there are two ways to do this I see so far:

First would be to have a container struct and two structs inside --
something like one struct for local process access and one for shared
process access. But that seems like it'd likely end up pretty messy in
terms of how much it'd affect other parts of the code, so I'm hesitant
to go down that path.

Alternatively I see pg_attribute_aligned, but that's not defined
(AFAICT) on clang, for example, so I'm not sure that'd be acceptable?

It doesn't seem to me that there's anything like CACHELINEALIGN that
would work in this context (in a struct definition) since that appears
to be designed to work with allocated memory.

Is there an approach I'm missing? Or does one of these seem reasonable?

Thanks,
James Coleman



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

Предыдущее
От: Nathan Bossart
Дата:
Сообщение: Re: archive modules
Следующее
От: Justin Pryzby
Дата:
Сообщение: Re: warn if GUC set to an invalid shared library