Isso soa muito como bloqueio. Você está usando tabelas MyISAM? Uma consulta de gravação a uma tabela MyISAM bloqueia a tabela inteira, o que fará com que qualquer solicitação de leitura simultânea tenha que esperar até que a gravação seja concluída. Como a única diferença entre os servidores é o número de solicitações simultâneas, este é meu primeiro palpite. O InnoDB possui bloqueio em nível de linha para gravações, o que o torna uma opção melhor para esse tipo de carga de trabalho de leitura / gravação.
O cache de consulta do MySQL também pode ser um ponto de bloqueio, já que todas as entradas de uma determinada tabela precisam ser liberadas toda vez que qualquer gravação for feita nessa tabela. Caches de consulta maiores nem sempre são melhores e podem causar grandes lentidões.
Você tem seu log lento do MySQL ativado? Você também pode querer adicionar log_queries_not_using_indexes
. Contenção de disco seria meu segundo palpite. A saída de vmstat 5 5
deve ajudar a determinar isso. (Como sempre com vmstat
, ignore a primeira linha.) Se esse for o seu problema, você poderá resolvê-lo da seguinte maneira:
- Adicionando mais RAM.
- Uso de discos mais rápidos, como 15k RPM ou SSDs.
- Alterar seu aplicativo para exigir menos escrita.
- Armazenando suas leituras em outro lugar, como memcached.
Provavelmente também vale a pena correr mysqltuner.pl
no seu servidor MySQL. Para obtê-lo, basta digitar wget mysqltuner.pl
.