Alta taxa de espera de bloqueio no MySQL

2

no meu site eu registro cada visualização de página (data, ip, referencia, página, etc) em uma simples tabela mysql.

Esta tabela recebe muito poucas seleções (3 por minuto), mas muitas inserções. (cerca de 100 por segundo)

Hoje eu mudei essa tabela de uma tabela InnoDB para uma tabela MEMORY, isso fez sentido para mim para evitar IO desnecessário no disco rígido. Eu também podarei essa mesa uma vez por minuto, para ter certeza de que ela nunca ficará muito grande.

-

Em termos de desempenho, as coisas estão funcionando bem. Mas notei que, ao executar o tuning-primer, minha taxa de Espera de Bloqueio Atual é bastante alta.

Current Lock Wait ratio = 1 : 561

Minha pergunta: Devo me preocupar com essa taxa de espera de bloqueio? E há algo que eu possa mudar no meu my.cnf para melhorar as coisas para que a taxa de espera de bloqueio não seja tão alta?

    
por Mr.Boon 16.01.2012 / 18:43

1 resposta

1

Eu diria que se você está feliz com o desempenho você não deve se preocupar com isso, especialmente porque esta é uma tabela MEMORY.

Adivinha a possível causa:

  1. Você tem muitas inserções. Se eles vierem de fontes concorrentes, eles podem causar travamento interno da tabela de memória durante as inserções. Isto não é provavelmente um problema porque você está usando a tabela MEMORY, que será muito rápida. Você não pode impedir todo o bloqueio para acesso simultâneo. Você pode tentar INSERT DELAYED para ver se isso ajuda.
  2. Você tem alguma coluna UNIQUE? O bloqueio pode ser causado por um índice ausente que causa varredura de tabela sequencial para cada inserção para verificar a restrição UNIQUE ou alguma causa semelhante (não tenho certeza se o MySQL permite colunas UNIQUE sem um índice).
por 25.06.2012 / 10:31