On Sun, Oct 25, 2015 at 2:28 AM, Jeff Janes wrote:
> On Sat, Oct 24, 2015 at 4:08 AM, Michael Paquier
> <michael.paquier@gmail.com> wrote:
>> On Sat, Oct 24, 2015 at 4:16 PM, Maxim Boguk wrote:
>>> I suppose deadlock had been happened when replay process replaying
>>> truncation to zero pages after vacuum on the master db (but it's mostly
>>> theory with no good evidence).
>>
>> By what was AccessExclusiveLock created on master? Did you run
>> TRUNCATE on those two relations from time to time?
>
> AccessExclusiveLock is automatically taken by vacuum when it thinks it
> can truncate pages off the end of the relation.
Thanks, I didn't know this one, that's in lazy_truncate_heap. Still I
don't think that this would normally deadlock except if the order of
the records was somewhat swapped: if the truncation actually happens
what is generated is XLOG_SMGR_TRUNCATE and this code path does not
perform recovery conflict checks. A XLOG_HEAP2_CLEAN record is
generated before the exclusive lock is taken for truncation.
--
Michael