Re: Avoiding deadlock errors in CREATE INDEX CONCURRENTLY
От | Kuntal Ghosh |
---|---|
Тема | Re: Avoiding deadlock errors in CREATE INDEX CONCURRENTLY |
Дата | |
Msg-id | CAGz5QCLpG+JB7+y5EiBSyUkHvaA+NNVwgK4ggsoEHssTe1QtWg@mail.gmail.com обсуждение исходный текст |
Ответ на | Avoiding deadlock errors in CREATE INDEX CONCURRENTLY ("Goel, Dhruv" <goeldhru@amazon.com>) |
Ответы |
Re: Avoiding deadlock errors in CREATE INDEX CONCURRENTLY
|
Список | pgsql-hackers |
Hello,
On Wed, May 15, 2019 at 1:45 PM Goel, Dhruv <goeldhru@amazon.com> wrote:
Proposed Solution:
We remove the third wait state completely from the concurrent index build. When we mark the index as ready, we also mark “indcheckxmin” to true which essentially enforces Postgres to not use this index for older snapshots.
Instead of waiting in the third phase, if we just set indcheckxmin as true, the above transactions will be able to use the index which is wrong. (because they won't find the recently deleted tuples from the index that are still live according to their snapshots)
The respective code from get_relation_info:
if (index->indcheckxmin &&
!TransactionIdPrecedes(HeapTupleHeaderGetXmin(indexRelation->rd_indextuple->t_data), TransactionXmin))
{ /* don't use this index */ }
Please let me know if I'm missing something.
В списке pgsql-hackers по дате отправления: