MySQL查询挂起网站

我最近从一个Dreamhost共享托pipe帐户转移到一个Linode 512MB VPS。 对于我的网站正常的日常操作,交换机已经相当顺利,但是MySQL的一些问题已经出现。 关于我的设置的一点背景,因为我不确定问题是否与MySQL有关:

  • Ngnix 0.7.65
  • Ubuntu 10.04 LTS
  • MySQL 5.1.41

我遇到的问题是,每当执行不属于站点正常操作的查询时(这可能是从优化表,到执行SELECT COUNT,对一组数据运行删除查询)…防止整个Web服务器加载任何页面。 我网站上的所有页面都有数据库调用,但是不与我正在处理的表进行交互的页面仍然不会加载。 如果您在执行其中一个查询时尝试访问页面,那么在Nginx发出错误“502 Bad Gateway”之前,页面将尝试加载大约一分钟左右。 显然这对于​​COUNT查询来说不是一个问题,只需要不到5秒钟,但是优化表格可以使网站从加载页面5分钟以上。

我们有一个每晚运行的脚本,从主表中抽取前100,000条logging,并将其存储在一个单独的表中,以供排名页面使用。 在Dreamhost上执行这个脚本时,我们网站的排名页面将是空的,但网站的其余部分将继续运行,但是,在VPS上,网站上的任何一页都不会加载,直到查询完成6分钟。

如果有更多的信息将帮助请让我知道,我会很乐意提供。 我search了这个网站,Google非常无情地试图find任何遇到类似问题的人,但找不到任何东西。 你们认为这只是MySQL的一个问题,还是会导致我的Nginx? (在Dreamhost我有Apache)。

谢谢。

连接到你的SQL服务器并运行查询:“show processlist”。 这将显示所有正在运行的查询及其当前状态。 你应该期望看到他们几乎所有的状态LOCKED,这意味着他们正在等待其他查询之一完成。 那些没有被locking的是你作为罪魁祸首的候选人。