Um processo está tentando ALTERAR uma tabela (para definir o valor padrão da coluna) em um fluxo de trabalho. Ele está sendo bloqueado devido ao processo de auto-vacuum do postgres não liberar um bloqueio (pode estar segurando um ShareUpdateExclusiveLock).
Os seguintes logs são vistos no postgres -
LOG: automatic vacuum to prevent wraparound of table "my_db.public.event_spl_1740300900": index scans: 0
pages: 0 removed, 16591962 remain, 0 skipped due to pins, 16300723 skipped frozen
tuples: 0 removed, 1244397113 remain, 0 are dead but not yet removable, oldest xmin: 1410720248
buffer usage: 2361602 hits, 6947399 misses, 291262 dirtied
avg read rate: 3.879 MB/s, avg write rate: 0.163 MB/s
system usage: CPU: user: 83.69 s, system: 135.74 s, elapsed: 13990.91 s
LOG: process 113323 acquired AccessExclusiveLock on relation 181282787 of database 180669275 after 5823314.224 ms
Há evidências suficientes aqui para sugerir que o auto-vácuo pode ser o culpado? Se não, qual poderia ser o outro processo de bloqueio?
Sim, a
VACUUM
colocará umSHARE UPDATE EXCLUSIVE
bloqueio de tabela na tabela, o que entra em conflito com oACCESS EXCLUSIVE
bloqueio que aALTER TABLE
instrução precisa.Processos normais de autovacuum morrerão silenciosamente
deadlock_timeout
se estiverem bloqueando uma declaração do usuário, mas um autovacuum "para evitar wraparound" tem negócios a resolver e não recuará.