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

Zabbix benutzerdefinierte Überwachung Nginx Status Implementierungsprozess

Inhaltsverzeichnis Zabbix benutzerdefinierte Über...

Freigabe der schnellen Wiederherstellungslösung für große MySQL-SQL-Dateien

Vorwort Bei der Verwendung einer MySQL-Datenbank ...

Das Problem der Verwendung von Slots durch Vue+tsx wird nicht behoben

Inhaltsverzeichnis Vorwort Finden Sie das Problem...

Manuelle und geplante Sicherungsschritte für die MySQL-Datenbank

Inhaltsverzeichnis Manuelle Sicherung Timer-Siche...

CentOS 8 ist jetzt verfügbar

CentOS 8 ist jetzt verfügbar! Die Versionen von C...

Detaillierte Erklärung der MySQL DEFINER-Verwendung

Inhaltsverzeichnis Vorwort: 1. Kurze Einführung i...

Detaillierte Schritte zur Installation von MySQL 8.0.18-winx64 unter Win10

1. Gehen Sie zunächst auf die offizielle Website,...

Detaillierte Erklärung des Linux-Texteditors Vim

Vim ist ein leistungsstarker Vollbild-Texteditor ...

Lösen Sie das Problem der inkonsistenten MySQL-Speicherzeit

Nachdem die Systemzeit mit Java ermittelt und in ...

So simulieren Sie eine Aufzählung mit JS

Vorwort Im aktuellen JavaScript gibt es kein Konz...

Saubere XHTML-Syntax

Das Schreiben von XHTML erfordert eine saubere HTM...