So bereinigen Sie schnell Milliarden von Daten in einer MySQL-Datenbank

So bereinigen Sie schnell Milliarden von Daten in einer MySQL-Datenbank

Heute habe ich eine Festplattenalarm-Ausnahme erhalten. Die 50G-Festplatte wurde gesprengt. Der Analyse- und Lösungsprozess ist wie folgt:

1. Rufen Sie den Linux-Server auf und überprüfen Sie den von jeder Datenbank im MySQL-Ordner belegten Speicherplatz

Haben Sie gesehen, dass allein „Olderdb“ 25 GB beansprucht?

2. Melden Sie sich mit SQLyog bei der MySQL-Datenbank an und überprüfen Sie den von jeder Tabelle in der Datenbank belegten Speicherplatz

SELECT CONCAT(Tabellenschema,'.',Tabellenname) AS 'aaa',  
  table_rows AS 'Anzahl der Zeilen',  
  CONCAT(ROUND(Datenlänge/(1024*1024*1024),6),' G') AS 'Datengröße',  
  CONCAT(ROUND(index_length/(1024*1024*1024),6),' G') AS 'Indexgröße' ,  
  CONCAT(ROUND((Datenlänge+Indexlänge)/(1024*1024*1024),6),' G') AS'Gesamt' 
VON information_schema.TABLES  
WHERE table_schema LIKE 'ältereDB';

3. Abfrage des Primärschlüsselindex

INDEX AUS ORBIT ANZEIGEN

Übernehmen Sie eine Strategie

Voraussetzung: Aktuell müssen 80% der Daten gelöscht werden

① Anweisung löschen

Wir wissen, dass die Löschgeschwindigkeit der Löschanweisung proportional zur Anzahl der Indizes ist. Die Anzahl der Indizes in dieser Tabelle ist bereits sehr groß und die Datenmenge ist sehr groß. Wenn zum Löschen eine herkömmliche Löschanweisung verwendet wird, dauert dies definitiv mehrere Tage.

Durch das Löschen mit der Anweisung „Delete“ wird kein Speicherplatz freigegeben, es wird also auf jeden Fall ein Alarm angezeigt, daher ist diese Methode nicht ratsam.

② Tabelle löschen

Erstellen Sie eine neue Tabelle mit gleicher Struktur und nennen Sie sie „cc“, tragen Sie die zu speichernden Daten in diese Tabelle ein und löschen Sie anschließend die alte Tabelle.

Die SQL-Anweisung lautet wie folgt:

Erstellen Sie eine neue Tabelle basierend auf der alten Tabelle

TABELLE ERSTELLEN cc WIE orbit;

Daten einfügen (Millionen von Daten müssen stapelweise eingefügt werden, am besten 300.000-400.000 auf einmal, schließlich ist die Datenverarbeitungskapazität von MySQL begrenzt)

Abfrage nach Datum und Einfügen (täglich werden etwa 300.000 Datenpunkte generiert, daher wird die Datumseinfügung verwendet)

INSERT INTO cc SELECT * FROM orbit WHERE xttime > '2018-04-16 00:00:00' AND xttime<='2018-04-17 00:00:00';

Die Ergebnisse sind wie folgt:

Es ist ersichtlich, dass die Verarbeitung der über 500.000 Daten weniger als 5 Minuten dauerte, was relativ schnell ist.

Nach der Bereinigung wird der Datentabellenplatz freigegeben

Dann lassen Sie die alte Tabelle fallen

DROP TABLE-Umlaufbahn

Es dauerte nur etwa 3 Sekunden.

Benennen Sie die neue Tabelle in „cc“ um.

ALTER TABLE cc RENAME TO orbit

Zusammenfassen

Das Obige ist meine Einführung, wie man schnell Milliarden von Daten in einer MySQL-Datenbank bereinigt. Ich hoffe, es wird Ihnen helfen. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und ich werde Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!

Das könnte Sie auch interessieren:
  • Eine kurze Diskussion über die Optimierung von MySQL-Paging für Milliarden von Daten
  • So nutzen Sie Partitionierung, um die MySQL-Datenverarbeitung für Milliarden von Daten zu optimieren

<<:  Die Verwendung und der Unterschied zwischen JavaScript-Pseudo-Array und Array

>>:  Detailliertes Tutorial zur Installation von Nginx 1.16.0 unter Linux

Artikel empfehlen

Installation der virtuellen Maschine Kali Linux Vmware (Abbildung und Text)

Vorbereitung: 1. Installieren Sie die VMware Work...

Einführung in das Batch-Cache-Löschskript von nginx proxy_cache

Vorwort: Ich habe zuvor den offiziellen Proxy-Cac...

Warum sollten Sie mit der add_header-Direktive von Nginx vorsichtig sein?

Vorwort Wie wir alle wissen, legt die Nginx-Konfi...

Detaillierte Analyse der Parameterdatei my.cnf von MySQL in Ubuntu

Vorwort Aufgrund meines MySQL-Verständnisses denk...

Wie werden Vue-Komponenten analysiert und gerendert?

Vorwort In diesem Artikel wird erklärt, wie Vue-K...

Detaillierte Erläuterung des Redo-Logs und Undo-Logs in MySQL

Die wichtigsten Protokolle im MySQL-Protokollsyst...

JS Canvas realisiert die Funktionen von Zeichenbrett und Signaturtafel

In diesem Artikel wird der spezifische Code von J...

So lösen Sie das Problem, dass Seata die MySQL 8-Version nicht verwenden kann

Mögliche Gründe: Der Hauptgrund, warum Seata MySQ...

Zusammenfassung zum horizontal scrollenden Website-Design

Horizontales Scrollen ist nicht in allen Situation...

Installieren und Bereitstellen von Java8 und MySQL unter CentOS7

Im Allgemeinen werden Java-Lernprogramme und Bere...

Detaillierte Erläuterung der Funktionen und Methoden des Vue3-Lebenszyklus

1. Übersicht Bei der sogenannten Lifecycle-Funkti...

So sichern und wiederherstellen Sie die MySQL-Datenbank, wenn sie zu groß ist

Befehl: mysqlhotcopy Dieser Befehl sperrt die Tab...