Erläuterung der Konfiguration und Verwendung der MySQL-Speicher-Engine InnoDB

Erläuterung der Konfiguration und Verwendung der MySQL-Speicher-Engine InnoDB

MyISAM und InnoDB sind die gängigsten Speicher-Engines für MySQL. Im vorherigen Artikel haben wir über den Unterschied zwischen InnoDB und MyISAM gesprochen. Da MyISAM keine Transaktionen unterstützt, ist InnoDB die beste Wahl, wenn wir eine robuste transaktionale Speicher-Engine benötigen.

Innodb erreicht eine hohe Parallelität durch Multi-Version Concurrency Control (MVCC) und implementiert vier SQL-Standardisolationsebenen, wobei die Standardebene die REPEATABLE -Ebene ist. Gleichzeitig wird eine Strategie namens next-key locking verwendet, um phantom zu verhindern. Darüber hinaus bietet die InnoDB-Speicher-Engine auch Hochleistungs- und Hochverfügbarkeitsfunktionen wie insert buffer , double write , adaptiver adaptive hash index Index und read ahead .

So legen Sie InnoDB als Standard-Engine fest:

  • 1. Überprüfen Sie den Status der MySQL-Speicher-Engine: mysql>show engines. InnoDB | JA, was bedeutet, dass dieser MySQL-Datenbankserver die InnoDB-Engine unterstützt.
  • 2. InnoDB als Standard-Engine festlegen: Fügen Sie default-storage-engine=INNODB unter [mysqld] in der Konfigurationsdatei my.ini hinzu
  • 3. Starten Sie den MySQL-Server neu
  • 4. Melden Sie sich bei der MySQL-Datenbank an: mysql>show engines. Wenn InnoDB | DEFAULT angezeigt wird, bedeutet dies, dass InnoDB erfolgreich als Standard-Engine festgelegt wurde.

Allgemeine Konfigurationsparameter von InnoDB:

