Re: [ADMIN] Simultaneous index creates on different schemas cause deadlock?

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Paul Hinze <paul(dot)t(dot)hinze(at)gmail(dot)com>
Cc: pgsql-admin(at)postgresql(dot)org, pgsql-hackers(at)postgresql(dot)org
Subject: Re: [ADMIN] Simultaneous index creates on different schemas cause deadlock?
Date: 2013-04-25 17:17:31
Message-ID: 10635.1366910251@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-admin pgsql-hackers

Paul Hinze <paul(dot)t(dot)hinze(at)gmail(dot)com> writes:
> [ multiple CREATE INDEX CONCURRENTLY commands will deadlock with each other ]

Hm. I guess the reason nobody noticed this before now is that generally
the idea with CREATE INDEX CONCURRENTLY is to minimize the impact on
system load, hence you wouldn't do more than one at a time. Still, it's
surely a POLA violation that you *can't* do more than one at a time.

The cause is that each one will wait for all older snapshots to be
gone --- and it does that before dropping its own snapshot, so that the
other ones will see it as something to be waited out too.

Since we know that C.I.C. executes in its own transaction, and there
can't be more than one on the same table due to locking, it seems to me
that it'd be safe to drop our own snapshot before waiting for other
xacts to end. That is, we could just rearrange the last few steps in
DefineIndex(), taking care to save snapshot->xmin before we destroy the
snapshot so that we still have that value to pass to
GetCurrentVirtualXIDs().

Anybody see a flaw in that solution?

regards, tom lane

In response to

Responses

Browse pgsql-admin by date

  From Date Subject
Next Message Andres Freund 2013-04-25 17:34:46 Re: [HACKERS] Simultaneous index creates on different schemas cause deadlock?
Previous Message Bèrto ëd Sèra 2013-04-25 15:21:27 Re: DBLink

Browse pgsql-hackers by date

  From Date Subject
Next Message Andres Freund 2013-04-25 17:34:46 Re: [HACKERS] Simultaneous index creates on different schemas cause deadlock?
Previous Message Tom Lane 2013-04-25 16:24:12 Re: minimizing the target list for foreign data wrappers