O log prejudica o desempenho do MySQL - mas, por quê?

O log prejudica o desempenho do MySQL - mas, por quê?

Estou bastante surpreso por não conseguir ver uma resposta para isso em nenhum lugar do site, nem na documentação do MySQL (seção 5.2parece ter o registro bem coberto!)

Se eu habilitar binlogs, vejo um pequeno impacto no desempenho (subjetivamente), o que é esperado com um pouco de IO extra - mas quando eu habilito um log de consulta geral, vejo um enorme impacto no desempenho (o dobro do tempo para executar consultas, ou pior), muito além do que vejo nos binlogs. É claro que agora estou registrando cada SELECT, bem como cada UPDATE/INSERT, mas outros daemons registram todas as suas solicitações (Apache, Exim) sem parar.

Estou apenas vendo os efeitos de estar perto de um "ponto crítico" de desempenho quando se trata de IO ou há algo fundamentalmente difícil no registro de consultas que faz com que isso aconteça? Eu adoraria poder registrar todas as consultas para facilitar o desenvolvimento, mas não posso justificar o tipo de hardware que precisaríamos para recuperar o desempenho com o login de consultas gerais.

É claro que eu registro consultas lentas e há uma melhoria insignificante no uso geral se eu desabilitar isso.

(Tudo isso está no Ubuntu 10.04 LTS, MySQLd 5.1.49, mas pesquisas sugerem que este é um problema bastante universal)

Responder1

Os logs de consulta geral são ummuitomais IO do que logs binários. Além do fato de que a maioria dos servidores SQL são 90% de leituras e 10% de gravações, os logs binários são armazenados em formato binário em vez de texto simples que usa menos espaço em disco. (Quanto menos espaço? Não tenho certeza. Desculpe.)

Há dois aspectos pelos quais o Apache e o Exim podem registrar todas as solicitações sem impacto significativo no desempenho. A primeira é que eles registram o fato de que uma solicitação ocorreu, mas o que colocam no log geralmente é significativamente menor do que a solicitação real. Uma solicitação HTTP geralmente é duas vezes maior que a linha do log e até mesmo um e-mail curto e de texto simples é 10 ou 20 vezes maior que a linha do log que o acompanha. Um e-mail com anexo de 10 MB ainda terá apenas algumas linhas escritas no log.

A segunda parte é que em uma aplicação web normal geralmente há dezenas de consultas SQL associadas a uma única página HTTP. Os e-mails tendem a vir em números ainda menores do que as solicitações HTTP. Seu servidor MySQL provavelmente está tentando registrar muito mais que o Apache ou o Exim.

Observe o tamanho (descompactado) dos logs binários e gerais do MySQL e dos logs do Apache e Exim no final do dia. Aposto que você descobrirá que o log geral do MySQL é o maior por um fator de pelo menos 5.

Responder2

Para adicionar ao fornecidoresponder, você também verá um impacto no desempenho se estiver registrando no mesmo dispositivo em que seus armazenamentos de dados MySQL residem - se for o mesmo disco, você estará lendo e gravando em vários locais o tempo todo, diminuindo a velocidade todo o processo.

Isso é verdade mesmo que seja uma partição diferente no mesmo disco físico.

Se o registro for para um dispositivo diferente, isso deverá aliviaralgunsdos problemas de desempenho.

informação relacionada