Linux(Redhat)上的 MySQL 在查询大型表时冻结

Linux(Redhat)上的 MySQL 在查询大型表时冻结

我们有一台运行 LAMP 的服务器,其中包含许多 zencart 站点。我们在尝试查看其中一个站点中的订单时发现一个问题,并且超时了。现在当我这样做时:

"select * from orders"

整个事情都冻结了,还有:

SHOW PROCESSLIST

现在订单表应该有大约 42000 个订单,它并没有那么大。有人能推荐一些好的诊断技术来找出问题所在吗?

答案1

当您执行“解释从订单中选择*”查询时会发生什么?和“选择计数() 来自订单”?解释语句应该让你了解查询发生了什么(它解释了服务器将如何执行它并帮助你诊断瓶颈)和计数() 会告诉您,您提到的 42 000 是否仍在该范围内。

答案2

我认为你的索引有问题。你可以试试

OPTIMIZE TABLE `orders`
CHECK TABLE `orders`
REPAIR TABLE `orders`

您也可以尝试转储并重新创建。

答案3

设法解决了这个问题。使用 MySQL 查询浏览器,它允许我查看当前正在运行的线程。有几个密集的 MyIsam 查询由于某种原因锁定了表。我杀死了这些查询,积压在几秒钟内就清除了。恢复正常。哇!

相关内容