Datenbank:Was ist Multiversion Concurrency Control (MVCC) und wer unterstützt es?[geschlossen]

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

  •  09-06-2019
  •  | 
  •  

Frage

Kürzlich hat Jeff Gesendet bezüglich seiner Probleme mit Datenbank-Deadlocks im Zusammenhang mit dem Lesen. Multiversion-Parallelitätskontrolle (MVCC) behauptet, dieses Problem zu lösen.Was ist das und welche Datenbanken unterstützen es?

Aktualisiert:diese unterstützen es (welche anderen?)

  • Orakel
  • postgresql
War es hilfreich?

Lösung

Oracle verfügt seit sehr langer Zeit über ein hervorragendes Multiversionskontrollsystem (zumindest seit Oracle 8.0).

Folgendes sollte helfen.

  1. Benutzer A startet eine Transaktion und aktualisiert zum Zeitpunkt T1 1000 Zeilen mit einem bestimmten Wert
  2. Benutzer B liest zum Zeitpunkt T2 die gleichen 1000 Zeilen.
  3. Benutzer A aktualisiert Zeile 543 mit dem Wert Y (ursprünglicher Wert X).
  4. Benutzer B erreicht Zeile 543 und stellt fest, dass seit dem Zeitpunkt T1 eine Transaktion in Betrieb ist.
  5. Die Datenbank gibt den unveränderten Datensatz aus den Protokollen zurück.Der zurückgegebene Wert ist der Wert, der zum Zeitpunkt kleiner oder gleich T2 festgeschrieben wurde.
  6. Wenn der Datensatz nicht aus den Redo-Logs abgerufen werden konnte, bedeutet dies, dass die Datenbank nicht ordnungsgemäß eingerichtet ist.Den Protokollen muss mehr Speicherplatz zugewiesen werden.
  7. Dadurch wird die Lesekonsistenz erreicht.Die zurückgegebenen Ergebnisse sind in Bezug auf die Startzeit der Transaktion immer gleich.So wird innerhalb einer Transaktion die Lesekonsistenz erreicht.

Ich habe versucht, es so einfach wie möglich zu erklären ... Multiversionierung in Datenbanken hat viel zu bieten.

Andere Tipps

Die folgenden haben eine Implementierung von MVCC:

SQL Server 2005 (nicht standardmäßig, SET READ_COMMITTED_SNAPSHOT ON)

Oracle (seit Version 8)

MySQL 5 (nur mit InnoDB-Tabellen)

PostgreSQL

Feuervogel

Informix

Ich bin mir ziemlich sicher, dass Sybase und IBM DB2 Mainframe/LUW keine Implementierung von MVCC haben

PostgreSQLs Parallelitätskontrolle für mehrere Versionen

Sowie Dieser Artikel Hier finden Sie Diagramme zur Funktionsweise von MVCC bei der Ausgabe von INSERT-, UPDATE- und DELETE-Anweisungen.

XtremeData dbX unterstützt MVCC.

Darüber hinaus kann dbX SQL-Primitive nutzen, die in FPGA-Hardware implementiert sind.

Firebird macht es, sie nennen es MGA (Multi Generational Architecture).

Sie behalten die Originalversion bei und fügen eine neue Version hinzu, die nur die Sitzung, die sie verwendet, sehen kann. Beim Festschreiben wird die ältere Version deaktiviert und die neuere Version für alle aktiviert (die Datei stapelt sich mit Daten und muss regelmäßig bereinigt werden). .

Oracle überschreibt die Daten selbst und verwendet Rollback-Segmente/Rückgängigmachen von Tablespaces für andere Sitzungen und zum Rollback.

Auch SAP HANA nutzt MVCC.SAP HANA ist ein vollständiges In-Memory-Computing-System, daher sind die MVCC-Kosten für ausgewählte Produkte sehr niedrig ...:) :)

Hier ist ein Link zur PostgreSQL-Dokumentseite auf MVCC.Das Wahlzitat (Hervorhebung von mir):

Der Hauptvorteil der Verwendung des MVCC-Modells der Parallelitätskontrolle anstelle von Sperren besteht darin, dass bei MVCC Sperren, die zum Abfragen (Lesen) von Daten erworben wurden, nicht mit Sperren, die zum Schreiben von Daten usw. erworben wurden, in Konflikt stehen Lesen blockiert niemals das Schreiben und Schreiben blockiert niemals das Lesen.

Aus diesem Grund war Jeff so verwirrt über seine Blockaden.Ein Lesevorgang sollte sie niemals verursachen können.

SQL Server 2005 und höher bieten MVCC als Option;Dies ist jedoch nicht die Standardeinstellung.MS nennt es Snapshot-Isolation, wenn der Speicher ausreicht.

MVCC kann auch manuell implementiert werden, indem Sie Ihren Tabellen eine Spalte mit der Versionsnummer hinzufügen und immer Einfügungen anstelle von Aktualisierungen vornehmen.

Der Preis dafür ist eine viel größere Datenbank und langsamere Auswahlvorgänge, da jede einzelne eine Unterabfrage benötigt, um den neuesten Datensatz zu finden.

Es ist eine hervorragende Lösung für Systeme, die eine 100-prozentige Prüfung aller Änderungen erfordern.

MySQL verwendet standardmäßig auch MVCC, wenn Sie InnoDB-Tabellen verwenden:http://dev.mysql.com/doc/refman/5.0/en/innodb-multi-versioning.html

McObject gab im November 2009 bekannt, dass es seiner eingebetteten Datenbank eXtremeDB einen optionalen MVCC-Transaktionsmanager hinzugefügt hat:

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

eXtremeDB, ursprünglich als In-Memory-Datenbanksystem (IMDS) entwickelt, ist jetzt in Editionen mit Hybridspeicher (In-Memory/On-Disk), Hochverfügbarkeit, 64-Bit-Unterstützung und mehr verfügbar.

Eine gute Erklärung von MVCC – mit Diagrammen – und einige Leistungszahlen für eXtremeDB finden Sie in diesem Artikel, geschrieben vom Mitbegründer und CEO von McObject im RTC Magazine:

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

MVCC wird eindeutig immer vorteilhafter, wenn eine Anwendung so skaliert wird, dass sie viele Aufgaben umfasst, die auf mehreren CPU-Kernen ausgeführt werden.

DB2 Version 9.7 enthält eine lizenzierte Version von Postgress Plus.Dies bedeutet, dass diese Funktion (im richtigen Modus) diese Funktion unterstützt.

Berkeley DB unterstützt auch MVCC.

Und wann BDB-Speicher-Engine Wird in MySQL verwendet, MySQL unterstützt auch MVCC.

Berkeley DB ist ein sehr leistungsstarkes, anpassbares, vollständig ACID-konformes DBMS.Es unterstützt verschiedene Methoden zur Indizierung und Master-Slave-Replikation, kann als reiner Schlüsselwertspeicher mit eigener dynamischer API verwendet oder bei Bedarf mit SQL abgefragt werden.Einen Blick wert.

Ein weiteres dokumentenorientiertes DBMS, das MVCC umfasst, wäre CouchDB.MVCC ist hier auch ein großes Plus für die integrierte Peer-to-Peer-Replikation.

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

Couchbase, Orientdb, CouchDB, Postgresql, Project Voldemort, Bigtable, Percona Server, Hypergraphdb, Dreckle, Cloudant, IBM DB2, Intersystems Caché, Interbase

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top