Take fewer snapshots.
Robert Haas <rhaas@postgresql.org>
Take fewer snapshots. When a PORTAL_ONE_SELECT query is executed, we can opportunistically reuse the parse/plan shot for the execution phase. This cuts down the number of snapshots per simple query from 2 to 1 for the simple protocol, and 3 to 2 for the extended protocol. Since we are only reusing a snapshot taken early in the processing of the same protocol message, the change shouldn't be user-visible, except that the remote possibility of the planning and execution snapshots being different is eliminated. Note that this change does not make it safe to assume that the parse/plan snapshot will certainly be reused; that will currently only happen if PortalStart() decides to use the PORTAL_ONE_SELECT strategy. It might be worth trying to provide some stronger guarantees here in the future, but for now we don't. Patch by me; review by Dimitri Fontaine.
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/commands/portalcmds.c | modified | +1 −1 |
| src/backend/commands/prepare.c | modified | +1 −1 |
| src/backend/executor/spi.c | modified | +7 −11 |
| src/backend/tcop/postgres.c | modified | +21 −11 |
| src/backend/tcop/pquery.c | modified | +8 −7 |
| src/include/tcop/pquery.h | modified | +1 −1 |