#InnoDB speichert das Datenwörterbuch und den internen Datenstruktur-Pufferpool. 16 MB sind groß genug.
innodb_additional_mem_pool_size = 16 M
#InnoDB wird zum Zwischenspeichern von Daten, Indizes, Sperren, Einfügepuffern, Datenwörterbüchern usw. verwendet. #Wenn es sich um einen dedizierten DB-Server handelt und die InnoDB-Engine das Hauptszenario ist, können Sie sie normalerweise auf 50 % des physischen Speichers einstellen
#Wenn es sich um einen nicht dedizierten DB-Server handelt, können Sie zunächst versuchen, ihn auf 1/4 des Speichers einzustellen und ihn bei Problemen anzupassen. #Der Standardwert ist 8 MB, was sehr schlecht ist. Dies ist auch der Grund, warum viele Leute denken, dass InnoDB nicht so gut ist wie MyISAM. innodb_buffer_pool_size = 4G
#InnoDB-Initialisierungsgröße für gemeinsam genutzte Tablespaces. Der Standardwert beträgt 10 MB, was auch sehr knifflig ist. Ändern Sie ihn auf 1 GB und erweitern Sie innodb_data_file_path = ibdata1:1G:autoextend automatisch.
#Wenn Sie diese Option nicht verstehen, wird empfohlen, sie auf 1 zu setzen. Dies kann die Datenzuverlässigkeit besser schützen und einen gewissen Einfluss auf die Leistung haben, ist jedoch steuerbar innodb_flush_log_at_trx_commit = 1
#InnoDB-Logpuffer, normalerweise ist eine Einstellung von 64 MB ausreichend innodb_log_buffer_size = 64M
#InnoDB Redo-Log-Größe, normalerweise reichen 256 MB innodb_log_file_size = 256M
#InnoDB Redo-Logdateigruppe, normalerweise reicht es aus, sie auf 2 zu setzen innodb_log_files_in_group = 2
#Aktivieren Sie den unabhängigen Tablespace-Modus von InnoDB zur einfachen Verwaltung innodb_file_per_table = 1
# Aktivieren Sie die Statusdatei von InnoDB, damit Administratoren sie anzeigen, überwachen usw. können. innodb_status_file = 1
#Setzen Sie die Transaktionsisolationsstufe auf READ-COMMITTED, um die Transaktionseffizienz zu verbessern. Normalerweise werden die Anforderungen an die Transaktionskonsistenz erfüllt. transaction_isolation = READ-COMMITTED 
Beachtenswert sind auch die weiteren Konfigurationsmöglichkeiten:
#Legen Sie die maximale Anzahl gleichzeitiger Verbindungen fest. Wenn das Front-End-Programm PHP ist, können Sie es entsprechend erhöhen, aber nicht zu sehr. #Wenn das Front-End-Programm einen Verbindungspool verwendet, können Sie ihn entsprechend nach unten anpassen, um zu viele Verbindungen zu vermeiden max_connections = 60
#Die maximale Anzahl von Verbindungsfehlern kann entsprechend erhöht werden, um zu verhindern, dass der Front-End-Host nach häufigen Verbindungsfehlern von MySQL abgelehnt wird max_connect_errors = 100000
#Legen Sie den Schwellenwert für langsame Abfragen fest. Es wird empfohlen, den Mindestwert auf 1 Sekunde festzulegen long_query_time = 1
#Legen Sie den Maximalwert der temporären Tabelle fest. Dieser wird für jede Verbindung zugewiesen. Es ist nicht ratsam, ihn zu groß einzustellen. max_heap_table_size und tmp_table_size sollten auf die gleiche Größe eingestellt werden max_heap_table_size = 96M
temporäre Tabellengröße = 96 M
#Jede Verbindung weist einige Sortier-, Verbindungs- und andere Puffer zu. Im Allgemeinen reicht eine Einstellung auf 2 MB aus. sort_buffer_size = 2M
Join-Puffergröße = 2 M
Lesepuffergröße = 2 M
read_rnd_buffer_size = 2M
#Es wird empfohlen, den Abfragecache auszuschalten, da dies die Leistung beeinträchtigen kann. query_cache_size = 0
#Wenn die Hauptdatenbank InnoDB ist, kann die key_buffer_size für MyISAM kleiner eingestellt werden. 8 MB reichen aus. #Wenn die Hauptdatenbank MyISAM ist, kann sie größer eingestellt werden, aber nicht mehr als 4 G
#Hier wird dringend empfohlen, die MyISAM-Engine nicht zu verwenden. Standardmäßig wird die InnoDB-Engine key_buffer_size = 8M verwendet.
#Legen Sie den Schwellenwert für das Verbindungstimeout fest. Wenn das Front-End-Programm eine kurze Verbindung verwendet, wird empfohlen, diese beiden Werte zu kürzen. #Wenn das Front-End-Programm eine lange Verbindung verwendet, können Sie diese beiden Optionen direkt auskommentieren und die Standardkonfiguration (8 Stunden) verwenden.
interaktives_Timeout = 120
Wartezeitüberschreitung = 120

Einige Vorschläge zum Entwurf der Datentabelle der InnoDB-Engine:

  • 1. Alle InnoDB-Datentabellen erstellen einen automatisch inkrementierten numerischen Primärschlüssel, der für das Geschäft irrelevant ist, was zur Sicherstellung der Leistung sehr hilfreich ist.
  • 2. Vermeiden Sie die Verwendung von Text/Blob. Wenn Sie es wirklich brauchen, teilen Sie es so weit wie möglich in eine unabhängige Tabelle auf.
  • 3. Es wird empfohlen, den Typ TIMESTAMP zum Speichern von Zeitstempeln zu verwenden.
  • 4. Es wird empfohlen, IPV4-Adressen mit dem Typ INT UNSIGNED zu speichern.
  • 5. Für binäre Logik wie Geschlecht wird empfohlen, TINYINT-Speicher anstelle von CHAR(1) zu verwenden.
  • 6. Beim Speichern längerer Textinhalte wird die Verwendung des JSON/BSON-Formats empfohlen.

