为什么访问我的数据库很慢?

为什么访问我的数据库很慢?

我有一个 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 服务器(命令只显示一个进程show full processlist),并且我已经重新启动了mysqld服务。

这是怎么回事 ?

答案1

我认为问题源于自动重复功能

我今天尝试了一下

在 mysql 提示符下,我输入

mysql> desc outbound_

我点击了两次标签,得到了以下内容

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-rehashmysql 客户端被挂起,直到它能够读取information_schema数据库。

答案2

将以下内容添加到您的 [mysql](注意它没有以 d 结尾),它将大大加快您的响应时间:

no-auto-rehash

答案3

谢谢大家,我找到了问题的答案。无法访问数据库中的其中一个表:

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 启动需要很长时间,因为它尝试从该文件访问数据。

相关内容