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.