Re: SKIP LOCKED DATA (work in progress)
От | Alvaro Herrera |
---|---|
Тема | Re: SKIP LOCKED DATA (work in progress) |
Дата | |
Msg-id | 20140825015757.GU6343@eldon.alvh.no-ip.org обсуждение исходный текст |
Ответ на | Re: SKIP LOCKED DATA (work in progress) (Thomas Munro <munro@ip9.org>) |
Ответы |
Re: SKIP LOCKED DATA (work in progress)
|
Список | pgsql-hackers |
Thomas Munro wrote: > While trying to produce the heap_lock_updated_tuple_rec case you > describe (so far unsuccessfully), I discovered I could make SELECT ... > FOR UPDATE NOWAIT block indefinitely on unpatched 9.3 in a different > code path after heap_lock_tuple returns: in another session, UPDATE, > COMMIT, then UPDATE, all after the first session has taken its > snapshot but before it tries to lock a given row. The code in > EvalPlanQualFetch (reached from the HeapTupleUpdated case in > ExecLockRow) finishes up waiting for the uncommitted transaction. Interesting -- perhaps this helps explain the deadlock issue reported in http://www.postgresql.org/message-id/CAKrjmhdN+GhAjNwqfHsOtGp+7YN27zR79m99RcAJMNazt5NJrA@mail.gmail.com > I think I see how to teach EvalPlanQualFetch how to handle wait > policies: for NOWAIT it should ereport (fixing a pre-existing bug > (?)), and I guess it should handle SKIP LOCKED by returning NULL, > similarly to the way it handles deleted rows, and of course in all > cases passing the wait policy forward to heap_lock_tuple, which it > eventually calls. > > Still looking at heap_lock_updated_tuple. > > The difficulty of course will be testing all these racy cases reproducibly... Does this help? http://www.postgresql.org/message-id/51FB4305.3070600@2ndquadrant.com The useful trick there is forcing a query to get its snapshot and then go to sleep before actually doing anything, by way of an advisory lock. -- Álvaro Herrera http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
В списке pgsql-hackers по дате отправления: