Thread: Shared invalidation cache messages for temporary tables

Shared invalidation cache messages for temporary tables

From
Bruce Momjian
Date:
Looking at the code, it seems we create shared invalidation messages for
temporary table activity?  Is this true?  Should we be avoiding it?

I tested this by reviewing the code and checking calls to
CacheInvalidateHeapTuple(), which happens for temporary table
creation/destruction.

--  Bruce Momjian  <bruce@momjian.us>        http://momjian.us EnterpriseDB
http://enterprisedb.com
 + It's impossible for everything to be true. +


Re: Shared invalidation cache messages for temporary tables

From
Simon Riggs
Date:
On Fri, 2011-03-11 at 20:44 -0500, Bruce Momjian wrote:
> Looking at the code, it seems we create shared invalidation messages for
> temporary table activity?  Is this true?  Should we be avoiding it?
> 
> I tested this by reviewing the code and checking calls to
> CacheInvalidateHeapTuple(), which happens for temporary table
> creation/destruction.

Yes, that gets called.

But in PrepareForTupleInvalidation() we ignore everything apart from
system relations, as the first check.

-- Simon Riggs           http://www.2ndQuadrant.com/books/PostgreSQL Development, 24x7 Support, Training and Services



Re: Shared invalidation cache messages for temporary tables

From
Bruce Momjian
Date:
Simon Riggs wrote:
> On Fri, 2011-03-11 at 20:44 -0500, Bruce Momjian wrote:
> > Looking at the code, it seems we create shared invalidation messages for
> > temporary table activity?  Is this true?  Should we be avoiding it?
> > 
> > I tested this by reviewing the code and checking calls to
> > CacheInvalidateHeapTuple(), which happens for temporary table
> > creation/destruction.
> 
> Yes, that gets called.
> 
> But in PrepareForTupleInvalidation() we ignore everything apart from
> system relations, as the first check.

OK, so this is no problem?  There is no optimization needed here? 
Thanks.

--  Bruce Momjian  <bruce@momjian.us>        http://momjian.us EnterpriseDB
http://enterprisedb.com
 + It's impossible for everything to be true. +


Re: Shared invalidation cache messages for temporary tables

From
Robert Haas
Date:
On Mon, Mar 14, 2011 at 8:42 AM, Bruce Momjian <bruce@momjian.us> wrote:
> Simon Riggs wrote:
>> On Fri, 2011-03-11 at 20:44 -0500, Bruce Momjian wrote:
>> > Looking at the code, it seems we create shared invalidation messages for
>> > temporary table activity?  Is this true?  Should we be avoiding it?
>> >
>> > I tested this by reviewing the code and checking calls to
>> > CacheInvalidateHeapTuple(), which happens for temporary table
>> > creation/destruction.
>>
>> Yes, that gets called.
>>
>> But in PrepareForTupleInvalidation() we ignore everything apart from
>> system relations, as the first check.
>
> OK, so this is no problem?  There is no optimization needed here?
> Thanks.

Since your original email is fairly unclear about what you think the
problem is, it's a bit hard to speculate here, but like Simon, I don't
see any obvious problem here.  Maybe you're asking not so much about
inserts, updates, or deletes into temporary tables but about creating
and making modifications to them, which will generate catcache and
relcache flushes when the pg_class/pg_attribute entries are updated.
But I don't think those invalidation messages can be optimized away,
since other backends can access temporary tables of other sessions in
limited ways - for example, they can drop them.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


Re: Shared invalidation cache messages for temporary tables

From
Bruce Momjian
Date:
Robert Haas wrote:
> On Mon, Mar 14, 2011 at 8:42 AM, Bruce Momjian <bruce@momjian.us> wrote:
> > Simon Riggs wrote:
> >> On Fri, 2011-03-11 at 20:44 -0500, Bruce Momjian wrote:
> >> > Looking at the code, it seems we create shared invalidation messages for
> >> > temporary table activity? ?Is this true? ?Should we be avoiding it?
> >> >
> >> > I tested this by reviewing the code and checking calls to
> >> > CacheInvalidateHeapTuple(), which happens for temporary table
> >> > creation/destruction.
> >>
> >> Yes, that gets called.
> >>
> >> But in PrepareForTupleInvalidation() we ignore everything apart from
> >> system relations, as the first check.
> >
> > OK, so this is no problem? ?There is no optimization needed here?
> > Thanks.
> 
> Since your original email is fairly unclear about what you think the
> problem is, it's a bit hard to speculate here, but like Simon, I don't
> see any obvious problem here.  Maybe you're asking not so much about
> inserts, updates, or deletes into temporary tables but about creating
> and making modifications to them, which will generate catcache and
> relcache flushes when the pg_class/pg_attribute entries are updated.
> But I don't think those invalidation messages can be optimized away,
> since other backends can access temporary tables of other sessions in
> limited ways - for example, they can drop them.

Sorry, yes that was my point --- should we be doing as much cache
invalidation traffic for temporary tables as we are doing?  I think you
are saying we are fine and there are no optimizations possible.

--  Bruce Momjian  <bruce@momjian.us>        http://momjian.us EnterpriseDB
http://enterprisedb.com
 + It's impossible for everything to be true. +


Re: Shared invalidation cache messages for temporary tables

From
Robert Haas
Date:
On Mon, Mar 14, 2011 at 10:21 AM, Bruce Momjian <bruce@momjian.us> wrote:
>> Since your original email is fairly unclear about what you think the
>> problem is, it's a bit hard to speculate here, but like Simon, I don't
>> see any obvious problem here.  Maybe you're asking not so much about
>> inserts, updates, or deletes into temporary tables but about creating
>> and making modifications to them, which will generate catcache and
>> relcache flushes when the pg_class/pg_attribute entries are updated.
>> But I don't think those invalidation messages can be optimized away,
>> since other backends can access temporary tables of other sessions in
>> limited ways - for example, they can drop them.
>
> Sorry, yes that was my point --- should we be doing as much cache
> invalidation traffic for temporary tables as we are doing?  I think you
> are saying we are fine and there are no optimizations possible.

Yeah, I think so.  I mean, if you have a concrete example of this
causing a problem, then we can look into it, but my intuition is that
it's OK.  Programmers intuition are notoriously wrong, of course, so
we're all just shooting in the dark until we have something to
measure.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


Re: Shared invalidation cache messages for temporary tables

From
Jim Nasby
Date:
On Mar 14, 2011, at 9:29 AM, Robert Haas wrote:

> On Mon, Mar 14, 2011 at 10:21 AM, Bruce Momjian <bruce@momjian.us> wrote:
>>> Since your original email is fairly unclear about what you think the
>>> problem is, it's a bit hard to speculate here, but like Simon, I don't
>>> see any obvious problem here.  Maybe you're asking not so much about
>>> inserts, updates, or deletes into temporary tables but about creating
>>> and making modifications to them, which will generate catcache and
>>> relcache flushes when the pg_class/pg_attribute entries are updated.
>>> But I don't think those invalidation messages can be optimized away,
>>> since other backends can access temporary tables of other sessions in
>>> limited ways - for example, they can drop them.
>>
>> Sorry, yes that was my point --- should we be doing as much cache
>> invalidation traffic for temporary tables as we are doing?  I think you
>> are saying we are fine and there are no optimizations possible.
>
> Yeah, I think so.  I mean, if you have a concrete example of this
> causing a problem, then we can look into it, but my intuition is that
> it's OK.  Programmers intuition are notoriously wrong, of course, so
> we're all just shooting in the dark until we have something to
> measure.

Sounds like there should be a comment somewhere in the code that explains why we actually need those messages...
--
Jim C. Nasby, Database Architect                   jim@nasby.net
512.569.9461 (cell)                         http://jim.nasby.net




Re: Shared invalidation cache messages for temporary tables

From
Bruce Momjian
Date:
Jim Nasby wrote:
> On Mar 14, 2011, at 9:29 AM, Robert Haas wrote:
> 
> > On Mon, Mar 14, 2011 at 10:21 AM, Bruce Momjian <bruce@momjian.us> wrote:
> >>> Since your original email is fairly unclear about what you think the
> >>> problem is, it's a bit hard to speculate here, but like Simon, I don't
> >>> see any obvious problem here.  Maybe you're asking not so much about
> >>> inserts, updates, or deletes into temporary tables but about creating
> >>> and making modifications to them, which will generate catcache and
> >>> relcache flushes when the pg_class/pg_attribute entries are updated.
> >>> But I don't think those invalidation messages can be optimized away,
> >>> since other backends can access temporary tables of other sessions in
> >>> limited ways - for example, they can drop them.
> >>
> >> Sorry, yes that was my point --- should we be doing as much cache
> >> invalidation traffic for temporary tables as we are doing?  I think you
> >> are saying we are fine and there are no optimizations possible.
> >
> > Yeah, I think so.  I mean, if you have a concrete example of this
> > causing a problem, then we can look into it, but my intuition is that
> > it's OK.  Programmers intuition are notoriously wrong, of course, so
> > we're all just shooting in the dark until we have something to
> > measure.
> 
> Sounds like there should be a comment somewhere in the code that
> explains why we actually need those messages...

Done.

-- Bruce Momjian  <bruce@momjian.us>        http://momjian.us EnterpriseDB
http://enterprisedb.com
 + It's impossible for everything to be true. +