In Read Committed transactions we take snapshots much more frequently
than transactions begin and commit. It would be help scalability if we
didn't need to re-take a snapshot. That's only helpful if the chances of
seeing the snapshot is relatively high.
Now that we have virtual transactions we may more frequently find
ourselves taking identical snapshots.
If we had a counter that incremented each time the main snapshot altered
in a meaningful way we could set that atomically. We could then read
this when we take a snapshot to see if it matches our existing snapshot;
if so then drop the lock quickly and continue with what we already have.
I can see some downsides to this as well as potential benefits:
* we ping the counter across CPUs - yes, we will, but that's probably
better than pinging the whole procarray
* this relies upon the rate of change of snapshots - need to do the math
to see how often this might apply
Not sure yet myself, but it seems worth recording in case it spurs an
idea from someone else.
pgsql-hackers by date
|Next:||From: Tom Lane||Date: 2008-02-27 22:48:53|
|Subject: Re: Idea for minor tstore optimization |
|Previous:||From: Tom Lane||Date: 2008-02-27 22:42:18|
|Subject: Re: new warning message |