Base de dados:O que é o Multiversion Concurrency Control (MVCC) e quem o oferece suporte?[fechado]

StackOverflow https://stackoverflow.com/questions/27499

  •  09-06-2019
  •  | 
  •  

Pergunta

Recentemente, Jeff postou sobre seu problema com bloqueios de banco de dados relacionados à leitura. Controle de simultaneidade multiversão (MVCC) afirma resolver este problema.O que é e quais bancos de dados o suportam?

Atualizada:estes o apoiam (quais outros?)

  • oráculo
  • postgresql
Foi útil?

Solução

A Oracle possui um excelente sistema de controle multiversão há muito tempo (pelo menos desde o Oracle 8.0)

A seguir deve ajudar.

  1. O usuário A inicia uma transação e está atualizando 1.000 linhas com algum valor no momento T1
  2. O usuário B lê as mesmas 1.000 linhas no tempo T2.
  3. O usuário A atualiza a linha 543 com o valor Y (valor original X)
  4. O usuário B chega à linha 543 e descobre que uma transação está em operação desde o Tempo T1.
  5. O banco de dados retorna o registro não modificado dos Logs.O valor retornado é o valor que foi confirmado no momento menor ou igual a T2.
  6. Se o registro não puder ser recuperado dos logs de redo, significa que o banco de dados não está configurado adequadamente.É necessário haver mais espaço alocado para os logs.
  7. Desta forma, a consistência da leitura é alcançada.Os resultados retornados são sempre os mesmos em relação ao horário de início da transação.Assim, dentro de uma transação, a consistência de leitura é alcançada.

Tentei explicar nos termos mais simples possíveis... há muito em multiversionamento em bancos de dados.

Outras dicas

Os seguintes têm uma implementação do MVCC:

SQL Server 2005 (não padrão, SET READ_COMMITTED_SNAPSHOT ON)

Oracle (desde a versão 8)

MySQL 5 (somente com tabelas InnoDB)

PostgreSQL

Pássaro de Fogo

Informix

Tenho certeza de que Sybase e IBM DB2 Mainframe/LUW não possuem uma implementação de MVCC

Controle de simultaneidade multiversão do PostgreSQL

Assim como Este artigo que apresenta diagramas de como o MVCC funciona ao emitir instruções INSERT, UPDATE e DELETE.

XtremeData dbX suporta MVCC.

Além disso, o dbX pode fazer uso de primitivas SQL implementadas em hardware FPGA.

Firebird faz isso, eles chamam de MGA (Multi Generational Architecture).

Eles mantêm a versão original intacta e adicionam uma nova versão que apenas a sessão que a utiliza pode ver. Quando confirmada, a versão mais antiga é desabilitada e a versão mais recente é habilitada para todos (o arquivo se acumula com dados e precisa de limpeza regular) .

O Oracle sobrescreve os próprios dados e usa segmentos de reversão/desfazer espaços de tabela para outras sessões e para reversão.

SAP HANA também usa MVCC.SAP HANA é um sistema de computação In-Memory completo, portanto os custos de MVCC para seleção são muito baixos...:)

Aqui está um link para a página de documentos do PostgreSQL no MVCC.A citação escolhida (ênfase minha):

A principal vantagem de usar o modelo MVCC de controle de simultaneidade em vez de bloqueio é que no MVCC os bloqueios adquiridos para consulta (leitura) de dados não entram em conflito com os bloqueios adquiridos para gravação de dados e, portanto, a leitura nunca bloqueia a escrita e a escrita nunca bloqueia a leitura.

É por isso que Jeff ficou tão confuso com seus impasses.Uma leitura nunca deve ser capaz de causá-los.

O SQL Server 2005 e superior oferecem MVCC como opção;no entanto, não é o padrão.MS chama isso de isolamento de instantâneo, se não houver memória.

O MVCC também pode ser implementado manualmente, adicionando uma coluna de número de versão às suas tabelas e sempre fazendo inserções em vez de atualizações.

O custo disso é um banco de dados muito maior e seleções mais lentas, pois cada um precisa de uma subconsulta para encontrar o registro mais recente.

É uma excelente solução para sistemas que necessitam de auditoria 100% para todas as alterações.

MySQL também usa MVCC por padrão se você usar tabelas InnoDB:http://dev.mysql.com/doc/refman/5.0/en/innodb-multi-versioning.html

McObject anunciou em 09/11 que adicionou um gerenciador de transações MVCC opcional ao seu banco de dados incorporado eXtremeDB:

http://www.mcobject.com/november9/2009

O eXtremeDB, originalmente desenvolvido como um sistema de banco de dados em memória (IMDS), agora está disponível em edições com armazenamento híbrido (na memória/em disco), alta disponibilidade, suporte a 64 bits e muito mais.

Há uma boa explicação do MVCC - com diagramas - e alguns números de desempenho do eXtremeDB neste artigo, escrito pelo cofundador e CEO da McObject, na RTC Magazine:

http://www.rtcmagazine.com/articles/view/101612

Claramente, o MVCC é cada vez mais benéfico à medida que um aplicativo é dimensionado para incluir muitas tarefas executadas em vários núcleos de CPU.

O DB2 versão 9.7 possui uma versão licenciada do postgress plus.Isso significa que este recurso (no modo correto) oferece suporte a esse recurso.

Banco de dados de Berkeley também suporta MVCC.

E quando Mecanismo de armazenamento BDB é usado no MySQL, o MySQL também suporta MVCC.

Berkeley DB é um DBMS muito poderoso e personalizável, totalmente em conformidade com ACID.Ele suporta vários métodos diferentes para indexação, replicação mestre-escravo, pode ser usado como um armazenamento de valor de chave puro com sua própria API dinâmica ou consultado com SQL, se desejado.Vale a pena dar uma olhada.

Outro SGBD orientado a documentos que abraça o MVCC seria CouchDB.O MVCC aqui também é uma grande vantagem para a replicação ponto a ponto integrada.

De http://vschart.com/list/multiversion-concurrency-control/

Couchbase, Orientdb, CouchDB, PostgreSQL, Project Voldemort, BigTable, servidor Percona, Hypergraphdb, Drizzle, Cloudant, IBM DB2, Caché intersystems, Interbase

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top