On Wed, Jan 19, 2022 at 10:12 PM Andres Freund <and...@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... Thanks, James Coleman