Warum ist der Zugriff auf meine Datenbank so langsam?

Warum ist der Zugriff auf meine Datenbank so langsam?

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 mysqldDienst 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_schemaDatenbank lesen. Wenn Ihre MySQL-Instanz viele InnoDB-Tabellen enthält, kann ich mir vorstellen, dass auto-rehashder MySQL-Client blockiert wird, bis er information_schemadie 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.frmDatei 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.

verwandte Informationen