MySQL consultas pendurar site

2

Eu recentemente mudei de uma conta de hospedagem compartilhada da Dreamhost para um VPS Linode de 512 mb. O switch tem sido bastante suave para a operação normal do dia-a-dia do meu site, mas alguns problemas com o MySQL surgiram. Um pouco de fundo na minha configuração porque eu não tenho certeza se o problema é com o MySQL ou não:

  • Ngnix 0.7.65
  • Ubuntu 10.04 LTS
  • MySQL 5.1.41

O problema que estou tendo é que sempre que executar uma consulta que não faz parte da operação normal dos sites ... (pode ser qualquer coisa, desde otimizar uma tabela, fazer um SELECT COUNT, até executar uma consulta de exclusão em um conjunto de dados) ... impede que o servidor da web inteiro carregue as páginas. Todas as páginas do meu site têm chamadas de banco de dados, mas as páginas que não interagem com a tabela em que estou trabalhando ainda não serão carregadas. Se você tentar visitar uma página enquanto uma dessas consultas estiver sendo executada, a página tentará carregá-la por cerca de um ou dois minutos antes que o Nginx exiba o erro "502 Gateway Incorreto". Obviamente, isso não é um grande problema para uma COUNT consulta que leva menos de 5 segundos, mas a otimização de tabelas pode fazer com que o site carregue páginas por mais de 5 minutos.

Temos um script que funciona todas as noites, que extrai os 100.000 registros da nossa tabela principal e os armazena em uma tabela separada para uma página de classificações. No Dreamhost, quando este script estava sendo executado, as páginas de rankings do nosso site ficariam vazias, mas o restante do site continuaria operando, no entanto, no VPS, nenhuma página do site será carregada até que a consulta de aproximadamente 6 minutos seja concluída. >

Se mais informações ajudarem, por favor me avise e eu ficaria feliz em fornecer. Eu procurei neste site e no Google, tentando encontrar alguém que tivesse um problema parecido com este, mas não encontrasse nada. Vocês acham que isso é simplesmente um problema com o MySQL, ou isso poderia ser causado pelo meu Nginx? (no Dreamhost eu tinha o Apache).

Obrigado.

    
por alexbaumhoer 29.08.2010 / 06:45

1 resposta

3

Conecte-se ao seu servidor SQL e execute a consulta: "show processlist". Isso mostrará todas as consultas em execução e seu estado atual. Você deve esperar ver quase todos eles no estado LOCKED, o que significa que eles estão aguardando o término de uma das outras consultas. Os que não são BLOQUEADOS são seus candidatos para serem os culpados.

    
por 29.08.2010 / 11:37