Leia Commited nível de isolamento em caso de bloqueio (princípio da implementação MVCC)

Como conseguir simplesmente bloqueio nível de isolamento RC de isolamento?

Mysql banco de dados suporta lock de registro no motor InnoDB, aumentou através do acesso à transação bloqueio exclusivo (bloqueio X) pode impedir o acesso a outros assuntos, apenas submissão é antes de cometer o acesso puder, evite sujo lê gerado no bloqueio de transação. Mas no cenário de ler, se uma transação durante a operação de atualização, seguido por muitas solicitações simplesmente quer ler, mas porque há um bloqueio só pode esperar. Este método reduz significativamente a eficiência no ambiente de multi-leia concorrente.


situação real, devido ao InnoDB usa o mecanismo de MVCC abaixo do nível RC e isolamento RR, atingir a consistência de non-blocking lê e melhorar a eficiência de leitura e de gravação simultâneas. Na verdade, a versão mais recente snapshot é lido antes de ocorrer a transação.


princípio implementação MVCC (para níveis de isolamento de RC e RR são apenas dois tipos de MVCC)

1. cadeia versão

Para InnoDB tabelas do mecanismo de armazenamento, seus registros de índice em cluster incluirá a coluna dois escondido necessário (row_id não é necessário se a tabela que criamos tem uma chave primária ou não nulo única não criará row_id)

  • 6-byte ID da transação (DB_TRX_ID) um registro de cada caso de alterações , correspondente ao valor ID da transação irá atribuir DB_TRX_ID coluna oculta (ou seja, cada linha deste campo irá gravar o último registro definir este campo para modificar transação id)

  • 7 reversão byte ponteiro (DB_ROLL_PTR) cada vez que uma ficha melhorias tempo , isso irá manter uma coluna de ponteiro escondida, a informação de gravação antes da modificação pode ser encontrado pelo ponteiro

  • Ocultar ID

implementação 2.MVCC dependente:

  • undo log: undo log gravar várias versões de linhas de dados da tabela, que é o processo de reversão da execução da transação, de fato, um MVCC linha várias versões dos dados originais espelhamento de dados.

  • vista leitura: principalmente usados ​​para determinar a visibilidade da versão atual dos dados

  • Criando tempo readvew: em (RC) do nível de isolamento, cada iniciado SELECIONAR cria readview; no nível de isolamento RR, a transação no primeiro pedido SELECT começar a criar readview. É por causa da oportunidade de criar nível diferente readview isolamento decisão RC para evitar leituras sujas, mas não pode evitar leitura não repetível.

    vista de leitura contém quatro elementos importantes

    1. m_ids: Sistema de sistema de ativos na geração de lista readview atual de ID da transação ler e transações de gravação [assuntos atuais (novos serviços) e está sendo memória confirmar a transação não é lista de transações ativa]

    2. min_trx_id: indica o atual sistema ativo na geração de operações de leitura e gravação readview menor ID de transação, isto é, os m_ids mínimos

    3. max_trx_id: gerar um readview sistema deve ser atribuído para o próximo valor de um ID de transação

    4. creator_trx_id: representa o ID de transação do readview operação gerou

       

    Note-se que : max_trx_id valor máximo não m_ids, o ID de transação é a distribuição incremental. Por exemplo, agora ID 1,2,3 estas três operações, a transação for apresentado depois de id 3. Ao gerar readview transacção, incluindo m_ids 1, em que o valor é min_trx_id 1, o valor é 4 max_trx_id

 

3. A transação atual leia o procedimento específico quando um registro de linha (Nota: a transação atual e confirmar a transação estar em memória não é lista readview ativa):

Em innodb no, depois de criar um novo nível de isolamento da transação no RC e cada vez que a instrução SELECT, o sistema atual será lista innodb ativa de transações para criar uma cópia (vista ler), salvar uma cópia do sistema atual é esta transação não deve ser ID de uma lista de outras coisas para ver. Um usuário cria uma assuntos atuais, quando ele queria ler as linhas gravadas, o InnoDB esta linha ele irá gravar o número da versão atual e readview comparar, processo de comparação é a seguinte:

