PostgreSQL: Imagine o seguinte cenário, 2 mil locks na base, banco parado e você precisa fazer algo.
Para estas situações recorra ao SHELL, ele é seu amigo:
Primeiro identifique os processos:
for id in `ps -ef | grep transaction | awk '{print $2}'`; do echo $id; done
Se todos realmente forem sessões prendendo ou você não tem tempo para identificar e pode contar com a perda de conexões, mande o comando:
for id in `ps -ef | grep transaction | awk '{print $2}'`; do `kill -15 $id`; done
Pronto, todo mundo que estava em transação pendente morreu. Mas os locks foram liberados e o banco segue feliz, agora o próximo passo é mais complexo, é descobrir, 'POR QUÊ?'. Esse fica pro próximo post.
melhor que usar um kill -15 seria usar uma função interna do Postgres, pg_terminate_backend(pid).
ResponderExcluirVocê pode fazer uma consulta na pg_locks ou pg_stat_activity para selecionar as conexões que podem ser derrubadas.
[]s