On 10/13/14, 8:28 PM, Tom Lane wrote:
Jim Nasby <jim.na...@bluetreble.com> writes:
CacheInvalidateHeapTuple currently does the following tests first; would there 
be a performance improvement to testing the system relation case first? We're 
almost never in bootstrap mode, so that test is almost always a waste. Is there 
any reason not to switch the two?
        /* Do nothing during bootstrap */
        if (IsBootstrapProcessingMode())
                return;

        /*
         * We only need to worry about invalidation for tuples that are in 
system
         * relations; user-relation tuples are never in catcaches and can't 
affect
         * the relcache either.
         */
        if (!IsSystemRelation(relation))
                return;

You're assuming that IsSystemRelation() is safe to apply during bootstrap
mode.  Even if it is, I don't see the point of messing with this.
IsBootstrapProcessingMode() is a macro expanding to one comparison
instruction.

Comment patch to that effect attached.
--
Jim Nasby, Data Architect, Blue Treble Consulting
Data in Trouble? Get it in Treble! http://BlueTreble.com
diff --git a/src/backend/utils/cache/inval.c b/src/backend/utils/cache/inval.c
index a7a768e..545ccc5 100644
--- a/src/backend/utils/cache/inval.c
+++ b/src/backend/utils/cache/inval.c
@@ -1055,7 +1055,11 @@ CacheInvalidateHeapTuple(Relation relation,
        Oid                     databaseId;
        Oid                     relationId;
 
-       /* Do nothing during bootstrap */
+       /*
+     * Do nothing during bootstrap. It may seem silly to check this first since
+     * it will almost always be false, but it's not safe to assume that later
+     * checks can be done safely while in bootstrap.
+     */
        if (IsBootstrapProcessingMode())
                return;
 
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to