Frage

habe ich einen neuen Index für eine Tabelle mit 35 Mio. Datensätze und seine seit fast 1 Tag läuft jetzt. Früher, als ich Indizes erstellt es 20 Minuten dauerte, wurden Spalten jedoch schwimmt. Der neue idnex befindet sich auf einem varchar (45)

Ich benutzen den PROCESS Befehl, der die Indexerstellung zeigt noch im Gang ist mit der folgenden Ausgabe

65417 | Repair with keycache | CREATE INDEX insert_index on checkins(dateinserted)

Ich habe mich gefragt, ob jemand mir einen Rat auf, herauszufinden, geben könnte, wenn die Abfrage tatsächlich tot ist und sitzt gerade in der Prozessliste. hat etwas schief gegangen irgendwann vielleicht, und ich bin mir nicht bewusst.

Danke

War es hilfreich?

Lösung

Ihr Index baut, aber sehr langsam.

MySQL hat zwei Methoden zur Verfügung für Indizes Aufbau:

  1. durch Sortieren. Dies ist die schnellste Methode, aber verbraucht viel Speicher.
  2. von keycache. Langsam, langsam, langsam -. Aber verbraucht wenig Speicher

Die keycache Verfahren sind ein wenig wie Insertionsort: Werte werden in den Index einen nach dem anderen. Dies ist die gleiche Methode vom Server verwendet wird, wenn die INSERT-Anweisung verwendet wird, um Zeilen in die Tabelle hinzuzufügen.

Die Sortiermethode sortiert alle Werte quicksort verwenden, und baut dann den Index aus, dass. Es ist sehr schnell, erfordert aber sehr viel Speicher und temporären Speicherplatz.

Einige Servervariablen können den Raum zu dem Sortierverfahren zur Verfügung erhöhen, und so lassen Sie es mit größeren Tabellen zu arbeiten. Siehe myisam_max_sort_file_size

http: //dev.mysql. com / doc / refman / 5.1 / de / Server-System-variables.html # sysvar_myisam_max_sort_file_size

Unter Linux können Sie durch Überprüfen der Größe der temporären Dateien, die verwendet werden, um beim Aufbau des Index des Fortschritt der Index Reparatur verfolgen. Mit dem folgenden Befehl wird alle Dateien auflisten vom MySQL-Prozess offen gehalten:

sudo ls -l /proc/[mysql-pid]/fd  

Dann schauen Sie sich die Größe von Einsen mit Hashes in ihrem Namen -. Das sind die temporären Dateien

Andere Tipps

Halten Sie die Indexgröße sein wird 35M * 45 zumindest im Auge behalten. Wenn es sich um eine UTF-8-Säule ist, dann wird es 35M * 45 * 3 sein. Das ist mehr als 4 Konzerte! Wenn Sie nicht Tonnen von RAM-Unterstützung haben, dass es eine Menge Festplattenzugriff zu haben, geht zu tun und wirklich Leistung zu töten.

Sie können diese Spalte normalisieren in eine andere Tabelle aus?

Wenn nicht die Werte neigen dazu, zu sagen zu variieren ausreichend in die ersten 8 Zeichen? Sie könnten in der Lage sein, mit nur den ersten 8 dann die Indizierung wegzukommen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top