On 19-10-2012 12:22, Antonio Cesar wrote:
> Pessoal estou criando uma script para roda vacuum no banco, porem encontrei
> uma situação desagradavel quando existe alguns processos em "idle in
> transaction".
> Estou usando a função da seguinte maneira SELECT pg_terminate_backend(procpid)
> FROM pg_stat_activity.
> Ha algum problema com este procedimento?
> 
Você não disse qual o comando (VACUUM ou VACUUM FULL) é utilizado no script.
Se for VF, ele precisa de um AccessExclusive, ou seja, todas os comandos que
se referem aquela tabela são bloqueados. Já o VACUUM precisa de um
AccessExclusiveLock, ou seja, bloqueia basicamente comandos DDL na tabela
incluindo criação de índices mas não comandos DML.

As transações no estado "idle in transaction" só vão atrapalhar se tiverem
algum lock que conflita com o lock referente ao do comando utilizado (VACUUM
ou VACUUM FULL). Leia mais sobre isso em [1].

Não é recomendado ficar "matando" conexões; ao invés disso, corrija a
aplicação para que isso não ocorra. Uma outra recomendação é habilitar o
autovacuum ao invés de ficar fazendo VACUUM manual.


[1] http://www.postgresql.org/docs/current/static/explicit-locking.html


-- 
   Euler Taveira de Oliveira - Timbira       http://www.timbira.com.br/
   PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a