FOR [SHARE|UPDATE] NOWAIT may still block in EvalPlanQualFetch

Started by Craig Ringerover 12 years ago4 messageshackers
Jump to latest
#1Craig Ringer
craig@2ndquadrant.com

FOR SHARE|UPDATE NOWAIT will still block if they have to follow a ctid
chain because the call to EvalPlanQualFetch doesn't take a param for
noWait, so it doesn't know not to block if the updated row can't be locked.

The attached patch against master includes an isolationtester spec to
demonstrate this issue and a proposed fix. Builds with the fix applied
pass "make check" and isolationtester "make installcheck".

To reach this point you need to apply the patch in
/messages/by-id/51FB4305.3070600@2ndquadrant.com
first, otherwise you'll get stuck there and won't touch the code changed
in this patch.

--
Craig Ringer http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

Attachments:

0001-Add-noWait-param-to-EvalPlanQualFetch.patchtext/x-patch; name=0001-Add-noWait-param-to-EvalPlanQualFetch.patchDownload+106-6
#2Bruce Momjian
bruce@momjian.us
In reply to: Craig Ringer (#1)
Re: FOR [SHARE|UPDATE] NOWAIT may still block in EvalPlanQualFetch

On Fri, Aug 2, 2013 at 04:00:03PM +0800, Craig Ringer wrote:

FOR SHARE|UPDATE NOWAIT will still block if they have to follow a ctid
chain because the call to EvalPlanQualFetch doesn't take a param for
noWait, so it doesn't know not to block if the updated row can't be locked.

The attached patch against master includes an isolationtester spec to
demonstrate this issue and a proposed fix. Builds with the fix applied
pass "make check" and isolationtester "make installcheck".

To reach this point you need to apply the patch in
/messages/by-id/51FB4305.3070600@2ndquadrant.com
first, otherwise you'll get stuck there and won't touch the code changed
in this patch.

The above looks like a legitimate patch that was not applied:

/messages/by-id/51FB6703.9090801@2ndquadrant.com

The patch mentioned in the text above was applied, I think.

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ Everyone has their own god. +

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#3Craig Ringer
craig@2ndquadrant.com
In reply to: Bruce Momjian (#2)
Re: FOR [SHARE|UPDATE] NOWAIT may still block in EvalPlanQualFetch

On 02/01/2014 05:28 AM, Bruce Momjian wrote:

On Fri, Aug 2, 2013 at 04:00:03PM +0800, Craig Ringer wrote:

FOR SHARE|UPDATE NOWAIT will still block if they have to follow a ctid
chain because the call to EvalPlanQualFetch doesn't take a param for
noWait, so it doesn't know not to block if the updated row can't be locked.

The attached patch against master includes an isolationtester spec to
demonstrate this issue and a proposed fix. Builds with the fix applied
pass "make check" and isolationtester "make installcheck".

To reach this point you need to apply the patch in
/messages/by-id/51FB4305.3070600@2ndquadrant.com
first, otherwise you'll get stuck there and won't touch the code changed
in this patch.

The above looks like a legitimate patch that was not applied:

/messages/by-id/51FB6703.9090801@2ndquadrant.com

The patch mentioned in the text above was applied, I think.

The first patch, linked to in text, was commited as
706f9dd914c64a41e06b5fbfd62d6d6dab43eeb8.

I can't see the second in the history either. It'd be good to get it
committed, though the issue is obviously not causing any great outcry.

It was detected when testing a high-rate queueing system in PostgreSQL.

--
Craig Ringer http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#4Andres Freund
andres@anarazel.de
In reply to: Bruce Momjian (#2)
Re: FOR [SHARE|UPDATE] NOWAIT may still block in EvalPlanQualFetch

Hi,

On 2014-01-31 16:28:08 -0500, Bruce Momjian wrote:

On Fri, Aug 2, 2013 at 04:00:03PM +0800, Craig Ringer wrote:

FOR SHARE|UPDATE NOWAIT will still block if they have to follow a ctid
chain because the call to EvalPlanQualFetch doesn't take a param for
noWait, so it doesn't know not to block if the updated row can't be locked.

The attached patch against master includes an isolationtester spec to
demonstrate this issue and a proposed fix. Builds with the fix applied
pass "make check" and isolationtester "make installcheck".

To reach this point you need to apply the patch in
/messages/by-id/51FB4305.3070600@2ndquadrant.com
first, otherwise you'll get stuck there and won't touch the code changed
in this patch.

The above looks like a legitimate patch that was not applied:

/messages/by-id/51FB6703.9090801@2ndquadrant.com

The patch mentioned in the text above was applied, I think.

Craig: I think you should add this to the next CF. Seems like something
we should fix, but which isn't super urgent. But when the skip locked
stuff comes in it'll be more relevant.
Might also need a rebase.

Greetings,

Andres Freund

--
Andres Freund http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers