Shared invalidation cache messages for temporary tables
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. +
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
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. +
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
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. +
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
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
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. +