VorwortUm eine Tabelle zu löschen, kann der Befehl, der einem unbewusst in den Sinn kommt, darin bestehen, DROP TABLE „Tabellenname“ direkt zu verwenden. Dies ist ein naiver Ansatz, da der zu löschende Ausdrucksraum Dutzende GB oder sogar Hunderte GB an Tabellen erreicht. Wenn ein solcher Befehl ausgegeben wird, kann MySQL direkt blockiert werden. Die äußere Auswirkung ist ein schneller Abfall der QPS und eine Verlangsamung der Kundenanfragen. Lösung1. Manuelles Löschen außerhalb der Spitzenzeiten Dies kann erfordern, dass der DBA unermüdlich arbeitet und bis spät in die Nacht aufsteht, um die Tabelle zu löschen. 2. Daten zuerst löschen und zuletzt Wenn beispielsweise 10 Millionen Datenelemente vorhanden sind, schreiben Sie ein Skript, das jedes Mal 200.000 Elemente löscht, eine Weile pausiert und dann mit der Ausführung fortfährt. Dadurch ist es für den Benutzer auch nicht wahrnehmbar. 3. Erstellen Sie einen Hardlink zur Tabellendatei (IDB-Datei), um das Löschen zu beschleunigen Diese Methode verwendet das Wissen über Hardlinks unter Linux, um eine schnelle Löschung durchzuführen. Wenn Sie sich nicht erinnern, können Sie zurückgehen und sich „Bird Brothers Linux Private Recipe“ ansehen. ln data_center_update_log.ibd data_center_update_log.ibd.hdlk [root@mysql01 Sportzentrum]# ll Gesamtverbrauch 19903792 -rw-r----- 1 mysql mysql 9076 17. Oktober 13:15 data_center_update_log.frm -rw-r----- 2 mysql mysql 8447328256 23. Dezember 11:35 data_center_update_log.ibd -rw-r----- 2 mysql mysql 8447328256 23. Dezember 11:35 data_center_update_log.ibd.hdlk Nach der Ausführung des obigen Befehls haben wir eine zusätzliche Datei data_center_update_log.ibd.hdlk. Dieser Vorgang nimmt keinen Speicherplatz in Anspruch, er fügt lediglich einen Verweis auf die Datei auf der Festplatte hinzu. Wenn wir eine dieser Dateien löschen, wirkt sich dies nicht auf die eigentliche Datei auf der Festplatte aus, sondern reduziert lediglich ihren Referenzzähler um 1. Wenn die Anzahl der Referenzen 1 erreicht, wird die Datei gelöscht und es wird ein IO ausgeführt, um sie zu löschen. Genau durch die Nutzung dieser Funktion wird der ursprüngliche MySQL-Vorgang zum Löschen großer Dateien in ein einfaches Löschen von Dateien auf Betriebssystemebene umgewandelt, wodurch die Auswirkungen auf MySQL reduziert werden. 4. Melden Sie sich bei MySQL an und führen Sie den Drop-Table-Vorgang aus Bald waren 2 Millionen Daten in nur 1 Sekunde fertig. Dieser Vorgang wurde nach dem Erstellen eines Hardlinks durchgeführt. mysql> Tabellen data_center_update_log löschen; Abfrage OK, 0 Zeilen betroffen (1,02 Sek.) mysql> beenden Tschüss Beenden Sie das Programm und überprüfen Sie das Datenverzeichnis erneut. Es ist nur noch die Hardlink-Datei data_center_update_log.ibd.hdlk übrig. [root@mysql01 sports_center]# ll Gesamtverbrauch 19903792 -rw-r----- 2 mysql mysql 8447328256 23. Dezember 11:35 data_center_update_log.ibd.hdlk 5. Wie lösche ich die Hardlink-Datei ibd.hdlk richtig?
5.1 Installieren Sie den Truncate-Befehl [root@mysql01 ~]# kürzen -bash: cruncate: Befehl nicht gefunden Normalerweise installiert das Betriebssystem den Befehl truncate, der sich im Installationspaket von coreutils befindet. Wenn er nicht installiert ist, können Sie ihn mit dem folgenden Befehl installieren [root@mysql01 ~]# yum stellt truncate bereit coreutils-8.22-24.el7.x86_64: Eine Reihe grundlegender GNU-Tools, die häufig in Shell-Skripten verwendet werden Quelle: Basis Passende Quelle: Dateiname: /usr/bin/truncate Sie können sehen, dass Truncate vom Coreutils-Installationspaket bereitgestellt wird. Lassen Sie uns das Coreutils-Installationspaket installieren: [root@mysql01 ~]# yum install -y coreutils 5.2 Allgemeine Optionen für Truncate
5.3 truncate_bigfile.sh-Skript Prinzip: Verwenden Sie die Option truncate -s, um die Dateigröße anzugeben, geben Sie die Größe jeder Dateireduzierung über das Skript an und schlafen Sie für einen bestimmten Zeitraum ein, um eine kontrollierbare Dateilöschung zu erreichen. Anhang: Skript truncate_bigfile.sh #!/bin/bash # TRUNCATE=/usr/bin/truncate DATEI=$1 wenn [ x"$1" = x ];dann echo "Bitte geben Sie den Dateinamen ein in" Ausgang 1; anders SIZE_M=$(du -sm "$1" | awk '{print $1}') für i in $(seq "${SIZE_M}" -100 0) Tun Schlaf 1 echo "${TRUNCATE} -s ${i}M ${FILE}" ${TRUNCATE} -s "${i}"M "${FILE}" Erledigt fi wenn [ $? -eq 0 ];dann \rm -f "${FILE}" anders echo "Bitte Datei prüfen" fi ZusammenfassenDies ist das Ende dieses Artikels zum eleganten Löschen großer Tabellen in MySQL. Weitere Informationen zum eleganten Löschen großer Tabellen in MySQL finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: CSS- und HTML- und Front-End-Technologie-Schichtendiagramm
>>: Docker-Image-Analysetool - Analyse des Tauchprinzips
Verwenden Sie JS zum Vergrößern und Verkleinern, ...
1. Objektorientierte Klassenvererbung In den obig...
In diesem Artikel wird der spezifische Code des j...
In diesem Artikel müssen wir lernen, wie man Bild...
Inhaltsverzeichnis brauchen Problemumgehung 1. To...
Inhaltsverzeichnis Vorwort 1. Anwendungskomponent...
Verwendung: Datum [Optionen]... [+Format] oder: D...
Inhaltsverzeichnis denken 1. Bild mit dem gierige...
Inhaltsverzeichnis Themen dynamisch ändern Die er...
Am Anfang war ich traurig. Die Screenshots sind w...
Hintergrund Bei der Data-Warehouse-Modellierung w...
In letzter Zeit wurde der Server häufig mit Brute...
Einführung in IPSec IPSec (Internet Protocol Secu...
Der Vorteil der Master-Slave-Synchronisierungskon...
1. Laden Sie das RPM-Paket für Linux herunter htt...