Re: [RFC] GSoC Work on readonly queries done so far

From: "Florian G(dot) Pflug" <fgp(at)phlo(dot)org>
To: Jeff Davis <pgsql(at)j-davis(dot)com>
Cc: Postgresql-Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: [RFC] GSoC Work on readonly queries done so far
Date: 2007-06-06 17:25:52
Message-ID: 4666EE20.1030106@phlo.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Jeff Davis wrote:
> On Wed, 2007-06-06 at 16:11 +0200, Florian G. Pflug wrote:
>> .) Since the slaves needs to track an Snapshot in shared memory, it cannot
>> resize that snapshot to accomodate however many concurrent transactions
>> might have been running on the master. My current plan is to detect if
>> that global snapshot overflows, and to lock out readonly queries on the
>> slave (and therefore remove the need of keeping the snapshot current)
>> until the number of active xids on the master has dropped below
>> max_connections on the slave. A warning will be written to the postgres
>> log that suggest that the DBA increases the max_connections value on
>> the slave.
>>
> If we did lock the slave while waiting for transactions to complete on
> the master, we'd need to document some stronger warnings against idle
> transactions so that administrators could notice and correct the
> problem.

It's not exactly locking until it complete on the master, it's locking
the slave until we reach a position in the wal on the slave with less
than max_connections concurrent transactions. But yes, I agree, this
will need to be documented.

> Are you referring to the size of the xip array being a problem? Would it
> help to tie the size of the xip array to max_connections? I understand
> that max_connections might be greater on the master, but maybe something
> similar?

Thats what I currently do - the xip array on the slave is sized to
hold max_connections entries (Actually, it's max_connections +
max_prepared_xacts I think). The problem occurs exactly if those
values are set too small on the slave - and since shared mem
objects are not resizeable, I don't see how the slave can handle
an xip overflow gracefully other than by not publishing the
information in shared memory as long as it doesn't fit there.

On a further thinking - maybe locking out transactions isn't even
necessary - they would just continue to see the old global snapshot,
so time wouldn't advance for them until the number of concurrent
transactions decreases again.

greetings, Florian Pflug

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Joe Conway 2007-06-06 17:37:55 Re: Implicit casts with generic arrays
Previous Message Florian G. Pflug 2007-06-06 17:18:45 Re: [RFC] GSoC Work on readonly queries done so far