Detaillierte Erklärung zur Verwendung von MySQL Online DDL

Detaillierte Erklärung zur Verwendung von MySQL Online DDL

Text

Online-DDL wird nur in MySQL 5.6 unterstützt. In den Versionen 5.5 und früher führt die Verwendung von Befehlen wie „alter table“/„create index“ zum Ändern der Tabellenstruktur zum Sperren der Tabelle, was in einer Produktionsumgebung offensichtlich nicht akzeptabel ist.

In MySQL 5.7 wurde Online DDL hinsichtlich Leistung und Stabilität kontinuierlich optimiert. Es bietet erhebliche Leistungsvorteile, hat nur geringe Auswirkungen auf die Geschäftslast und weist kontrollierbare Ausfallzeiten auf. Im Vergleich zu pt-osc/gh-ost erfordert es keine Installation von Abhängigkeitspaketen von Drittanbietern. Es unterstützt auch Online DDL des Inplace-Algorithmus. Da keine Tabellen kopiert werden müssen, ist auch der erforderliche Speicherplatz geringer.

Schauen wir uns zunächst eine gängige DDL-Anweisung an:

ALTER TABLE tbl_name ADD PRIMARY KEY (Spalte), ALGORITHM=INPLACE, LOCK=NONE;

Unter diesen beschreibt LOCK den Grad der Parallelität während des DDL-Vorgangs und ALGORITHM die Implementierungsmethode von DDL.

LOCK-Parameter

  1. LOCK=NONE: Gleichzeitige Abfragen und DML-Operationen zulassen
  2. LOCK=SHARED: erlaubt gleichzeitige Abfragen, blockiert aber DML-Operationen
  3. LOCK=DEFAULT: Erlaubt so viel Parallelität wie möglich (gleichzeitige Abfragen, DML oder beides), wie vom System bestimmt. Wenn die LOCK-Klausel weggelassen wird, ist dies gleichbedeutend mit der Angabe von LOCK=DEFAULT
  4. LOCK=EXCLUSIVE: Blockieren Sie gleichzeitige Abfragen und DML-Operationen.

ALGORITHMUS-Parameter

  1. ALGORITHM=COPY: Verwenden Sie die Kopiermethode, um die Tabelle zu ändern, ähnlich wie pt-osc/gh-ost;
  2. ALGORITHM=INPLACE: Es müssen nur die Daten der Engine-Ebene geändert werden, die Server-Ebene ist nicht beteiligt.

COPY TABLE-Prozess

  1. Erstellen Sie zunächst eine temporäre Tabelle mit der durch ALTAR TABLE geänderten Struktur.
  2. Importieren Sie die Daten der Originaltabelle in eine temporäre Tabelle (die Serverebene erstellt eine temporäre Tabelle und es wird eine IBD-Datei angezeigt).
  3. Löschen der ursprünglichen Tabelle
  4. Benennen Sie die temporäre Tabelle in den ursprünglichen Tabellennamen um

Um dabei die Datenkonsistenz zu wahren, wird die Tabelle während des Zwischenkopierens der Daten (Copy Table) gesperrt und ist schreibgeschützt. Wenn eine Schreibanforderung eingeht, kann der Dienst nicht bereitgestellt werden, was zu einer explosionsartigen Zunahme der Verbindungsanzahl führt.

IN-PLACE Prozess

  1. Erstellen Sie eine temporäre Datei und scannen Sie alle Datenseiten des ursprünglichen Primärschlüssels der Tabelle
  2. Generieren Sie einen B+-Baum unter Verwendung der ursprünglichen Tabellendatensätze auf der Datenseite und speichern Sie ihn in einer temporären Datei (erstellen Sie eine temporäre Datei im temporären Tablespace innodb_temp_data_file_path).
  3. Beim Generieren temporärer Dateien werden alle Vorgänge an der Originaltabelle in einer Protokolldatei (Rowlog) aufgezeichnet.
  4. Nachdem die temporäre Datei generiert wurde, wenden Sie die Vorgänge in der Protokolldatei auf die temporäre Datei an, um eine Tabelle zu erhalten, die hinsichtlich der Daten mit der Originaltabelle identisch ist.
  5. Datendateien (Protokolldateien zeichnen Vorgänge auf und geben sie wieder)
  6. Ersetzen Sie die ursprüngliche Tabellendatendatei durch eine temporäre Datei

Dabei erhält die ALTER-Anweisung beim Start zwar die MDL-Schreibsperre, diese degeneriert jedoch vor dem eigentlichen Kopieren der Daten in eine Lesesperre. Das heißt, während des zeitaufwändigsten Vorgangs des Kopierens der Daten in eine temporäre Datei kann die Originaltabelle mit DML bearbeitet werden. Sie wird nur während der letzten Umschaltphase zwischen der alten und der neuen Tabelle gesperrt. Dieser Umbenennungsprozess ist sehr schnell.

