Base de données:Qu'est-ce que le contrôle d'accès concurrentiel multiversion (MVCC) et qui le prend en charge ?[fermé]

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

  •  09-06-2019
  •  | 
  •  

Question

Récemment, Jeff a posté concernant ses problèmes avec les blocages de bases de données liés à la lecture. Contrôle de concurrence multiversion (MVCC) prétend résoudre ce problème.De quoi s’agit-il et quelles bases de données le prennent en charge ?

mis à jour:ceux-ci le soutiennent (quels autres ?)

  • oracle
  • postgresql
Était-ce utile?

La solution

Oracle dispose d'un excellent système de contrôle multi-versions depuis très longtemps (au moins depuis Oracle 8.0)

Ce qui suit devrait aider.

  1. L'utilisateur A démarre une transaction et met à jour 1 000 lignes avec une certaine valeur au moment T1
  2. L'utilisateur B lit les mêmes 1 000 lignes au temps T2.
  3. L'utilisateur A met à jour la ligne 543 avec la valeur Y (valeur d'origine X)
  4. L'utilisateur B atteint la ligne 543 et constate qu'une transaction est en cours depuis l'instant T1.
  5. La base de données renvoie l'enregistrement non modifié des journaux.La valeur renvoyée est la valeur qui a été validée à ce moment-là, inférieure ou égale à T2.
  6. Si l'enregistrement n'a pas pu être récupéré des journaux redo, cela signifie que la base de données n'est pas configurée correctement.Il doit y avoir plus d'espace alloué aux journaux.
  7. De cette façon, la cohérence de lecture est obtenue.Les résultats renvoyés sont toujours les mêmes en ce qui concerne l'heure de début de la transaction.Ainsi, au sein d'une transaction, la cohérence de lecture est atteinte.

J'ai essayé d'expliquer dans les termes les plus simples possibles... le multiversion dans les bases de données comporte de nombreux aspects.

Autres conseils

Les éléments suivants ont une implémentation de MVCC :

SQL Server 2005 (non par défaut, SET READ_COMMITTED_SNAPSHOT ON)

Oracle (depuis la version 8)

MySQL 5 (uniquement avec les tables InnoDB)

PostgreSQL

Oiseau de feu

Informix

Je suis presque sûr que Sybase et IBM DB2 Mainframe/LUW n'ont pas d'implémentation de MVCC

Contrôle de concurrence multiversion de PostgreSQL

Ainsi que Cet article qui présente des diagrammes du fonctionnement de MVCC lors de l'émission d'instructions INSERT, UPDATE et DELETE.

XtremeData dbX prend en charge MVCC.

De plus, dbX peut utiliser des primitives SQL implémentées dans le matériel FPGA.

Firebird le fait, ils l'appellent MGA (Multi Generational Architecture).

Ils conservent la version originale intacte et ajoutent une nouvelle version que seule la session qui l'utilise peut voir. Une fois validée, l'ancienne version est désactivée et la version la plus récente est activée pour tout le monde (le fichier s'accumule avec des données et nécessite un nettoyage régulier). .

Oracle écrase les données lui-même et utilise des segments de restauration/des espaces de table d'annulation pour d'autres sessions et pour la restauration.

SAP HANA utilise également MVCC.SAP HANA est un système informatique entièrement en mémoire, les coûts MVCC pour la sélection sont donc très faibles...:)

Voici une lien vers la page de documentation PostgreSQL sur MVCC.La citation de choix (c'est moi qui souligne) :

Le principal avantage de l'utilisation du modèle MVCC de contrôle de concurrence plutôt que du verrouillage est que dans MVCC, les verrous acquis pour l'interrogation (lecture) des données n'entrent pas en conflit avec les verrous acquis pour l'écriture des données, et donc la lecture ne bloque jamais l'écriture et l'écriture ne bloque jamais la lecture.

C'est pourquoi Jeff était si déconcerté par ses impasses.Une lecture ne devrait jamais pouvoir les provoquer.

SQL Server 2005 et versions ultérieures proposent MVCC en option ;ce n'est cependant pas la valeur par défaut.MS appelle cela l'isolation des instantanés, si ma mémoire est bonne.

MVCC peut également être implémenté manuellement, en ajoutant une colonne de numéro de version à vos tables et en effectuant toujours des insertions au lieu de mises à jour.

Le coût est une base de données beaucoup plus grande et une sélection plus lente puisque chacune a besoin d'une sous-requête pour trouver le dernier enregistrement.

C'est une excellente solution pour les systèmes qui nécessitent un audit à 100 % pour toutes les modifications.

MySQL utilise également MVCC par défaut si vous utilisez des tables InnoDB :http://dev.mysql.com/doc/refman/5.0/en/innodb-multi-versioning.html

McObject a annoncé en 11/09 avoir ajouté un gestionnaire de transactions MVCC en option à sa base de données intégrée eXtremeDB :

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

eXtremeDB, initialement développé en tant que système de base de données en mémoire (IMDS), est désormais disponible dans des éditions avec stockage hybride (en mémoire/sur disque), haute disponibilité, prise en charge 64 bits et plus encore.

Il y a une bonne explication de MVCC – avec des diagrammes – et quelques chiffres de performances pour eXtremeDB dans cet article, écrit par le co-fondateur et PDG de McObject, dans RTC Magazine :

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

De toute évidence, MVCC est de plus en plus avantageux à mesure qu'une application évolue pour inclure de nombreuses tâches s'exécutant sur plusieurs cœurs de processeur.

DB2 version 9.7 contient une version sous licence de postgress plus.Cela signifie que cette fonctionnalité (dans le bon mode) prend en charge cette fonctionnalité.

Base de données de Berkeley prend également en charge MVCC.

Et quand Moteur de stockage BDB est utilisé dans MySQL, MySQL prend également en charge MVCC.

Berkeley DB est un SGBD très puissant et personnalisable entièrement conforme à l'ACID.Il prend en charge plusieurs méthodes différentes d'indexation, de réplication maître-esclave, peut être utilisé comme un magasin de valeurs de clé pure avec sa propre API dynamique ou interrogé avec SQL si vous le souhaitez.Ça vaut le coup d'y jeter un oeil.

Un autre SGBD orienté document intégrant MVCC serait CouchDB.MVCC constitue également ici un gros plus pour la réplication peer-to-peer intégrée.

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

Couchbase, orientdb, couchdb, postgresql, project voldemort, bigTable, percona serveur, hypergraphdb, ardem

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top