Avoid unnecessary shared invalidations in ROLLBACK PREPARED

The performance gain is minimal, but this makes the logic more
consistent with AtEOXact_Inval().  No other invalidation is needed in
this case as PREPARE takes already care of sending any local ones.

Author: Liu Huailing
Reviewed-by: Tom Lane, Michael Paquier
Discussion: https://postgr.es/m/OSZPR01MB6215AA84D71EF2B3D354CF86BE139@OSZPR01MB6215.jpnprd01.prod.outlook.com
This commit is contained in:
Michael Paquier 2021-08-12 20:12:47 +09:00
parent c3928b467a
commit 710796f054

View File

@ -1520,13 +1520,17 @@ FinishPreparedTransaction(const char *gid, bool isCommit)
* Handle cache invalidation messages. * Handle cache invalidation messages.
* *
* Relcache init file invalidation requires processing both before and * Relcache init file invalidation requires processing both before and
* after we send the SI messages. See AtEOXact_Inval() * after we send the SI messages, only when committing. See
* AtEOXact_Inval().
*/ */
if (hdr->initfileinval) if (isCommit)
RelationCacheInitFilePreInvalidate(); {
SendSharedInvalidMessages(invalmsgs, hdr->ninvalmsgs); if (hdr->initfileinval)
if (hdr->initfileinval) RelationCacheInitFilePreInvalidate();
RelationCacheInitFilePostInvalidate(); SendSharedInvalidMessages(invalmsgs, hdr->ninvalmsgs);
if (hdr->initfileinval)
RelationCacheInitFilePostInvalidate();
}
/* /*
* Acquire the two-phase lock. We want to work on the two-phase callbacks * Acquire the two-phase lock. We want to work on the two-phase callbacks