我最近从 Dreamhost 共享主机账户转移到了 Linode 512mb VPS。对于我网站的日常运行来说,这次切换相当顺利,但出现了一些与 MySQL 有关的问题。我先介绍一下我的设置背景,因为我不确定问题是否出在 MySQL 上:
- Ngnix 0.7.65
- Ubuntu 10.04 LTS
- MySQL 5.1.41
我遇到的问题是,每当执行不属于网站正常运行的查询时(这可能是从优化表格到执行 SELECT COUNT,再到对一组数据运行删除查询),整个 Web 服务器都无法加载任何页面。我网站上的所有页面都有数据库调用,但与我正在处理的表格不交互的页面仍然无法加载。如果您在执行其中一个查询时尝试访问某个页面,该页面将尝试加载大约一分钟左右,然后 Nginx 会抛出错误“502 Bad Gateway”。显然,对于耗时不到 5 秒的 COUNT 查询来说,这不是什么大问题,但优化表格可能会使网站在 5 分钟以上无法加载页面。
我们有一个每晚运行的脚本,它从主表中提取前 100,000 条记录并将其存储在单独的表中,用于排名页面。在 Dreamhost 上,当执行此脚本时,我们网站的排名页面将为空,但网站的其余部分将继续运行,然而,在 VPS 上,网站上的任何页面都不会加载,直到约 6 分钟的查询完成。
如果有任何信息有帮助,请告诉我,我很乐意提供。我在这个网站和谷歌上搜索了很久,试图找到遇到类似问题的人,但一无所获。你们认为这只是 MySQL 的问题,还是由我的 Nginx 引起的?(在 Dreamhost 上我有 Apache)。
谢谢。
答案1
连接到您的 SQL 服务器并运行查询:“show processlist”。这将向您显示所有正在运行的查询及其当前状态。您应该会看到几乎所有查询都处于 LOCKED 状态,这意味着它们正在等待其他查询之一完成。不是被锁定的是罪魁祸首候选人。