2009-06-13 18 views
1

manchmal bekomme ich einen Fehler wie "Tabelle wird als beschädigt markiert und repariert werden". Diese DB (Tabellen) verwendet MyISAM. das passiert vor kurzem. Was könnten die Ursachen sein? zuletzt bin Ausführung i eine BatchMyISAM Tabellen werden korrupt

INSERT INTO table (..., ..., ...) VALUES (...), (...), (...) ...

einfügen und es hing nur. oder dauerte sehr lange, um es zu vollenden, scheint es mir gehangen. Am nächsten Tag, als ich den Tisch überprüfte, wurde er wieder als korrupt markiert. wenn ich versuche, mysqlcheck -r zu verwenden, sagte es alle Tabellen OK, wenn es diese "verdorbene" Tabelle erreichte, hängte es dort wieder ...

also, was kann ich tun, um dies zu verhindern. und was könnten die Ursachen sein? Die DB wird von Drittanbietern gehostet, wie kann ich das debuggen?

ist InnoDB eine zuverlässigere Engine zu verwenden? Ich habe gehört, dass MyISAM schneller ist, aber andere sagen, dass InnoDB auch schnell sein kann, aber es braucht noch mehr, um es zu optimieren. kann ich schlussfolgern, dass InnoDB etwas zuverlässiger ist, aber trotz der optimierung insgesamt langsamer ist?

Antwort

0

ok, so war das Problem, dass die DB des Unternehmens den Speicherplatz überschritten, der von der Hosting-Firma erlaubt wurde. so offenbar niemand sagte der Firma, dass sie die Nutzung überschritten ... lausiger Gastgeber, denke ich.

BTW, gibt es keine Möglichkeit, mysql hätte dies wissen können?

+0

Danke, Dies ist, warum mit InnoDB gehen, auch wenn InnoDB Einsätze 2x langsamer sind und count (*) ist auch langsam. (Liest sind ähnlich) –

3

Wenn Ihre Tabellen beschädigt erhalten, können Sie die Reparaturtabelle Befehl verwenden können, um sie zu beheben:

REPAIR TABLE table; 

Wenn Sie myisamchk laufen, während der Server noch läuft (und Einsätze/wählt den Tisch schlagen), es könnte sein, was deine Tische verderbt. Die meisten Probleme mit der Korruption, mit denen ich konfrontiert bin, bestehen darin, Dinge außerhalb des Servers zu tun (Kopieren der Dateien usw.), während es noch läuft.

InnoDB ist langsamer für schreibgeschützte Datenbanken, da es Funktionen (ACID-kompatibel, Zeilensperren) hat, die MyISAM nicht enthält. Wenn Sie jedoch abhängig von der Mischung eine Mischung aus Lese- und Schreibvorgängen durchführen, kann InnoDB erhebliche Leistungsverbesserungen bieten, da nicht die gesamte Tabelle für einen Schreibvorgang gesperrt werden muss. Sie stoßen auch nicht auf Korruptionsprobleme.

+0

jetzt, wenn ich versuche, Abfragen wie Select, check-Tabelle oder mysqlcheck -r, sogar create-Tabelle anzeigen, wird es nur dort hängen. etwas das ich tun kann? – iceangel89

+0

Haben Sie eine Reparatur durchgeführt? Läuft es noch (du könntest "show processlist" anzeigen). Höchstwahrscheinlich können Sie nicht auf die Tabelle oder ihre Metadaten zugreifen, bis sie vollständig ist (sie verfügt über eine Schreibsperre). Die Reparatur kann eine Weile auf einer großen Tabelle dauern, sie muss Indizes neu erstellen. –

1

Gehen Sie mit InnoDB.

Verwandte Themen