Quando tem ReadView, cada vez que há uma transação quando você quiser linhas de acesso de um bar, basta seguir os passos abaixo para determinar a versão atual do registro é linha visível
1. Se DB_TRX_ID valor da propriedade na linha <ReadView em palavras min_trx_id, indicando a formação de esta versão do registro da transação já apresentou antes desta transação é criada, então o valor atual dos registros bancários são visíveis. Ir para o passo 5.
2. Se DB_TRX_ID valores de propriedade na linha de> = ReadView em max_trx_id (Como mencionado anteriormente, esta máxima não é lista de transações ativo), em seguida, gerar esta versão do show gravado transação antes da abertura após este readview transação criada, portanto, o valor atual não é visível, vá para o passo 4.
3. Se o readView min_trx_id <= DB_TRX_ID valor de atributo <= ReadView em max_trx_id, então é necessária uma determinação, se o DB_TRX_ID transacção lista activa, não visíveis, os retornos 4, se a transacção não está na lista activa, a descrição desta versão gerada a transação tiver sido apresentada, podemos ler, voltar 5.
4. Retire a versão mais recente do registro de ponteiro linha DB_ROLL_PTR desfazer-log está na reversão, ele irá atribuir o DB_TRX_ID, pule para a etapa 1.
5. O valor de linhas visíveis retornado.
6. Se o ID de transação é igual readview acesso em creator_trx_id, o que significa que a visita atual em seus próprios assuntos

4. O processo de linhas de atualização

  1. As linhas de dados iniciais. F1 ~ F6 é o nome do campo, se o valor de 1 a 6 para o campo. Os campos estão escondidos atrás dos três e o número de transações para ser enrolado ponteiro fileira de trás, se isso é apenas inserir os dados podem ser considerados como o ID 1, os outros dois campos estão vazios.

     

MySQL nível de isolamento de transacção da base de dados de bloqueio cada caso --readcommitted && MVCC_

  1. Session1 alterar o valor de cada campo da linha, a operação será feita para a figura a seguir:

    Com bloqueio exclusivo (bloqueio X) bloquear desviado

    registro de log Redo

    Copie o valor antes da modificação desviados para log undo

    Modificando o valor atual de uma linha, um número de transação para o atual 01 (por exemplo, 01 para preencher) o ponteiro para a linha antes do rollback desfazer log modificado

     

    MySQL nível de isolamento de transacção da base de dados de bloqueio cada caso --readcommitted && MVCC_

  2. Session2 novamente modificar o valor da linha, passo session1 é substancialmente a mesma, mas desta vez, existem duas filas de desfazer registro de log, e um ponteiro ligados entre si por uma reversão

 

MySQL nível de isolamento de transacção da base de dados de bloqueio cada caso --readcommitted && MVCC_

 


MVCC multi-versão 5.InnoDB controle de concorrência

MVCC faz uso na leitura dos dados, Innodb quase não pode obter quaisquer bloqueios, cada consulta, verificando a versão, a versão recebeu apenas dados de que necessitam, melhorando em muito a concorrência do sistema. Mas a desvantagem desta estratégia é que cada fileira dos registros precisam de espaço de armazenamento extra, mais inspeções e um trabalho de manutenção extra.

Mas InnoDB não simplesmente usar MVCC, mas em vez de usar MVCC ler bloqueio em uma leitura, realizando outras operações ainda precisa usar um bloqueio exclusivo.

Quando a transação somente modificar uma linha quando se usa MVCC é possível, mas quando a modificação envolve registros de multi-linha, MVCC-lo insuficiente. Por exemplo, uma operação executada MVCC ideal, que pretende modificar duas linhas de dados, a primeira linha da alteração é bem-sucedida, mas a segunda operação de modificação linha de falha e precisa reverter a primeira linha, mas a linha não adicionar os primeiros bloqueios de linha, a transação pode b desta vez na segunda linha foi modificado, mas se uma transação foi revertida mais tarde, ele realizou operações na transação será destruído b

Então Innodb apenas emprestado o nome MVCC fornece non-blocking lê. Ainda usado ao gravar dados exclusivo de bloqueio (lock não usar o espaço, ele ainda pode fazer uma inserção, para que você não pode evitar leitura fantasma), outras transações ainda pode ler os dados bloqueado porque lê-lo apenas versão espelhada

 

 

Acho que você gosta

Origin www.cnblogs.com/leeeeemz/p/12586815.html
Recomendado
Clasificación