Gleichzeitige DML- und DDL-Vorgänge zulassen

  • Einen sekundären Index erstellen/hinzufügen
  • Umbenennen eines sekundären Indexes
  • Löschen eines sekundären Indexes
  • Ändern des Indextyps (USING {BTREE | HASH})
  • Hinzufügen eines Primärschlüssels (hohe Kosten)
  • Löschen Sie den Primärschlüssel und fügen Sie einen anderen hinzu (hoher Aufwand) (ALTER TABLE tbl_name DROP PRIMARY KEY, ADD PRIMARY KEY (Spalte), ALGORITHM=INPLACE, LOCK=NONE;)
  • Neue Kolonne (hoher Kostenaufwand)
  • Spalte löschen (hoher Aufwand)
  • Spalten umbenennen
  • Neuanordnung der Spalten (hoher Aufwand)
  • Ändern der Spaltenstandardwerte
  • Spaltenstandardwert entfernen
  • Ändern des automatischen Spalteninkrementwerts
  • Festlegen von Spaltenattributen auf null/nicht null (hoher Aufwand)
  • Ändern der Definition einer Aufzählungs- oder Sammlungsspalte
  • ROW_FORMAT ändern
  • Schlüsselblockgröße ändern

Obwohl Online-DDL für Vorgänge zulässig ist, die als teuer gekennzeichnet sind, stellen sie eine hohe Belastung für die E/A und CPU des Servers dar. Sie verursachen außerdem eine Replikationsblockierung, die eine weitere Form der Verzögerung der Slave-Replikation verursacht. Wenn die Tabelle groß ist, wird daher empfohlen, sie außerhalb der Spitzenzeiten auszuführen.

DDL-Operationen, die kein gleichzeitiges DML zulassen

  • Volltextindex hinzufügen
  • Hinzufügen eines räumlichen Indexes
  • Löschen eines Primärschlüssels
  • Ändern von Spaltendatentypen
  • Fügen Sie eine Auto-Increment-Spalte hinzu (fügen Sie eine neue Spalte hinzu -> ändern Sie sie in eine Auto-Increment-Spalte)
  • Tabellenzeichensatz ändern
  • Ändern Sie die Länge des Datentyps
    • Sonderfall: Wenn sich die Länge der varchar-Zeichen von 10 auf weniger als 255 ändert, wird die Tabelle bei Verwendung der Inplace-Methode nicht gesperrt; wenn sie sich jedoch von 255 auf 10 ändert, wird die Tabelle gesperrt;

Oben finden Sie den ausführlichen Inhalt der ausführlichen Erläuterung zur Verwendung von MySQL Online DDL. Weitere Informationen zur Verwendung von MySQL Online DDL finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • So fügen Sie in MySQL 8.0 schnell Spalten hinzu
  • So beheben Sie die durch MySQL DDL verursachte Synchronisierungsverzögerung
  • Detaillierte Erklärung der atomaren DDL-Syntax von MySQL 8.0
  • MySQL Online-DDL-Tool Gh-Ost-Prinzipanalyse
  • Verwendung von MySQL DDL-Anweisungen
  • Zusammenfassung gängiger MySQL-DDL-Operationen
  • Analyse der neuen Funktionen von MySQL 8.0 - Transaktionales Datenwörterbuch und Atomic DDL
  • Grundlegende Anweisungen der MySQL-Datendefinitionssprache DDL
  • MySQL 8.0 DDL-Atomaritätsfunktion und Implementierungsprinzip
  • Zusammenfassung der Verwendung von MySQL Online DDL gh-ost
  • Lösen Sie das Problem der blockierenden Positionierungs-DDL in MySQL 5.7
  • Neue Funktionen in MySQL 8.0: Unterstützung für atomare DDL-Anweisungen
  • MySQL weist eine Riddle-Sicherheitslücke auf, die zum Verlust von Benutzernamen und Passwörtern führen kann
  • Zusammenfassung der schnellen Spaltenaddition bei MySQL 8.0 Online DDL

<<:  Implementierungsprozess des Lupeneffekts im Javascript-Beispielprojekt

>>:  Erstellen Sie eine schöne, umklappbare Anmelde- und Registrierungsoberfläche auf HTML+CSS-Basis

Artikel empfehlen

Tutorial zur kostenlosen Konfiguration der MySQL 5.7.18-Installationsversion

Installations-Tutorial zur kostenlosen Installati...

DOCTYPE-Element ausführliche Erklärung vollständige Version

1. Übersicht In diesem Artikel wird das DOCTYPE-E...

Detaillierte Erläuterung der logischen Architektur von MySQL

1. Gesamtarchitekturdiagramm Im Vergleich zu ande...

MySQL-Reihe: Redo-Log, Undo-Log und Binlog – ausführliche Erklärung

Durchführung von Transaktionen Das Redo-Protokoll...

Ausführliches Tutorial zur Installation und Konfiguration von MySQL 8.0.20

In diesem Artikel finden Sie eine ausführliche An...

Detaillierte Erklärung der .bash_profile-Datei im Linux-System

Inhaltsverzeichnis 1. Umgebungsvariable $PATH: 2....

Eclipse konfiguriert Tomcat und Tomcat hat eine ungültige Port-Lösung

Inhaltsverzeichnis 1. Eclipse konfiguriert Tomcat...

HTML-Head-Tag-Metadaten zum Erreichen einer Aktualisierungsumleitung

Code kopieren Der Code lautet wie folgt: <html...

Detaillierte Erläuterung der Winkel-Zweiwegebindung

Inhaltsverzeichnis Bidirektionales Bindungsprinzi...

Verwenden Sie die vertikale Ausrichtung, um Eingabe und Bild auszurichten

Wenn Sie Eingabe und Bild in dieselbe Zeile setzen...

img usemap Attribut China Karte Link

HTML-img-Tag: definiert ein Bild, das in eine Webs...