WaitForOlderSnapshots in DETACH PARTITION causes deadlocks

Поиск
Список
Период
Сортировка
От Imseih (AWS), Sami
Тема WaitForOlderSnapshots in DETACH PARTITION causes deadlocks
Дата
Msg-id E40E8C2C-EFDC-4896-9CA9-AC35F507F184@amazon.com
обсуждение исходный текст
Ответы Re: WaitForOlderSnapshots in DETACH PARTITION causes deadlocks  (Michael Paquier <michael@paquier.xyz>)
Список pgsql-hackers

Hi,

 

While recently looking into partition maintenance, I found a case in which

DETACH PARTITION FINALIZE could case deadlocks. This occurs when a

ALTER TABLE DETACH CONCURRENTLY, followed by a cancel, the followed by

an ALTER TABLE DETACH FINALIZE, and this sequence of steps occur in the

middle of other REPEATABLE READ/SERIALIZABLE transactions. These RR/SERIALIZABLE

should not accessed the partition until the FINALIZE step starts. See the attached

repro.

 

This seems to occur as the FINALIZE is calling WaitForOlderSnapshot [1]

to make sure that all older snapshots are completed before the finalize

is completed and the detached partition is removed from the parent table

association.

 

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?

 

Perhaps I am missing some important point here, so any feedback will be

appreciated.

 

Regards,

 

Sami Imseih

Amazon Web Services (AWS)

 

 

[1] https://github.com/postgres/postgres/blob/master/src/backend/commands/tablecmds.c#L18757-L18764

[2] https://www.postgresql.org/docs/current/mvcc-caveats.html

Вложения

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

Предыдущее
От: Robert Haas
Дата:
Сообщение: Re: cataloguing NOT NULL constraints
Следующее
От: "Tristan Partin"
Дата:
Сообщение: Re: psql not responding to SIGINT upon db reconnection