Re: WaitForOlderSnapshots in DETACH PARTITION causes deadlocks

Поиск
Список
Период
Сортировка
От Alvaro Herrera
Тема Re: WaitForOlderSnapshots in DETACH PARTITION causes deadlocks
Дата
Msg-id 20230726135703.f2hxz3asiwxhi4af@alvherre.pgsql
обсуждение исходный текст
Ответ на Re: WaitForOlderSnapshots in DETACH PARTITION causes deadlocks  (Michael Paquier <michael@paquier.xyz>)
Список pgsql-hackers
On 2023-Jul-25, Michael Paquier wrote:

> On Mon, Jul 24, 2023 at 07:40:04PM +0000, Imseih (AWS), Sami wrote:
> > WaitForOlderSnapshots is used here to ensure that snapshots older than
> > the start of the ALTER TABLE DETACH CONCURRENTLY are completely removed
> > to guarantee consistency, however it does seem to cause deadlocks for at
> > least RR/SERIALIZABLE transactions.
> > 
> > There are cases [2] in which certain operations are accepted as not being
> > MVCC-safe, and now I am wondering if this is another case? Deadlocks are
> > not a good scenario, and WaitForOlderSnapshot does not appear to do
> > anything for READ COMMITTED transactions.
> > 
> > So do we actually need WaitForOlderSnapshot in the FINALIZE code? and
> > Could be acceptable that this operation is marked as not MVCC-safe like
> > the other aforementioned operations?
> 
> I guess that there is an argument with lifting that a bit.  Based on
> the test case your are providing, a deadlock occuring between the
> FINALIZE and a scan of the top-level partitioned table in a
> transaction that began before the DETACH CONCURRENTLY does not seem
> like the best answer to have from the user perspective.  I got to
> wonder whether there is room to make the wait for older snapshots in
> the finalize phase more robust, though, and actually make it wait
> until the first transaction commits rather than fail because of a
> deadlock like that.

It took a lot of work to get SERIALIZABLE/RR transactions to work with
DETACHED CONCURRENTLY, so I'm certainly not in a hurry to give up and
just "document that it doesn't work".  I don't think that would be an
acceptable feature regression.

I spent some time yesterday trying to turn the reproducer into an
isolationtester spec file.  I have not succeeded yet, but I'll continue
with that this afternoon.

-- 
Álvaro Herrera         PostgreSQL Developer  —  https://www.EnterpriseDB.com/
"Every machine is a smoke machine if you operate it wrong enough."
https://twitter.com/libseybieda/status/1541673325781196801



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Aleksander Alekseev
Дата:
Сообщение: Re: Remove unused fields in ReorderBufferTupleBuf
Следующее
От: Aleksander Alekseev
Дата:
Сообщение: Re: [PATCH] Check more invariants during syscache initialization