
以前は問題なく動作していたMySQLデータベースがあるのですが、起動が遅くなりました。
$> mysql -u foo bar
プロンプトが表示される前に、約 30 秒間、次の通常のメッセージが表示されます。
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
もちろん、試してみましたが、かなり速くなります。
$> mysql -u foo bar -A
しかし、通常の起動ではなぜこんなに長く待たなければならないのでしょうか? これはそれほど大きなデータベースではありません (編集: <10 MB)。また、データは破損していないようです (起動後はすべて正常に見えます)。同時に他のクライアントが mysql サーバーに接続しておらず (コマンドで表示されるプロセスは 1 つだけshow full processlist
)、すでにサービスを再起動していますmysqld
。
どうしたの ?
答え1
問題は、自動再ハッシュ機能
今日はこれを試してみました
mysqlプロンプトで次のように入力しました
mysql> desc outbound_
タブを2回押すと次の画面が表示されます
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_
すべてのデータベースとテーブルが選択可能になりました
明らかに、mysql クライアントはデータベースを読み取る必要がありますinformation_schema
。mysql インスタンスに InnoDB テーブルが多数含まれている場合は、データベースauto-rehash
を読み取ることができるまで mysql クライアントが停止する可能性がありますinformation_schema
。
答え2
[mysql] に次のコードを追加すると (d で終わらないことに注意してください)、応答時間が大幅に短縮されます。
no-auto-rehash
答え3
皆さん、ありがとうございました。問題の答えが見つかりました。データベースのテーブルの 1 つにアクセスできません:
mysql> show columns from foo;
ERROR 1033 (HY000): Incorrect information in file: './db/foo.frm'
関連付けられたfoo.frm
ファイルは読み取れません。
$> cat foo.frm
cat: foo.frm: input/output error
ディスク障害 :/ Mysql は、そのファイルからデータにアクセスしようとするため、起動に時間がかかります。