2010-12-30 3 views
0

Ich bin kein Experte mit MySQL, und ich versuche zu verstehen, warum die Tabelle Repair mit Keycache zeigt und was ich tun kann, um es an dieser Stelle zu korrigieren. Ich habe etwas gesucht, aber ich konnte nicht viel über diese spezielle Ursache herausfinden ...MySQL Reparieren mit Keycache folgende INSERT VON SELECT

Die Situation: Ich habe eine Tabelle von 36 Millionen Datensätzen. Als Teil eines Optimierungsprozesses wollte ich einen der Indizes, insbesondere einen UNIQUE-Index, aus Tablea entfernen. Dazu habe ich eine neue Tabelle erstellt (CREATE TABLE tableb LIKE tablea) und den eindeutigen Index aus tableob entfernt (DROP INDEX unique FROM tableb). Schließlich kopierte ich die Informationen aus Tablea in Tabelle (INSERT INTO tableb SELECT * FROM tablea). Für ungefähr vier Stunden lautete der Status Senden von Daten. Anschließend wechselte er zu Reparieren von Keycache.

Mein Verständnis war, dass beim Erstellen einer INSERT von SELECT die Indizes erstellt werden, während die Daten kopiert werden, weshalb ich nicht einfach den Index aus der vorhandenen Tabelle gelöscht habe, was meiner Meinung nach Refactoring aller überlebende Indizes. War etwas falsch an meiner Herangehensweise oder ist das normal?

Schließlich, jetzt, wo es die Reparatur von Schlüsselcache macht, kann ich irgendetwas tun? Kann ich den Prozess beenden und eine Reparatur vornehmen oder die Einstellungen ändern, oder muss ich warten, bis der Reparaturvorgang abgeschlossen ist?

Letzte Log-Einträge, wenn sie helfen:

101229 14:28:28 [Warning] Warning: Enabling keys got errno 137 on db.#sql-19cc_3243, retrying 
101229 16:04:02 [Warning] Warning: Enabling keys got errno 137 on db.tableb, retrying 

Antwort

1

Sie könnten die Antworten im Rahmen dieser Frage prüfen wollen: MySQL - How To Avoid Repair With Keycache?

+0

Ich habe durch das lesen. Ich habe bereits MySQL mit einem großen tmp-Verzeichnis (250 GB) und ich bin mir nicht sicher, wie man eine lebensfähige Größe schätzen kann, um myisam_max_sort_file_size zu erhöhen, um sicher zu sein, dass das nicht das Problem ist. Ist es auch sicher, den Prozess zu stoppen, um diese Einstellung zu ändern? – Wige

+0

Nach Ingo Strüwing [1]: "Die theoretische maximale Indexgröße für normale Indizes ist die maximale Feldlänge (mal die Zeichenbreite wo angemessen, 3 für UTF8) plus 1 für maximale Längen unter 256, ansonsten 2 plus die myisam_data_pointer_size, mal die aktuelle Anzahl der Datensätze in der Tabelle. Bei Volltextindizes wird die maximale Wortlänge (31) (mal Zeichenbreite) zur Schlüssellänge addiert. " [1] http://forums.mysql.com/read.php?21,86150,86992#msg-86992 – Manzabar

+0

Da es "sicher" ist, den Prozess zu stoppen, bin ich mir nicht sicher. Gemäß Ihrer Frage ist dies eine Kopie der ursprünglichen Tabelle, an der Sie gerade arbeiten. Wenn die Originaltabelle immer noch vorhanden ist, während Sie alle Optimierungen für die neue Tabelle herausfinden, lassen Sie die neue Tabelle einfach fallen und beginnen Sie erneut damit. – Manzabar