MySQL INSERT ocasionalmente não inserindo no DB

2

Eu tenho uma consulta INSERT que adiciona um pedido ao banco de dados, ele foi executado em um servidor de produção com sucesso por alguns anos, hoje em torno de 10% desses INSERTs não apareceram na tabela de banco de dados, não houve alterações para o código que executa esta consulta, então estou assumindo que este é o desempenho baseado em como o servidor está certamente sob uma carga mais pesada recentemente.

A tabela é MyISAM com cerca de 90.000 registros em execução em um servidor CentOS.

Há algum método de solução de problemas que eu possa usar para ver por que a consulta não está inserindo os dados, pois acho que o próprio servidor é o gargalo?

    
por Stuart 08.08.2011 / 15:49

2 respostas

1

A alta carga não faria com que o MySQL soltasse cegamente as consultas INSERT. Meu palpite é que seu aplicativo talvez esteja recebendo um erro ao se conectar ao DB e, como tal, o MySQL nunca está realmente recebendo a consulta INSERT. Eu recomendaria examinar seu código para verificar se você está capturando e registrando corretamente os erros de banco de dados.

Como um aparte, você realmente verificou para ver se o servidor está com carga alta. Você diz que esta tabela tem 90k registros (o que na verdade é bem pequeno), mas você não dá números sobre quantas consultas / segundo o servidor está manipulando. Execute top para observar a média de carga durante o pico de uso, prestando atenção não apenas à média de carga em si, mas também à porcentagem de processos de tempo no iowait (o valor %wa em top )

    
por 08.08.2011 / 16:09
1

Eu também suponho que o código ignore um erro durante a execução. Possíveis razões:

  • Limite de conexão do MySQL alcançado (veja a resposta de ErikA). Basicamente, o servidor não obtém as consultas INSERT. Verifique o número de conexões (threads_connected em "SHOW GLOBAL STATUS;" em comparação com max_connections).
  • Um parâmetro está errado e o INSERT falha, mas o erro é ignorado. Habilite o MySQL Query Log para ver se o servidor obtém uma consulta com parâmetros errados
  • O código falha antes de enviar a consulta (por exemplo, devido à conversão de parâmetro mágico). Verifique o log de erros do php / registro de erros do servidor da web.
por 08.08.2011 / 16:19

Tags