
Ich habe eine MySQL-Datenbank, die früher einwandfrei funktionierte, aber jetzt ist sie beim Start furchtbar langsam. Wenn ich eingebe
$> mysql -u foo bar
Ich erhalte etwa 30 Sekunden lang die folgende übliche Meldung, bevor ich eine Eingabeaufforderung erhalte:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Natürlich habe ich es ausprobiert und es geht viel schneller:
$> mysql -u foo bar -A
Aber warum muss ich beim normalen Start so lange warten? Dies ist keine sehr große Datenbank (Bearbeiten: <10 MB) und die Daten scheinen nicht beschädigt zu sein (nach dem Start sieht alles gut aus). Ich habe keinen anderen Client, der gleichzeitig eine Verbindung zum MySQL-Server herstellt (nur ein Prozess wird mit dem Befehl angezeigt show full processlist
) und ich habe den mysqld
Dienst bereits neu gestartet.
Was ist los ?
Antwort1
Ich denke, das Problem liegt in derAuto-Rehash-Funktion
Ich habe das heute ausprobiert
In der MySQL-Eingabeaufforderung habe ich eingegeben
mysql> desc outbound_
Ich habe die Tabulatortaste zweimal gedrückt und Folgendes erhalten
mysql> desc outbound_
outbound_call_id outbound_log.ext outbound_log.template_id
outbound_log outbound_log.failed outbound_log.transfer_connected
outbound_log.DealerVoiceProviderType outbound_log.icallclick_alert outbound_log.transfer_duration
outbound_log.VoipCallStatusType outbound_log.isService outbound_log.transfer_ended
outbound_log.VoipTransferStatusType outbound_log.lead_id outbound_log.transfer_ext
outbound_log.call_duration outbound_log.outbound_log_id outbound_log.transfer_phone
outbound_log.call_ended outbound_log.phone outbound_log.transfer_started
outbound_log.call_started outbound_log.postback outbound_log.transfer_status
outbound_log.call_type outbound_log.recording_url outbound_log.vehicle_id
outbound_log.called outbound_log.remote_call_id outbound_log_id
outbound_log.callnote_synced outbound_log.sales_id
outbound_log.dealer_id outbound_log.scheduled
mysql> desc outbound_
Jede Datenbank und Tabelle stand mir zur Auswahl
Offensichtlich muss der MySQL-Client die information_schema
Datenbank lesen. Wenn Ihre MySQL-Instanz viele InnoDB-Tabellen enthält, kann ich mir vorstellen, dass auto-rehash
der MySQL-Client blockiert wird, bis er information_schema
die Datenbank lesen kann.
Antwort2
Fügen Sie Ihrem [mysql] Folgendes hinzu (beachten Sie, dass es nicht mit d endet), um Ihre Antwortzeit erheblich zu beschleunigen:
no-auto-rehash
Antwort3
Vielen Dank an alle, ich habe die Antwort auf mein Problem gefunden. Auf eine der Tabellen in der Datenbank kann nicht zugegriffen werden:
mysql> show columns from foo;
ERROR 1033 (HY000): Incorrect information in file: './db/foo.frm'
Die zugehörige foo.frm
Datei kann nicht mehr gelesen werden.
$> cat foo.frm
cat: foo.frm: input/output error
Festplattenfehler :/ Der Start von MySQL dauert so lange, weil es versucht, auf die Daten dieser Datei zuzugreifen.