Ich führe einige Django-Migrationen auf einer AWS RDS MySQL-Instanz aus. Mein Team hat die Migrationen sehr gründlich getestet und sie liefen einwandfrei (sie dauerten sogar weniger als 30 Minuten, wenn sie auf unseren Laptops mit einer Kopie unserer Produktionsdaten ausgeführt wurden).
Jetzt, da wir die Produktionsdatenbank migrieren, dauert es über 2 Stunden. Wenn ich Folgendes ausführe:
mysql> SHOW PROCESSLIST;
Ich kann den aktiven Prozess sehen und er tut etwas, aber sehr langsam. Unsere Migrationen befinden sich mitten in einer Datenmigration und die SELECT-Anweisungen (wir holen Zeilen durch das ORM in Stapeln von 100) dauern jeweils bis zu 32 Sekunden. Die letzten 30 Sekunden werden im Zustand „Entfernen der temporären Tabelle“ verbracht.
Irgendeine Idee, was die Ursache dafür ist?
Antwort1
Wir holen Zeilen durch das ORM in Stapeln von 100
Ineffiziente Abfragen zum Batch-Verarbeiten der Daten. Da das DBMS temporäre Tabellen verwendet, muss es viel, VIEL mehr Daten untersuchen, als im Ausgabedatensatz enthalten sind – und die meisten davon werden verworfen.
Gehen Sie zu StackOverflow und veröffentlichen Sie Ihr Schema und die Abfragen, die Sie zum Extrahieren der Daten verwenden, um spezifischere Ratschläge zu erhalten. Meiner Erfahrung nach ist ORM jedoch vom Prinzip her so kaputt, dass es normalerweise einfacher ist, auf Fabriken umzusteigen, als zu versuchen, es effizient/zuverlässig zum Laufen zu bringen.