我的网站在访问高峰期出现严重问题。在做了很多故障排除后,我发现问题出在数据库上。
我有这个在检索数据表的索引上运行的主查询。
在繁忙的一天,该网站第一次加载需要 30 到 45 秒,但之后每次加载速度都非常快,大约 5 分钟后再次变慢,最终网站因负载过多而崩溃。
我直接在数据库上测试了查询,它的执行完全相同。
这会更多地与查询或 MySQL 配置有关吗?
它在返回结果很小的情况下工作得非常好,但是在繁忙的一天,当列表非常大时,它真的会减慢速度并杀死网站。
编辑:
感谢您的所有建议。
我稍微修改了查询并对数据库进行了一些修改,因为有些名称不合理。
在您提出所有建议之后,我还修改了查询以删除通配符搜索以及对不再需要的表的一些冗余请求。
这是查询本身:
SELECT g.id, g.`name`, g.scores, g.sportFK, g.`desc`, g.`date`, s.id AS streamid
FROM games AS g
LEFT JOIN streams AS s ON s.gameFK = g.id
WHERE
(g.date >= '" . $date . "' AND g.date <= '" . $newdate . "')
AND g.sportFK IN (" . $sportfk . ")
ORDER BY g.date ASC"
经过测试,查询的第一次性能仍然在 33s 运行,随后的每次执行都在 0.04s 运行,这表明当高峰时间到来时,对站点的影响将是相同的。
我还准备了所需的信息EXPLAIN
。
这是用于“游戏”表的
GAMES TABLE:
SIZE: 6MB
ROWS: 14841
TYPE: INNODB
这是针对“STREAMS”表的
STREAMS TABLE:
SIZE: 80MB
ROWS: 135296
TYPE: MyISAM
编辑:马丁感谢您对写作提出意见。该数据库确实以相当固定的时间间隔从另一个来源填充,因此将不断发生 READ 和 WRITE 操作。我将不得不对此做更多的研究。