Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Como encerrar uma query longa quando o processo do apache morre?

Vou contextualizar: Supondo que há uma consulta no banco que demore 1h pra ser processada e renderizada na tela para o usuário. E com 5 minutos, o usuário desista de esperar e feche a janela do navegador. o Apache teoricamente vai "matar" o processo, entretanto a consulta no MySQL continua até terminar ou dar timeout, mesmo que não tenha mais um client esperando essa resposta.

Minha pergunta é: Como encerrar também essa consulta no MySQL para que o banco não fique onerado desnecessariamente? (cerca de 55 minutos processando a toa).

links que me deram um luz, mas que não ficou muito claro pra mim, já que a aplicação é legada:

https://stackoverflow.com/questions/21044173/kill-mysql-queries-using-php-if-user-close-the-browser-or-navigate-from-one-page/21048211

https://stackoverflow.com/questions/7582485/kill-mysql-query-on-user-abort

2 respostas
solução

Gabriel, uma consulta dessa NÃO PODE ser executada no ciclo de vida da requisição. Ela deve ser inserida numa fila para ser executada depois, sem que o usuário fique esperando.

Sugiro que corrija a aplicação pois esse erro é sério e pode tirar servidores de produção do ar por bobeira.

Pra encerrar queries: https://stackoverflow.com/questions/3787651/how-can-i-stop-a-running-mysql-query

Obrigado pelo feedback Vinicius, vou verificar com minha equipe.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software