MySQL查询使服务器cpu使用率保持在80%
我有一个经过优化的查询,但是每次运行时服务器的cpu使用率都保持在80%。Explain显示所有表都使用了正确的索引,并且扫描的行数最少。所以我不知道是什么原因导致这个查询终止了服务器。非常感谢您的帮助MySQL查询使服务器cpu使用率保持在80%,mysql,sql,cpu,Mysql,Sql,Cpu,我有一个经过优化的查询,但是每次运行时服务器的cpu使用率都保持在80%。Explain显示所有表都使用了正确的索引,并且扫描的行数最少。所以我不知道是什么原因导致这个查询终止了服务器。非常感谢您的帮助 SELECT DISTINCT c.id, c.sName AS sCompany, IF( u.isActive = 1 AND c.bActive = 1, 'yes', 'no' ) AS bActiv
SELECT
DISTINCT
c.id,
c.sName AS sCompany,
IF(
u.isActive = 1
AND c.bActive = 1,
'yes',
'no'
) AS bActive,
COUNT(t1.id) AS nDownloads,
(
-- samples received
SELECT
COUNT(id)
FROM tblSample
WHERE nUserID = u.id
) AS nRequests,
COUNT(t3.id) AS nClicks,
COUNT(t2.id) AS nImpressions,
COUNT(li.id) AS nActiveConnections
FROM tblUser u
LEFT JOIN tblCompany c
ON c.id = u.nCompanyID
LEFT JOIN tblLink li
ON (
li.nToObjectID = c.id
AND li.nFromObjectID != 0
AND li.sType = 'company'
AND li.sStatus = 'active'
)
-- DOWNLOADS
LEFT JOIN tblTracker t1
ON (
t1.nUserID = u.id
AND t1.sClass = 'Media'
AND t1.sMethod IN ('download', 'image')
AND t1.sAction = 'download'
)
LEFT JOIN tblMedia m1
ON m1.id = t1.nID
-- IMPRESSIONS
LEFT JOIN tblTracker t2
ON (
t2.nUserID = u.id
AND t2.sClass = 'Media'
AND t2.sMethod = 'imageThumbnail'
AND t2.sAction = 'impression'
)
LEFT JOIN tblMedia m2
ON m2.id = t2.nID
-- PRODUCTS VIEWS
LEFT JOIN tblTracker t3
ON (
t3.nUserID = u.id
AND t3.sClass = 'Product'
AND t3.sMethod = 'view'
AND t3.sAction = 'view'
)
LEFT JOIN tblMedia m3
ON m3.id = t3.nID
WHERE c.sType = 'media'
GROUP BY c.sName;
Img:
转换表t1、t2、t3,而不是使用子查询左键联接来检索计数,所以如果其他剩余表的基数允许,请删除distinct。最后,添加索引您可以解释“将服务器cpu使用率保持在80%?”的含义。查询是否永远不会完成?在查询完成后,服务器是否继续消耗cpu周期?这个查询是否真的“杀死”了MySQL服务器守护进程?你必须重新启动它吗?您知道,这是一个复杂的查询。@Ollie Jones查询本身会在一段时间后超时,但即使在超时后,cpu使用率也会在恢复正常之前保持在±80%的水平上一段时间(几分钟,有时更长)。MySQL本身仍然可以工作,服务器也可以运行,但当服务器处于这种状态时,简单的查询有时会超时。要解决此问题,重启MySQL通常就足够了。很可能是web服务器程序超时,导致查询仍在运行。不难相信如此复杂的查询可以运行数十分钟甚至更长时间<代码>显示完整进程列表发送到服务器将显示这种情况。你说得对,奥利,程序已超时,但当我运行
显示完整进程列表
时,它显示查询仍在运行。有没有办法解决这个问题?