Re: PushActiveSnapshot(GetTransactionSnapshot()) - Mailing list pgsql-hackers

From Alvaro Herrera
Subject Re: PushActiveSnapshot(GetTransactionSnapshot())
Date
Msg-id 1314036146-sup-8140@alvh.no-ip.org
Whole thread Raw
In response to PushActiveSnapshot(GetTransactionSnapshot())  (Simon Riggs <simon@2ndQuadrant.com>)
Responses Re: PushActiveSnapshot(GetTransactionSnapshot())
List pgsql-hackers
Excerpts from Simon Riggs's message of dom ago 21 16:23:39 -0300 2011:
> In common cases of snapshot use we run GetSnapshotData() into a
> statically allocated snapshot, then immediately copy the static struct
> into a dynamically allocated copy.
> 
> The static allocation was designed to remove the overhead of dynamic
> allocation, but then we do it anyway.
> 
> The snapmgr code does this explicitly, but the reason isn't
> documented, it just says we must do this.

IIRC the active snapshot is scribbled onto by some operations, which is
why the copy is mandatory.  Maybe there's some way to optimize things so
that the copy is done only when necessary.  IIRC the copying of the
ActiveSnapshot was only introduced because some subtle bugs were
detected in the code without copy.  When I introduced the mandatory
copy, I don't remember thinking about the statically allocated struct.

The fact that PushActiveSnapshot and GetTransactionSnapshot are in two
completely separate modules complicates optimization.  Note I'm not
saying it's impossible -- I just didn't look into it.

-- 
Álvaro Herrera <alvherre@commandprompt.com>
The PostgreSQL Company - Command Prompt, Inc.
PostgreSQL Replication, Consulting, Custom Development, 24x7 support


pgsql-hackers by date:

Previous
From: Robert Haas
Date:
Subject: Re: Rethinking sinval callback hook API
Next
From: "Erik Rijkers"
Date:
Subject: 9.1rc1: TRAP: FailedAssertion("!(item_width > 0)", File: "costsize.c", Line: 3274)