Tecnologia de processamento de alta simultaneidade do MySQL MVCC

Obtenha produtos técnicos e informações sobre o setor pela primeira vez!

Tecnologia de processamento de alta simultaneidade do MySQL MVCC

No recente feriado de 1º de maio, além de levar as crianças, também li algumas páginas do "MySQL de alto desempenho". Além disso, há um "MySQL altamente disponível" em casa, que são todos os livros que dei quando estava escrevendo em CSDN. São mais de 40 livros antes e depois, e alguns deles foram jogados fora antes de mudar, o que é uma pena. . .

Todos nós sabemos que existem muitos bloqueios no MySQL. Por exemplo: bloqueios compartilhados, bloqueios exclusivos; bloqueios de tabela, bloqueios de linha; bloqueios de leitura, bloqueios de gravação, etc. Esses bloqueios tendem a reduzir a capacidade de processamento simultâneo do sistema MySQL ao processar dados. Nos primeiros sistemas de banco de dados, apenas leituras e leituras podem ser simultâneas, e leituras e gravações, gravações e leituras e gravações e gravações são bloqueadas. Após a introdução de várias versões, apenas as gravações e gravações bloqueiam umas às outras, e as outras três operações podem ser paralelizadas, o que melhora muito a simultaneidade do InnoDB. A tecnologia de processamento de várias versões é o MVCC do qual estamos falando hoje.

MVCC significa simplesmente que no InnoDB, dois valores ocultos adicionais são adicionados após cada linha de dados para realizar o MVCC. Um desses dois valores registra quando esta linha de dados é criada, e os outros registros quando esta linha de dados é criado. Expirado (ou excluído).
Na operação real, o que é armazenado não é a hora, mas o número da versão da transação. Cada vez que uma nova transação é aberta, o número da versão da transação é incrementado. Cada linha de dados adiciona um identificador de versão. Em uma solução de versão baseada em uma tabela de banco de dados, isso geralmente é obtido adicionando um campo "versão" à tabela de banco de dados. Ao ler os dados, leia este número de versão junto e adicione um a este número de versão ao atualizar mais tarde. Neste ponto, os dados da versão dos dados enviados são comparados com as informações da versão atual do registro correspondente na tabela do banco de dados. Se o número da versão dos dados enviados for maior que o número da versão atual da tabela do banco de dados, será atualizados, caso contrário, são considerados dados desatualizados.

Tecnologia de processamento de alta simultaneidade do MySQL MVCC
Vendo isso, acredito que muitas pessoas vão pensar na operação do CAS. Este MVCC não é semelhante à operação CAS? Na verdade, muitas coisas no mundo da programação são semelhantes.Se você ler "Programação de rede UNIX", verá que o modelo de programação simultânea em Java na verdade se refere a alguns modelos de programação simultânea na camada inferior do sistema operacional.

De Dao Zhi Jian, lembrei que escrevi essas palavras em um artigo anterior. A lógica de processamento de várias versões do MVCC sob o nível de isolamento de transação padrão do MySQL é a seguinte:

  • Em SELECT, ler o número da versão de criação <= número da versão da transação atual, excluir o número da versão está vazio ou> número da versão da transação atual.

  • Quando INSERT, salva o número da versão da transação atual como o número da versão de criação da linha

  • Quando DELETE, salva o número da versão da transação atual como o número da versão de exclusão da linha

  • Durante o UPDATE, insira um novo registro, salve o número da versão da transação atual como o número da versão de criação da linha e salve o número da versão da transação atual na linha originalmente excluída

Através do MVCC, embora cada linha de registros exija espaço de armazenamento adicional, mais trabalho de inspeção de linha e algum trabalho de manutenção adicional, ele pode reduzir o uso de bloqueios. A maioria das operações de leitura não precisa ser bloqueada e a operação de leitura de dados é muito simples e eficiente Muito bom, e também pode garantir que apenas as linhas que atendem ao padrão serão lidas, e apenas as linhas necessárias serão bloqueadas.

Em geral, MVCC tem as seguintes características:

  • Existe uma versão para cada linha de dados, e a versão é atualizada sempre que os dados são atualizados

  • Copie a versão atual ao modificar e, em seguida, modifique à vontade, sem interferência entre as várias transações

  • Compare o número da versão ao salvar, se for bem-sucedido (commit), o registro original será sobrescrito e, se falhar, a cópia (rollback) será abandonada.

  • Ou seja, cada linha tem um número de versão. Ao salvar, é determinado se foi bem-sucedido ou não de acordo com o número da versão. Parece um bloqueio otimista, porque parece ser o caso. Você pode saber se o envio é bem-sucedido no momento da apresentação.

Acho que você gosta

Origin blog.51cto.com/15127565/2666204
Recomendado
Clasificación