Tenho um servidor dedicado no qual executo MySQL + Apache. Eu executo um script de bate-papo que faz pesquisas a cada 3 segundos. Agora, ontem à noite, meu servidor MySQL morreu devido à carga. Estou me perguntando como maximizar meus threads MySQL, bem como threads Apache.
Alguém pode me indicar URLs que podem me ajudar a conseguir o mesmo?
Obrigado pelo seu tempo.
Responder1
O local canônico para informações de desempenho do MySQL éBlog de desempenho do MySQL. Há também oMySQL de alto desempenholivro de Jeremy Zawodny.
Você pode querer examinar alguma forma de pool de conexões em seu aplicativo, onde ele reutilizará conexões de banco de dados existentes, em vez de criar uma nova conexão para cada nova sessão. Isto reduzirá a sobrecarga de abertura de uma nova conexão TCP e qualquer processamento que o MySQL faça. Também deve reduzir o número de conexões ociosas que o MySQL está executando, já que cada conexão requer uma certa quantidade de memória para existir.
Outra coisa que você pode fazer para reduzir enormemente a carga em seu banco de dados é integrar o memcached. Memcached é um armazenamento de valores-chave distribuído na memória; como um mapa hash conectado à rede. Você modificaria seu aplicativo para pesquisar o memcached e, se não houvesse dados, para verificar o banco de dados. Ao alterar os dados, você os grava no banco de dados e invalida os dados no memcached. Isso significa que você estaria pesquisando o memcached significativamente mais rápido em vez do MySQL.
Depois de implementar esses recursos, e somente quando tiver feito isso, você poderá começar a analisar os ajustes dos parâmetros do MySQL. Há um enorme potencial para estragar tudo e acabar com um banco de dados que fica mais lento do que era antes, se você não souber o que está fazendo. Eu teria pelo menos lido o livro MySQL Performance antes de tentar isso.
Se você puder gastar mais dinheiro, a primeira melhoria seria dividir seu banco de dados em um servidor separado. Se isso não for suficiente, você pode começar a usar uma configuração de replicação mestre e escravo, onde as gravações vão para o servidor mestre, mas as leituras são espalhadas entre o mestre e o escravo. Isso funciona particularmente bem para cargas de trabalho com muita leitura, o que é bastante comum.