Estou trabalhando em um site que acredito que recebe cerca de 70 mil visitas por dia e faz uso de muitas consultas que usam UNION's
mais de 45 tabelas diferentes. Essas tabelas geralmente variam de cerca de 15 mil linhas a cerca de 500 mil linhas em cada tabela.
Otimizamos o query cache
melhor possível, mas sempre que uma das tabelas é alterada e os dados do cache precisam ser removidos, o servidor começa a travar e o mysql tmp dir
fica cheio e a carga do servidor sobe muito e o seguinte tem que ser feito para corrigir o problema:
- Pare o mysql (o carregamento volta ao normal)
- reparar as tabelas do banco de dados
- limpar cache do mysql
- liberar memcache
- reparar tabelas de banco de dados novamente
- reinicie o mysql
Eu sei que a replicação é provavelmente a melhor ideia, mas provavelmente também a mais cara. Então, estou me perguntando se utilizar Sphinx
dehttp://sphinxsearch.com/ajudaria muito?
Eu usei-o antes em outro site para poder obter pesquisa de texto completo nas tabelas INNODB, então tenho um pouco de conhecimento de como funciona, mas não tenho certeza de como lidaria com algo assim.
Ele utiliza seus próprios métodos de cache? Como não gostaria de mudar para isso e ainda ter os mesmos problemas com o Sphinx.
Editar:Abaixo está uma captura de tela do EXPLAIN
(primeira linha faltando, tive problemas com o programa de captura de tela)
Atualizar:O site recebe apenas 30/k visitantes/dia agora.
Responder1
Você deve identificar e resolver os problemas do banco de dados, 70 mil visitas por dia não é muito e o MySQL é capaz de lidar com essa quantidade de trabalho. Você deve baixar e usar mysqlreport
uma ferramenta semelhante para analisar e ajustar o uso dos buffers MyISAM e InnoDB do MySQL (eu também recomendaria mudar para o InnoDB se você ainda estiver usando o MyISAM). A próxima etapa é habilitar o log de consultas lentas no MySQL e analisar o log de consultas lentas diariamente usando pt-query-digest
a ferramenta e EXPLAIN
o comando MySQL. Provavelmente seu banco de dados não possui índices adequados.