Heim  >  Artikel  >  Datenbank  >  Super detaillierte Erklärung der MySQL-Speicher-Engine-InnoDB

Super detaillierte Erklärung der MySQL-Speicher-Engine-InnoDB

王林
王林nach vorne
2019-08-27 15:15:572941Durchsuche

Wenn Sie sehen möchten, welche Speicher-Engine Ihre Datenbank standardmäßig verwendet, können Sie den Befehl verwenden:

SHOW VARIABLES LIKE 'storage_engine';

1 >. InnoDB ist die bevorzugte Engine für Transaktionsdatenbanken

Unterstützt Transaktionssicherheitstabellen (ACID)ACID-Eigenschaften von Transaktionen: Atomizität, Konsistenz, Isolation, Haltbarkeit

a.

Atomizität

: Atomizität bedeutet, dass dieser Satz von Anweisungen entweder vollständig oder überhaupt nicht ausgeführt wird. Wenn während der Ausführung der Transaktion ein Fehler auftritt, wird die Datenbank auf den Punkt zurückgesetzt, an dem sie ausgeführt wird Die Transaktion begann.

Implementierung: Basiert hauptsächlich auf dem Redo- und Undo-Mechanismus des MySQ-Protokollsystems. Eine Transaktion ist eine Reihe von SQL-Anweisungen mit Funktionen wie Auswahl, Abfrage und Löschung. Für jede Anweisungsausführung gibt es einen Knoten. Nachdem beispielsweise die Löschanweisung ausgeführt wurde, wird in der Transaktion ein Datensatz gespeichert. Dieser Datensatz speichert, wann und was wir getan haben. Wenn etwas schief geht, wird es auf die ursprüngliche Position zurückgesetzt, was ich bereits in der Wiederherstellung gespeichert habe, und kann dann in umgekehrter Reihenfolge ausgeführt werden.

b.Konsistenz: Die Integritätsbeschränkungen der Datenbank werden vor und nach Beginn der Transaktion nicht verletzt. (Beispiel: Wenn A beispielsweise Geld an B überweist, ist es für A unmöglich, das Geld abzuziehen, B es aber nicht erhält)

c.Isolation: Nur gleichzeitig Eine Transaktion darf dieselben Daten anfordern.

Wenn die Isolation nicht berücksichtigt wird, treten mehrere Probleme auf: i,

Dirty Read

: Bezieht sich auf die Daten, die in einer anderen nicht festgeschriebenen Transaktion während der Verarbeitung gelesen werden (wenn eine Transaktion bestimmte Daten mehrmals ändert und die mehrfachen Änderungen in dieser Transaktion noch nicht festgeschrieben wurden, greift eine gleichzeitige Transaktion auf diese Daten zu dazu führen, dass die von den beiden Transaktionen erhaltenen Daten inkonsistent sind); (nicht festgeschriebene schmutzige Daten aus einer anderen Transaktion lesen)

ii. Nicht wiederholbares Lesen: in der Datenbank Für bestimmte Daten mehrere Abfragen Innerhalb eines Transaktionsbereichs wurden unterschiedliche Datenwerte zurückgegeben. Dies liegt daran, dass er während des Abfrageintervalls von einer anderen Transaktion geändert und übermittelt wurde (die von der vorherigen Transaktion übermittelten Daten wurden gelesen und alle abgefragten Daten waren dasselbe Datenelement). >

iii,

