Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询使服务器cpu使用率保持在80%_Mysql_Sql_Cpu - Fatal编程技术网

MySQL查询使服务器cpu使用率保持在80%

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

我有一个经过优化的查询,但是每次运行时服务器的cpu使用率都保持在80%。Explain显示所有表都使用了正确的索引,并且扫描的行数最少。所以我不知道是什么原因导致这个查询终止了服务器。非常感谢您的帮助

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服务器程序超时,导致查询仍在运行。不难相信如此复杂的查询可以运行数十分钟甚至更长时间<代码>显示完整进程列表发送到服务器将显示这种情况。你说得对,奥利,程序已超时,但当我运行
显示完整进程列表
时,它显示查询仍在运行。有没有办法解决这个问题?