Sperrt Mysql ALTER TABLE die Tabelle beim Hinzufügen von Feldern?

Sperrt Mysql ALTER TABLE die Tabelle beim Hinzufügen von Feldern?

Vor MySQL 5.6

Schritte zum Aktualisieren

  • Fügen Sie der ursprünglichen Tabelle eine Schreibsperre hinzu
  • Definieren Sie eine leere temporäre Tabelle entsprechend der Definition der Originaltabelle und der Ausführungsanweisung neu.
  • Fügen Sie der temporären Tabelle einen Index hinzu (sofern vorhanden).
  • Kopieren Sie dann die Daten der Originaltabelle nacheinander in die temporäre Tabelle.
  • Nachdem alle Datensätze der Originaltabelle in die temporäre Tabelle kopiert wurden, wird die Originaltabelle gelöscht. Benennen Sie dann die temporäre Tabelle in den ursprünglichen Tabellennamen um.
  • In diesem Fall sperrt der gesamte DDL-Prozess die Tabelle.

Nach MySQL 5.6

Schritte zum Aktualisieren

  • Fügen Sie der ursprünglichen Tabelle eine Schreibsperre hinzu
  • Definieren Sie eine leere temporäre Tabelle entsprechend der Definition der Originaltabelle und der Ausführungsanweisung neu. Und beantragen Sie Rowlog-Speicherplatz.
  • Kopieren Sie die ursprünglichen Tabellendaten in die temporäre Tabelle. Zu diesem Zeitpunkt werden alle Änderungen an den Tabellendaten (Hinzufügungen, Löschungen und Änderungen) im Zeilenprotokoll gespeichert. Zu diesem Zeitpunkt kann der Kunde den Tisch bedienen.
  • Nachdem alle ursprünglichen Tabellendaten kopiert wurden, werden alle Änderungen im Zeilenprotokoll mit der temporären Tabelle synchronisiert. Der Client kann während dieses Vorgangs nicht ausgeführt werden.
  • Wenn alle Datensätze der Originaltabelle in die temporäre Tabelle kopiert wurden, werden alle Hinzufügungs-, Lösch- und Änderungsvorgänge des Clients während des Kopiervorgangs mit der temporären Tabelle synchronisiert. Benennen Sie dann die temporäre Tabelle in den ursprünglichen Tabellennamen um.

Zusammenfassen

Durch ALTER TABLE wird durch das Hinzufügen einer Spalte diese gesperrt. Ab MySQL Version 5.6 wurde jedoch die ONLINE-DDL-Funktion hinzugefügt, die die Zeit, in der die Tabelle nicht verfügbar ist, erheblich verkürzen kann.

Beachten

Beim Hinzufügen von Feldern zu ALTER TABLE. Wenn die Datenmenge in der Tabelle sehr groß ist. Legen Sie nicht den Standardwert fest.
Aktuell existieren beispielsweise Tabellen mit über 20 Millionen Datenmengen. Wenn Sie ein Feld hinzufügen, fügen Sie einen Standardwert hinzu. Nach der Ausführung des Online-DDL aktualisiert MySQL den Standardwert der gesamten Tabellendaten, d. h.

UPDATE `table_name` SET new_col = [Standardwert] WHERE TRUE

Dies entspricht der Aktualisierung von über 2000 W Daten in derselben Transaktion. Das heißt, diese Transaktion sperrt die gesamte Tabelle und wird erst ausgeführt, wenn alle Datensätze mit Standardwerten aktualisiert sind.

Diese Zeit ist sehr lang und da alle Datensätze in der Tabelle gesperrt sind, wird die Tabelle sehr lange nicht verfügbar sein.

Der Autor hat mit 16 Kernen, 32 G und der Standardkonfiguration von Mysql experimentiert. 5 Millionen Daten plus ein Feld.

Ohne den Standardwert dauert der gesamte DDL-Aktualisierungsprozess 66 Sekunden. Darüber hinaus stehen während des gesamten Aktualisierungsvorgangs Abfrage-, Änderungs- und Hinzufügungsvorgänge der Tabelle zur Verfügung. Die Gebrauchstauglichkeit der Tabelle wird dadurch praktisch nicht beeinträchtigt.

Mit dem Standardwert dauert der gesamte DDL-Aktualisierungsprozess 213 Sekunden. Nach dem Testen wurde festgestellt, dass die Abfrage-, Änderungs- und Hinzufügungsvorgänge der Tabelle nach etwa 100 Sekunden in einen Wartezustand fielen.

Dies ist das Ende dieses Artikels darüber, ob die Tabelle gesperrt werden soll, wenn Felder in Mysql ALTER TABLE hinzugefügt werden. Weitere relevante Inhalte zum Hinzufügen von Feldern in Mysql ALTER TABLE finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die verwandten Artikel weiter unten. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Detaillierte Einführung in den MySQL-Befehl zur Änderung der Tabelle
  • MySQL-Befehlsübersicht zur Tabellenänderung
  • MySQL-Befehl „Alter Table“ zum Ändern der Tabellenstruktur, Beispiel
  • Detaillierte Erläuterung des MySQL-Befehls „Alter Table“ zum Ändern der Tabellenstruktur
  • Grundlegende Verwendung und Geschwindigkeitsoptimierung des Befehls „Alter Table“ in MySQL
  • MySQL-Lernhinweise 5: Tabelle ändern (alter table)

<<:  Reines CSS zum Implementieren der Funktion zum Öffnen und Schließen von Auswahlfeldern im iOS-Stil

>>:  So implementieren Sie Code und Schritte für den digitalen Paging-Effekt in CSS

Artikel empfehlen

Tutorial zur Installation von VMWare15.5 unter Linux

Um VMWare unter Linux zu installieren, müssen Sie...

Wie viele Ports kann ein Linux-Server maximal öffnen?

Inhaltsverzeichnis Hafenbezogene Konzepte: Bezieh...

Verwenden Sie semantische Tags, um Ihr HTML kompatibel mit IE6,7,8 zu schreiben

HTML5 fügt weitere semantische Tags hinzu, wie et...

Praktischer grundlegender Beispielcode für den Linux-Befehl sed

Der Linux-Stream-Editor ist eine nützliche Möglic...

Detaillierte Diskussion der Unterschiede zwischen Schleifen in JavaScript

Inhaltsverzeichnis Vorwort Aufzählbare Eigenschaf...

Detaillierte Ansicht versteckter Spalten in MySQL

Inhaltsverzeichnis 1. Primärschlüssel vorhanden 2...

Detaillierte Erklärung der Whitelist-Regeln von nginx-naxsi

Syntax der Whitelist-Regel: Grundregel wl:ID [neg...

Die Verwendung von Textbereichen in HTML und häufige Probleme und Fallanalyse

Der Textarea-Tag ist ein HTML-Tag, den wir häufig ...

Verwendung des Linux-Befehls bzip2

1. Befehlseinführung bzip2 wird zum Komprimieren ...

Erläuterung zu JavaScript-Anti-Shake und -Throttling

Inhaltsverzeichnis Stabilisierung Drosselung Zusa...