On Mon, Feb 2, 2015 at 8:57 PM, Andres Freund <and...@2ndquadrant.com>
wrote:

> Hi,
>
> I've, for a while, pondered whether we couldn't find a easier way than
> CSN to make snapshots cheaper as GetSnapshotData() very frequently is
> one of the top profile entries. Especially on bigger servers, where the
> pretty much guaranteed cachemisses are quite visibile.
>
> My idea is based on the observation that even in very write heavy
> environments the frequency of relevant PGXACT changes is noticeably
> lower than GetSnapshotData() calls.
>
> My idea is to simply cache the results of a GetSnapshotData() result in
> shared memory and invalidate it everytime something happens that affects
> the results. Then GetSnapshotData() can do a couple of memcpy() calls to
> get the snapshot - which will be significantly faster in a large number
> of cases. For one often enough there's many transactions without an xid
> assigned (and thus xip/subxip are small), for another, even if that's
> not the case it's linear copies instead of unpredicable random accesses
> through PGXACT/PGPROC.
>
> Now, that idea is pretty handwavy. After talking about it with a couple
> of people I've decided to write a quick POC to check whether it's
> actually beneficial. That POC isn't anything close to being ready or
> complete. I just wanted to evaluate whether the idea has some merit or
> not. That said, it survives make installcheck-parallel.
>
> Some very preliminary performance results indicate a growth of between
> 25% (pgbench -cj 796 -m prepared -f 'SELECT 1'), 15% (pgbench -s 300 -S
> -cj 796), 2% (pgbench -cj 96 -s 300) on a 4 x E5-4620 system. Even on my
> laptop I can measure benefits in a readonly, highly concurrent,
> workload; although unsurprisingly much smaller.
>
> Now, these are all somewhat extreme workloads, but still. It's a nice
> improvement for a quick POC.
>
> So far the implemented idea is to just completely wipe the cached
> snapshot everytime somebody commits. I've afterwards not been able to
> see GetSnapshotData() in the profile at all - so that possibly is
> actually sufficient?
>
> This implementation probably has major holes. Like it probably ends up
> not really increasing the xmin horizon when a longrunning readonly
> transaction without an xid commits...
>
> Comments about the idea?
>
>
FWIW I'd presented somewhat similar idea and also a patch a few years back
and from what I remember, I'd seen good results with the patch. So +1 for
the idea.

http://www.postgresql.org/message-id/caboikdmsj4osxta7xbv2quhkyuo_4105fjf4n+uyroybazs...@mail.gmail.com

Thanks,
Pavan

-- 
Pavan Deolasee                   http://www.2ndQuadrant.com/
<http://www.2ndquadrant.com/>
PostgreSQL Development, 24x7 Support, Training & Services

Reply via email to