InnoDB ist eine der Datenbank-Engines von MySQL und einer der Standards für Binärversionen von MySQL AB GPL-Autorisierung und das andere ist proprietäre Softwarelizenzierung. InnoDB ist die bevorzugte Engine für Transaktionsdatenbanken und unterstützt Transaktionssicherheitstabellen (ACID). InnoDB unterstützt Sperren auf Zeilenebene, die die Parallelität weitgehend unterstützen können. Sperren auf Zeilenebene werden von der Speicher-Engine-Ebene implementiert.
Die Betriebsumgebung dieses Tutorials: Windows7-System, MySQL8-Version, Dell G3-Computer.
Wenn Sie die von Ihrer Datenbank standardmäßig verwendete Speicher-Engine sehen möchten, können Sie den Befehl SHOW VARIABLES LIKE 'storage_engine';
#🎜🎜 verwenden # 1. InnoDB-Speicher-Engine
InnoDB ist eine der Datenbank-Engines von MySQL und einer der Standards für Binärversionen von MySQL MySQL AB. InnoDB wurde von Innobase Oy entwickelt und im Mai 2006 von Oracle übernommen. Im Vergleich zu herkömmlichem ISAM und MyISAM besteht das größte Merkmal von InnoDB darin, dass es ACID-kompatible Transaktionsfunktionen (Transaction) unterstützt, ähnlich wie PostgreSQL. InnoDB verwendet ein zweigleisiges Lizenzierungssystem, eines ist die GPL-Lizenzierung und das andere ist die Lizenzierung proprietärer Software. 1. InnoDB ist die bevorzugte Engine für Transaktionsdatenbanken und unterstützt Transaktionssicherheitstabellen (ACID)ACID-Attribute von Transaktionen: #🎜🎜 #Das heißt Atomizität, Konsistenz, Isolation und Haltbarkeit
Wenn in der Mitte der Ausführung der Transaktion ein Fehler auftritt, wird die Datenbank auf den Punkt zurückgesetzt wo die Transaktion begann.Rückgängig-Mechanismus. 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: Vor und nach dem Start der Transaktion wird die Vollständigkeit der Datenbankintegrität nicht beeinträchtigt. (Beispiel: Wenn A Geld an B überweist, ist es unmöglich, dass A das Geld abgezogen hat, B es aber nicht erhalten hat) Nur eine Transaktion darf dieselben Daten anfordern, und verschiedene Transaktionen stören sich nicht gegenseitig. 🎜🎜#
Es wird mehrere Probleme geben, wenn es um Sex geht:
Ja Bezieht sich auf das Lesen von Daten in einer anderen nicht festgeschriebenen Transaktion während einer Transaktion (wenn eine Transaktion bestimmte Daten mehrmals ändert und die mehrfachen Änderungen in dieser Transaktion noch nicht festgeschrieben wurden, ist eine gleichzeitige A-Transaktion für den Zugriff erforderlich Die Daten führen dazu, dass die von den beiden Transaktionen erhaltenen Daten inkonsistent sind. (Lesen Sie nicht festgeschriebene schmutzige Daten aus einer anderen Transaktion.) # 🎜🎜# ii. Nicht wiederholbares Lesen
: Für bestimmte Daten in der Datenbank geben mehrere Abfragen innerhalb eines Transaktionsbereichs unterschiedliche Datenwerte zurück. Dies liegt daran, dass sie während der Abfrage geändert und übermittelt wurden Intervall; (die von der vorherigen Transaktion übermittelten Daten wurden gelesen und dasselbe Datenelement wurde abgefragt)
{ , Transaktion T2 fügt eine weitere Zeile mit Datenelementen in diese Tabelle ein, und der Wert dieses Datenelements ist immer noch „1“ und wird an die Datenbank übermittelt. Wenn der Benutzer, der Transaktion T1 ausführt, die neu geänderten Daten anzeigt, werden Sie stellen Sie fest, dass es noch eine Zeile gibt, die nicht geändert wurde. Tatsächlich wurde diese Zeile aus Transaktion T2 hinzugefügt, als ob Sie halluzinieren würden lesen Sie die von der vorherigen Transaktion übermittelten Daten, für a Batch-Daten insgesamt) d. Spezifisch: Nach Abschluss der Transaktion werden alle Aktualisierungen der Datenbank in der Datenbank gespeichert. MySQL-Datenbank bietet uns vier Isolationsstufen: a, Serialisierbar (serialisierbar): kann das Auftreten von schmutzigen Lesevorgängen, nicht wiederholbaren Lesevorgängen und Phantom-Lesevorgängen vermeiden; b, wiederholbarer Lesevorgang (wiederholbarer Lesevorgang); : kann das Auftreten von Dirty Reads und nicht wiederholbaren Lesevorgängen vermeiden; c, Read commited (read commited): kann das Auftreten von Dirty Reads vermeiden (read uncommitted): die niedrigste Ebene unter allen Umstände Es gibt keine Garantie; Von einer Isolationsstufe von hoch bis niedrig gilt: Je höher die Stufe, desto geringer ist die Ausführungseffizienz. 3. Sperren auf Zeilenebene können die Parallelität weitestgehend unterstützen, und Sperren auf Zeilenebene werden von der Speicher-Engine-Schicht implementiert. : Die Hauptfunktion der Sperre besteht darin, den gleichzeitigen Zugriff auf gemeinsam genutzte Ressourcen zu verwalten, um eine Transaktionsisolation zu erreichen Sperren auf Zeilenebene (großer Overhead, hohe Parallelität) werden nur auf der Ebene der Speicher-Engine implementiert 4. InnoDB ist auf maximale Leistung bei der Verarbeitung großer Datenmengen ausgelegt. Seine CPU-Effizienz kann von keiner festplattenbasierten relationalen Datenbank-Engine erreicht werden. Die InnoDB-Speicher-Engine ist vollständig in den MySQL-Server integriert Pool. InnoDB legt seine Tabellen und Indizes in einem logischen Tabellenbereich ab, und der Tabellenbereich kann mehrere Dateien (oder Originalfestplattendateien) enthalten. 6 InnoDB unterstützt beim Speichern von Daten in der Tabelle jeder Tabelle wird in der Reihenfolge des Primärschlüssels gespeichert. Wenn der Primärschlüssel beim Definieren der Tabelle nicht angegeben wird, wird er in der Reihenfolge des Primärschlüssels gespeichert. InnoDB generiert eine 6-Byte-ROWID für jede Zeile und verwendet sie als Primärschlüssel. 7. InnoDB wird auf vielen großen Datenbankseiten verwendet, die eine hohe Leistung erfordern. 8. InnoDB speichert die Anzahl der Tabellenzeilen nicht ( Beispiel: Wenn Sie count(*) aus der Tabelle auswählen, muss InnoDB die gesamte Tabelle scannen, um zu berechnen, wie viele Zeilen vorhanden sind. Beim Löschen der gesamten Tabelle löscht InnoDB die Zeilen einzeln, was sehr langsam ist erstellt kein Verzeichnis. Bei Verwendung von InnoDB erstellt MySQL eine automatisch erweiterte 10-MB-Datendatei mit dem Namen ibdata1 im MySQL-Datenverzeichnis und zwei 5-MB-Protokolldateien mit den Namen ib_logfile0 und ib_logfile1 InnoDB verfügt über zwei Speicherdateien, die Suffixe sind .frm und .idb; .frm ist die Definitionsdatei der Tabelle und .idb ist die Datendatei der Tabelle. 1 Die InnoDB-Engine verwendet die B+Tree-Struktur als Indexstruktur B-Tree (Balanced Multi-Path Search Tree): Ein ausgewogener Suchbaum, der für externe Speichergeräte wie Festplatten entwickelt wurde auf Festplattenblock-Bits Dateneinheiten, die sich im selben Festplattenblock befinden, werden auf einmal und nicht bei Bedarf ausgelesen. Die InnoDB-Speicher-Engine verwendet Seiten als Datenleseeinheiten. Die Standardseitengröße beträgt 16 KB. InnoDB verwendet Seiten als Grundeinheit beim Einlesen von Daten auf die Festplatte, wenn jedes Datenelement auf einer Seite dabei helfen kann, den Speicherort zu ermitteln Datensätze, wodurch die Anzahl der Festplatten-E/A reduziert und die Abfrageeffizienz verbessert wird. Die Daten in der B-Tree-Struktur ermöglichen es dem System, effizient den Plattenblock zu finden, in dem sich die Daten befinden
Jeder Knoten belegt einen Festplattenblock. Es gibt zwei aufsteigende Sortierschlüssel auf einem Knoten und drei Zeiger auf den Wurzelknoten des Teilbaums Festplattenblock, in dem sich der untergeordnete Knoten befindet. Der Datenbereich des Teilbaums, auf den der Zeiger zeigt, ist 17----35, und der Datenbereich des Teilbaums, auf den der P3-Zeiger zeigt, ist größer als 35 ; #🎜 🎜# Simulierte SucheDer Prozess von Schlüsselwort 29: b Vergleichen Sie das Schlüsselwort 29 im Intervall (17,35) und suchen Sie den Zeiger P2 von Festplattenblock 1; #🎜 🎜# c Suchen Sie den Plattenblock 3 entsprechend dem P2-Zeiger und lesen Sie ihn in den Speicher. [Festplatten-E/A-Vorgang zum zweiten Mal] d Vergleichen Sie Schlüsselwort 29 im Intervall (26,30), finden Sie den Zeiger P2 von Festplattenblock 3; 🎜 🎜# f. Suchen Sie das Schlüsselwort 29 in der Schlüsselwortliste in Festplattenblock 8. #🎜🎜 ##🎜🎜 #Die InnoDB-Speicher-Engine von MySQL ist so konzipiert, dass sich der Stammknoten im Speicher befindet, sodass eine Baumtiefe von nicht mehr als 3 angestrebt wird, d. h. die E/A muss das Dreifache nicht überschreiten # Bei der Analyse der obigen Ergebnisse haben wir festgestellt, dass drei Festplatten-E/A-Vorgänge und drei Speichersuchvorgänge erforderlich sind. 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 in B- Eine auf Tree basierende Optimierung eignet sich besser für die Implementierung einer externen Speicherindexstruktur. Jeder Knoten im B-Tree verfügt über Schlüssel und Daten, und der Speicherplatz jeder Seite ist begrenzt eine kleine Anzahl von Schlüsseln, die in jedem Knoten gespeichert werden können (dh eine Seite). Wenn die gespeicherte Datenmenge 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 sich somit auf die Abfrageeffizienz auswirkt. In B+Tree werden alle Datensatzknoten auf Blattknoten derselben Ebene in der Reihenfolge ihres Schlüsselwerts gespeichert, während nur Schlüsselwerte auf Nichtknoten gespeichert werden -Blattknoten. Dies kann die Anzahl der in jedem Knoten gespeicherten Schlüsselwerte erheblich erhöhen und die Höhe von B+Tree verringern basierend auf B-Tree Zwei Änderungen: (1) Die Daten werden in den Blattknoten gespeichert. (2) Datenknoten werden punktiert durch Zeiger. Da die Nicht-Blattknoten von B+Tree nur Schlüsselwertinformationen speichern, ist die Struktur nach der Umwandlung in B+Tree unter der Annahme, dass jeder Plattenblock 4 Schlüsselwerte und Zeigerinformationen speichern kann, wie folgt: Normalerweise gibt es in B+Tree zwei Kopfzeiger, einer zeigt auf den Wurzelknoten und der andere zeigt auf den Blattknoten mit dem kleinsten Schlüsselwort, und zwischen allen Blattknoten (d. h. Datenknoten) besteht eine Kettenringstruktur ). Daher können für B + Tree zwei Suchvorgänge ausgeführt werden: einer ist eine Bereichssuche und eine Paging-Suche nach dem Primärschlüssel und der andere ist eine Zufallssuche ausgehend vom Wurzelknoten. B+Tree in InnoDB InnoDB ist ein nach ID indizierter Datenspeicher Es gibt zwei Datenspeicherdateien, die die InnoDB-Engine verwenden, eine ist eine Definitionsdatei und die andere ist eine Datendatei . InnoDB erstellt über die B+Tree-Struktur einen Index für die ID und speichert den Datensatz dann im Blattknoten.
Wenn das indizierte Feld nicht die Primärschlüssel-ID ist, erstellen Sie einen Index für das Feld und dann im Blattknoten. Was im Knoten gespeichert ist, ist der Primärschlüssel des Datensatzes, und dann wird der entsprechende Datensatz über den Primärschlüsselindex gefunden [Verwandte Empfehlungen: MySQL-Video-Tutorial]
2 und InnoDB sind die Standardspeicher-Engine von MySQL. RR und geht unter der Isolationsstufe von RR noch einen Schritt weiter, indem es die Multiversion-Parallelitätskontrolle (MVCC) verwendet, um das nicht wiederholbare Leseproblem zu lösen, und Lückensperren (d. h. Parallelitätskontrolle) hinzufügt, um das Phantom zu lösen Leseproblem. Daher erreicht die RR-Isolationsstufe von InnoDB tatsächlich den Effekt der Serialisierungsstufe und behält gleichzeitig eine bessere Parallelitätsleistung bei.
Das obige ist der detaillierte Inhalt vonWas ist MySQL Innodb?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!