我们有一台运行 LAMP 的服务器,其中包含许多 zencart 站点。我们在尝试查看其中一个站点中的订单时发现一个问题,并且超时了。现在当我这样做时:
"select * from orders"
整个事情都冻结了,还有:
SHOW PROCESSLIST
现在订单表应该有大约 42000 个订单,它并没有那么大。有人能推荐一些好的诊断技术来找出问题所在吗?
答案1
当您执行“解释从订单中选择*”查询时会发生什么?和“选择计数() 来自订单”?解释语句应该让你了解查询发生了什么(它解释了服务器将如何执行它并帮助你诊断瓶颈)和计数() 会告诉您,您提到的 42 000 是否仍在该范围内。
答案2
我认为你的索引有问题。你可以试试
OPTIMIZE TABLE `orders`
CHECK TABLE `orders`
REPAIR TABLE `orders`
您也可以尝试转储并重新创建。
答案3
设法解决了这个问题。使用 MySQL 查询浏览器,它允许我查看当前正在运行的线程。有几个密集的 MyIsam 查询由于某种原因锁定了表。我杀死了这些查询,积压在几秒钟内就清除了。恢复正常。哇!