Acabei de emitir este comando para uma mesa e já se passaram 2 horas, mas não terminei:vacuum verbose people_data
Não consigo nem cancelar o processo pois não consigo ver o PID usando esta consulta:
SELECT pid,
now() - pg_stat_activity.query_start AS duration,
query,
state
FROM pg_stat_activity
WHERE (now() - pg_stat_activity.query_start) > interval '5 minutes'
and state = 'idle'
order by duration desc;
O tamanho desta tabela é de apenas 16 GB. A tupla morta conta apenas no máximo 130 usando (apenas 10 tabelas têm tupla morta acima de 100):
select n_live_tup, n_dead_tup, relname
from pg_stat_all_tables
where n_dead_tup > 100
limit 20;
Agora algumas pessoas me relatam que não conseguem acessar o banco de dados? Felizmente, este é um banco de dados de desenvolvimento, portanto, apenas interrompe o processo de desenvolvimento.
Como posso cancelar o vácuo sem ver o PID?
VACUUM (VERBOSE)
não bloqueará o acesso simultâneo à tabela. Você não usouVACUUM (FULL)
, não é?A razão pela qual você não pode ver o processo de autovacuum é que ele tem
state = 'active'
. Você pode olhar para a exibiçãopg_stat_progress_vacuum
para ver se e comoVACUUM
está procedendo.Com uma tabela pequena como essa, a explicação mais provável é que há uma transação de banco de dados aberta simultânea que está mantendo um bloqueio alto na tabela. Isso também pode explicar por que as pessoas relatam que não conseguem acessar o banco de dados.