Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Desempenho de bloqueio de nível de linha do InnoDB - quantas linhas?


Não está totalmente claro o que você está perguntando. O bloqueio garante que apenas um usuário tente modificar uma determinada linha a qualquer momento. O bloqueio em nível de linha significa que apenas a linha que eles estão modificando está bloqueada. As alternativas usuais são bloquear a tabela inteira durante a modificação ou bloquear algum subconjunto da tabela. O bloqueio em nível de linha simplesmente reduz esse subconjunto de linhas ao menor número que ainda garante a integridade.

A ideia é permitir que um usuário modifique uma coisa sem impedir que outros usuários modifiquem outras coisas. Vale a pena notar, no entanto, que em alguns casos isso pode ser um falso positivo, por assim dizer. Alguns bancos de dados suportam bloqueio em nível de linha, mas tornam um bloqueio em nível de linha consideravelmente mais caro do que bloquear uma parte maior da tabela - mais caro o suficiente para ser contraproducente.

Editar:Sua edição do post original ajuda, mas não muito. Em primeiro lugar, os tamanhos das linhas e os níveis de hardware envolvidos têm um efeito enorme (inserir uma linha de 8 bytes em uma dúzia de discos rígidos SAS de 15K listrados é um pouco mais rápido do que inserir uma linha de um megabyte em um único disco rígido de classe de consumidor ).

Em segundo lugar, trata-se principalmente do número de usuários simultâneos, então o padrão de inserção faz uma grande diferença. 1000 linhas inseridas às 3 da manhã provavelmente não serão notadas. 1000 linhas inseridas uniformemente ao longo do dia significam um pouco mais (mas provavelmente apenas um pouco). 1000 linhas inseridas como um direito de lote quando 100 outros usuários precisam de dados imediatamente podem fazer com que alguém seja demitido (especialmente se um desses 100 for o proprietário da empresa).