Extremamente lento ao executar múltiplas consultas individuais do MySQL

1

Eu tenho notado um problema de desempenho em um dos meus servidores executando Apache / PHP / MySQL.

Então decidi investigar e testar em outros servidores.

O que eu fiz?

Em três servidores diferentes, criei um banco de dados ( db_sandbox ), com uma única tabela innodb ( table_sandbox ), com 4 colunas ( id (int), título (varchar 255), descrição (texto), data (data e hora)). OBSERVAÇÃO: id é a chave primária com incremento automático.

Eu criei uma rotina PHP simples que inclui 15.000 registros nesta tabela, em grupos de 5.000, usando 3 métodos diferentes:

  • Método 1 : 5.000 comandos de inserção, cada um sendo processado individualmente por meio de 5.000 consultas únicas
  • Método 2 : 5.000 comandos de inserção, separados por ponto e vírgula, em uma única chamada para o banco de dados.
  • Método 3 : 1 comando de inserção de 5.000 registros.

Antes de mais nada, é óbvio que os Métodos 2 e 3 são os melhores em termos de desempenho. Mas este não é o ponto. Na palavra real, os métodos 2 e 3 são apenas cenários ideais, mas raramente ocorrem.

De qualquer forma, quando comparo os resultados de cada um deles, fiquei surpreso. Considerando SERVER-1 como meu servidor problemático, é o que obtive:

  • Método 1 : O SERVIDOR-2 é 165x mais rápido e o SERVIDOR-3 é 40x mais rápido ;
  • Método 2 : O SERVER-2 é 6x mais rápido e o SERVER-3 é 7x mais rápido ;
  • Método 3 : O SERVER-2 é 5% mais lento e o SERVER-3 é 1,5x mais rápido ;

Minha conclusão é que há algo nas configurações do SERVER-1 que está afetando a execução de várias consultas individuais.

Alguém sabe quais configurações eles podem ser?

SERVER-1: esta é uma máquina virtual

  • Intel Xeon E5-2630 v3 de 2,4 GHz
  • 16 GB de RAM
  • SSD 120 GB
  • Windows Server 2012 R2
  • MySQL 5.6
  • VMWare

SERVIDOR 2

  • Intel Xeon X3360 2,83 GHz
  • 4 GB de RAM
  • SSD 250 GB
  • Windows Server 2003 (pronto para aposentadoria)
  • MySQL 5.0

SERVIDOR 3

  • Intel I7-3770 de 3,4 GHz
  • 16 GB de RAM
  • SSD 120 GB
  • Windows 8.1 Pro
  • MySQL 5.6

OBSERVAÇÃO : comparei my.ini de SERVER-1 e SERVER-3 e eles são virtualmente idêntico. SERVER-2 , executando Mysql 5.0 é muito diferente.

    
por Dentra Andres 10.11.2015 / 00:27

1 resposta

0

Após vários testes e tentativas de combinações diferentes, não posso dizer que encontrei a solução perfeita, o que provavelmente incluiria algumas configurações de VMs que meu pessoal de TI não encontraria. Em qualquer caso, aqui estão as duas coisas que realmente fizeram diferença no desempenho (lembre-se que isso só se aplica a INNODB ):

1 - Use transações, ou seja, desative o compromisso automático, faça todas as transações e confirme no final.

2 - Você pode obter um grande aumento no desempenho definindo innodb-flush -log-at-trx-commit para 0 ou 1 . Leia a documentação completa para entender as consequências dessa ação.

Espero que isso ajude alguém de fora.

    
por 24.11.2015 / 20:43