Re: PushActiveSnapshot(GetTransactionSnapshot())

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Simon Riggs <simon(at)2ndquadrant(dot)com>
Cc: PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: PushActiveSnapshot(GetTransactionSnapshot())
Date: 2011-08-22 18:07:44
Message-ID: 1314036146-sup-8140@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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(at)commandprompt(dot)com>
The PostgreSQL Company - Command Prompt, Inc.
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Erik Rijkers 2011-08-22 20:16:25 9.1rc1: TRAP: FailedAssertion("!(item_width > 0)", File: "costsize.c", Line: 3274)
Previous Message Robert Haas 2011-08-22 14:59:13 Re: Rethinking sinval callback hook API