InnoDB-Sperrtypen

Die InnoDB-Speicher-Engine implementiert die folgenden zwei Standard-Sperren auf Zeilenebene

  • Gemeinsames Schloss (S Lock), das einer Transaktion das Lesen einer Datenzeile ermöglicht
  • Exklusive Sperre (X Lock), die es einer Transaktion ermöglicht, eine Datenzeile zu löschen oder zu aktualisieren

Kompatibilität von gemeinsam genutzten Sperren und exklusiven Sperren

Beachten:

(1) Sowohl S- als auch X-Sperren sind Zeilensperren. Mit Kompatibilität ist die Kompatibilität von Sperren für denselben Datensatz (dieselbe Zeile) gemeint.

(2) Die Transaktion T1 hat bereits eine gemeinsame Sperre für die Zeile R erhalten. Eine andere Transaktion T2 kann sofort eine gemeinsame Sperre für die Zeile R erhalten. Diese Situation wird als Sperrenkompatibilität bezeichnet. Wenn die Transaktion T3 eine exklusive Sperre für Zeile R erhalten möchte, muss sie warten, bis die Transaktionen T1 und T2 die gemeinsame Sperre für Zeile R freigeben. In dieser Situation kommt es zu einer Sperreninkompatibilität.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Speicherverwaltung der MySQL InnoDB-Speicher-Engine
  • Kenntnisse über die MySQL Memory-Speicher-Engine
  • Detaillierte Erklärung der Speicher-Engine in MySQL
  • Beschreiben Sie kurz die MySQL InnoDB-Speicher-Engine
  • Zusammenfassung des Wissens über MySql-Speicher-Engines und Indizes
  • Implementierungsprinzip der MySQL MyISAM-Standardspeicher-Engine
  • MySQL-Lernzusammenfassung: Ein vorläufiges Verständnis des Architekturdesigns der InnoDB-Speicher-Engine
  • Eine kurze Erläuterung der vier häufig verwendeten Speicher-Engines in MySQL
  • MySQL Advanced Learning Notes (Teil 3): Einführung in die logische Architektur von MySQL, detaillierte Erläuterung der MySQL-Speicher-Engine
  • Zusammenfassung der Unterschiede zwischen den MySQL-Speicher-Engines MyISAM und InnoDB
  • Vor- und Nachteile gängiger MySQL-Speicher-Engines

<<:  React implementiert dynamische Popup-Fensterkomponente

>>:  Implementierung eines einfachen Rechners auf Basis von JavaScript

Artikel empfehlen

MySQL-Variablenprinzipien und Anwendungsbeispiele

In der MySQL-Dokumentation können MySQL-Variablen...

Grundlegendes zum MySQL-Abfrageoptimierungsprozess

Inhaltsverzeichnis Parser und Präprozessoren Abfr...

So verwenden Sie die HTML 5 Drag & Drop-API in Vue

Die Drag & Drop-API fügt ziehbare Elemente zu...

So ändern Sie die Kodierung der MySQL-Datenbank in utf8mb4

Die utf8mb4-Kodierung ist eine Obermenge der utf8...

Einführung in Docker-Container

1. Übersicht 1.1 Grundlegende Konzepte: Docker is...

Verwenden Sie CSS, um zwischen dem Dunkelmodus und dem Hellmodus zu wechseln

In der fünften Ausgabe von Web Skills wird ausdrü...

Detaillierte Analyse jeder Phase der HTTP-Anforderungsverarbeitung von Nginx

Beim Schreiben des HTTP-Moduls von nginx müssen d...

Befehl zum Entfernen (Löschen) eines symbolischen Links in Linux

Möglicherweise müssen Sie in Linux manchmal symbo...

Objektorientierte JavaScript-Implementierung eines Lupengehäuses

In diesem Artikel wird der spezifische Code der o...