Virtuelles Lesen (Phantomlesen) : Es handelt sich um ein Phänomen, das auftritt, wenn Transaktionen nicht unabhängig voneinander ausgeführt werden (z. B.: Transaktion T1 liest alle Zeilen in einer Tabelle. Ein Datenelement wurde von „1 " auf „2“. Zu diesem Zeitpunkt hat die Transaktion T2 eine Reihe von Datenelementen in die Tabelle eingefügt, und der Wert dieses Datenelements war immer noch „1“ und wurde an die Datenbank übermittelt. Wenn der Benutzer die Transaktion T1 ausführt, sieht er sich die Daten an Gerade geändert, wird er feststellen, dass es noch eine Zeile gibt, die nicht geändert wurde. Tatsächlich wurde diese Zeile aus der Transaktion T2 hinzugefügt, als ob er halluzinierte (die von der vorherigen Transaktion übermittelten Daten werden gelesen). Datenstapel als Ganzes)

d.

Persistenz: Nach Abschluss der Transaktion werden alle Aktualisierungen der Datenbank durch die Transaktion in der Datenbank gespeichert und können nicht zurückgesetzt werden

2.InnoDB ist die Standardspeicher-Engine von MySQL

Die Standardisolationsstufe ist RR, und unter der Isolationsstufe von RR liegt sie bei eins Schritt weiter: Durch Multiversions-Parallelitätskontrolle ( MVCC) wird das Problem des nicht wiederholbaren Lesens gelöst und eine Lückensperre (dh Parallelitätskontrolle) hinzugefügt, um das Phantom-Leseproblem zu lösen. Daher erreicht die RR-Isolationsstufe von InnoDB tatsächlich den Effekt der Serialisierungsstufe und behält gleichzeitig eine bessere Parallelitätsleistung bei. MySQL-Datenbank bietet uns vier Isolationsstufen:

a,

(Serialisierung): kann das Auftreten von Dirty Reads, nicht wiederholbaren Lesevorgängen und Phantom Reads vermeiden;

b,

(wiederholbarer Lesevorgang): kann das Auftreten von Dirty Reads und nicht wiederholbaren Lesevorgängen vermeiden;

c, Serializable (Read Committed): kann das Auftreten von Dirty Reads vermeiden;

d, Repeatable read (unverbindlich lesen): die niedrigste Stufe, keine Garantie in jeder Situation;

von a----d Isolationsstufe von hoch nach niedrig, je höher die Stufe , Je geringer die AusführungseffizienzRead committed

3. InnoDB unterstützt Sperren auf ZeilenebeneRead uncommitted.

Sperren auf Zeilenebene können die Parallelität weitgehend unterstützen. Sperren auf Zeilenebene werden von der Speicher-Engine-Ebene implementiert.

Sperre: Die Hauptfunktion der Sperre besteht darin, den gleichzeitigen Zugriff auf gemeinsam genutzte Ressourcen zu verwalten und eine Transaktionsisolation zu erreichen Typ: gemeinsam genutzte Sperre (Lesesperre), exklusive Sperre (Schreibsperre) >

MySQL-Sperrstärke: Sperren auf Tabellenebene (geringer Overhead, geringe Parallelität), normalerweise auf Serverebene implementiert

Sperren auf Zeilenebene (hoher Overhead, hohe Parallelität), nur auf der Ebene der Speicher-Engine implementiert

4. InnoDB ist auf maximale Leistung für die Verarbeitung großer Datenmengen ausgelegt

.

Seine CPU-Effizienz kann von keiner festplattenbasierten relationalen Datenbank-Engine erreicht werden

5. Die InnoDB-Speicher-Engine ist vollständig in den MySQL-Server integriert

Die Die InnoDB-Speicher-Engine unterhält einen eigenen Pufferpool zum Zwischenspeichern von Daten und Indizes im Hauptspeicher. InnoDB platziert seine Tabellen und Indizes in einem logischen Tabellenbereich, der mehrere Dateien (oder Rohdatenträgerdateien) enthalten kann.

6, InnoDB unterstützt vollständige Fremdschlüssel. Sexuelle Zurückhaltung

Beim Speichern von Daten in Tabellen wird jede Tabelle in der Reihenfolge des Primärschlüssels gespeichert, wenn der Primärschlüssel beim Definieren der Tabelle nicht angegeben wird. InnoDB generiert für jede Zeile eine 6-Byte-ROWID und verwendet diese als Primärschlüssel

7. InnoDB wird in vielen großen Datenbankseiten verwendet, die eine hohe Leistung erfordern

8. InnoDB speichert nicht die Anzahl der Zeilen in der Tabelle (Beispiel: Bei der Auswahl von count(*) aus der Tabelle muss InnoDB die gesamte Tabelle scannen, um zu berechnen, wie viele Zeilen vorhanden sind). Die gesamte Tabelle, InnoDB, ist eine Zeile. Das Löschen einer Zeile ist sehr langsam.

InnoDB erstellt kein Verzeichnis. Bei Verwendung von InnoDB erstellt MySQL eine 10 MB große automatisch erweiterte Datendatei mit dem Namen ibdata1 und zwei mit dem Namen ib_logfile0 Datenverzeichnis. und 5 MB Protokolldateien von ib_logfile1

2. Die zugrunde liegende Implementierung der InnoDB-Engine

InnoDB verfügt über zwei Speicherdateien und die Suffixnamen sind .frm und .idb. Unter diesen ist .frm die Definitionsdatei der Tabelle und .idb die Datendatei der Tabelle.

1. Die InnoDB-Engine verwendet die B+Tree-Struktur als Indexstruktur

B-Tree (ausgeglichener Mehrpfad-Suchbaum): ein ausgewogener Suchbaum, der für externe Speichergeräte wie z Festplatten

Wenn das System Daten von der Festplatte in den Speicher liest, werden die Daten, die sich im selben Festplattenblock befinden, sofort und nicht bei Bedarf ausgelesen.

Die InnoDB-Speicher-Engine verwendet Seiten als Datenleseeinheiten. Seiten sind die kleinste Einheit der Festplattenverwaltung.

Der Speicherplatz eines Festplattenblocks im System beträgt oft nicht so groß, daher verwendet InnoDB jedes Mal, wenn es Speicherplatz beantragt, mehrere aufeinanderfolgende Festplattenblöcke mit Adressen, um die Seitengröße von 16 KB zu erreichen.

InnoDB verwendet Seiten als Grundeinheit beim Einlesen von Daten auf die Festplatte. Wenn beim Abfragen von Daten jedes Datenelement auf einer Seite dabei helfen kann, den Speicherort des Datensatzes zu lokalisieren, wird dies reduziert Festplatten-E/As verbessern die Abfrageeffizienz.

Die Daten in der B-Tree-Struktur ermöglichen es dem System, effizient den Festplattenblock zu finden, in dem sich die Daten befinden.

Jeder Knoten im B-Tree kann eine große Menge an Schlüsselwortinformationen enthalten Verzweigungen abhängig von der tatsächlichen Situation.

Super detaillierte Erklärung der MySQL-Speicher-Engine-InnoDB

Jeder Knoten belegt einen Block Speicherplatz auf einem Knoten und drei Zeiger auf den Wurzelknoten Unterbaum. Die Zeiger. Gespeichert wird die Adresse des Plattenblocks, in dem sich der untergeordnete Knoten befindet.

Nehmen Sie den Wurzelknoten als Beispiel. Die Schlüsselwörter sind 17 und 35. Der Datenbereich des Teilbaums, auf den der P1-Zeiger zeigt, ist kleiner als 17. Der Datenbereich des Teilbaums, auf den der P2-Zeiger zeigt, ist 17 ----35. Der Datenbereich des P3-Zeigers ist 17----35. Der Datenbereich des gezeigten Teilbaums ist größer als 35;

a. Suchen Sie Festplattenblock 1 basierend auf dem Stammknoten und lesen Sie ihn in den Speicher. [Erster Festplatten-E/A-Vorgang]

b. Vergleichen Sie das Schlüsselwort 29 im Intervall (17,35) und finden Sie den Zeiger P2 von Festplattenblock 1; auf dem P2-Zeiger Festplattenblock 3, in den Speicher einlesen. [Zweiter Festplatten-E/A-Vorgang]

d. Vergleichen Sie das Schlüsselwort 29 im Intervall (26, 30) und finden Sie den Zeiger P2 von Festplattenblock 3;

e Zeiger Plattenblock 8, in den Speicher einlesen. [Festplatten-E/A-Vorgang zum dritten Mal]

f. Suchen Sie das Schlüsselwort 29 in der Schlüsselwortliste in Festplattenblock 8.

Die InnoDB-Speicher-Engine von MySQL ist als Root-Knoten konzipiert Daher sollte die Tiefe des Baums 3 nicht überschreiten, d Suchvorgänge sind erforderlich. Da es sich bei den Schlüsselwörtern im Speicher um eine geordnete Listenstruktur handelt, kann die binäre Suche zur Verbesserung der Effizienz verwendet werden. Drei Festplatten-E/A-Vorgänge sind der entscheidende Faktor, der die Effizienz der gesamten B-Tree-Suche beeinflusst.

B+Tree

B+Tree ist eine auf B-Tree basierende Optimierung, die sich besser für die Implementierung externer Speicherindexstrukturen in B-Tree eignet verfügt über Schlüssel und Daten, und der Speicherplatz jeder Seite ist begrenzt. Wenn die Daten groß sind, ist die Anzahl der Schlüssel, die in jedem Knoten (d. h. einer Seite) gespeichert werden können, sehr gering. Wenn die Menge der gespeicherten Daten groß ist, wird auch die Tiefe des B-Baums größer, was die Anzahl der Festplatten-E/As während der Abfrage erhöht und somit die Abfrageeffizienz beeinträchtigt.

In B+Tree werden alle Datensatzknoten in der Reihenfolge ihres Schlüsselwerts auf Blattknoten derselben Ebene gespeichert. Nur Schlüsselwertinformationen werden auf Nicht-Blattknoten gespeichert, was die Größe jedes einzelnen Knotens erheblich erhöhen kann Die Anzahl der gespeicherten Schlüsselwerte verringert die Höhe von B+Tree.

Normalerweise gibt es zwei Kopfzeiger auf B+Tree, einer zeigt auf den Wurzelknoten und der andere zeigt auf die minimalen Schlüsselblattknoten, und zwischen allen Blattknoten (dh Datenknoten) besteht eine Kettenringstruktur.

Daher können für B+Tree zwei Suchvorgänge ausgeführt werden: einer ist die Bereichssuche und die Paging-Suche nach dem Primärschlüssel und der andere ist eine Zufallssuche ausgehend vom Wurzelknoten.

B+Tree in InnoDBSuper detaillierte Erklärung der MySQL-Speicher-Engine-InnoDB

InnoDB ist ein nach ID indizierter Datenspeicher

Es gibt zwei Datenspeicherdateien, die die InnoDB-Engine verwenden, eine ist eine Definitionsdatei und die andere sind Datendateien.

InnoDB erstellt über die B+Tree-Struktur einen Index für die ID und speichert den Datensatz dann im Blattknoten

Super detaillierte Erklärung der MySQL-Speicher-Engine-InnoDBWenn das indizierte Feld nicht die Primärschlüssel-ID ist, erstellen Sie einen Index für das Feld, speichern Sie dann den Primärschlüssel des Datensatzes im Blattknoten und suchen Sie dann den entsprechenden Datensatz über den Primärschlüsselindex.

Für weitere verwandte Fragen besuchen Sie bitte die chinesische PHP-Website: PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSuper detaillierte Erklärung der MySQL-Speicher-Engine-InnoDB. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen