Mysql 连接过多错误后,查询运行缓慢

Mysql 连接过多错误后,查询运行缓慢,mysql,database-connection,innodb,Mysql,Database Connection,Innodb,几天前,我在我的网站上运行了一个持久查询,这需要花费几分钟的时间才能完成(我已经运行了大约3次) 它几乎毁掉了我的数据库,一切都变慢了,当我试图从我的两个表(例如会话表和设置表,它们是我网站中使用最多的表,几乎每个页面都在使用它们)中获取数据时,我得到了1040个太多的连接,奇怪的是我没有试图通过我的网站获取数据,我正试图从phpmyadmin访问它们!这意味着那些桌子是无法到达的 不管怎么说,我关闭了网站并删除了我的会话表,但不知怎么的,它被修复了(我从未再次运行过该查询) 首先,我想知道这些

几天前,我在我的网站上运行了一个持久查询,这需要花费几分钟的时间才能完成(我已经运行了大约3次)

它几乎毁掉了我的数据库,一切都变慢了,当我试图从我的两个表(例如会话表和设置表,它们是我网站中使用最多的表,几乎每个页面都在使用它们)中获取数据时,我得到了
1040个太多的连接
,奇怪的是我没有试图通过我的网站获取数据,我正试图从phpmyadmin访问它们!这意味着那些桌子是无法到达的

不管怎么说,我关闭了网站并删除了我的会话表,但不知怎么的,它被修复了(我从未再次运行过该查询)

首先,我想知道这些表附加了什么?他们被腐蚀了吗?我知道已经达到了连接限制,但我认为我不应该在phpmyadmin中得到它

第二,也是最重要的一点是,我觉得我的查询现在运行得慢多了,尽管我不再收到那个错误,而且我的连接每页少于30个,这是不是和我收到的连接太多有关?我应该清理还是清空东西

以下是查询(每个表大约有50-60000行)


您可以通过使用
连接池来解决此问题

我不确定太多的连接问题是导致查询速度慢的原因。但是这里有一些建议可以找出查询速度慢的原因

  • 使用explain运行查询。解释[你的疑问]。通过这一点,您可以看到正在使用哪些索引,并可以找出任何需要索引的字段
  • 检查您的表是否正确索引。users.id、meta.user\u id、images.id、score\u history.content\u id和content\u type是要索引的字段
  • 确保在mysql服务器中启用了查询缓存

  • 除此之外,尝试重新使用同一连接以避免出现太多连接问题,或者在使用后始终关闭连接。

    谢谢,您的意思是我可以解决持久连接问题,这样我就不会再出现错误了,使用连接池,或者我可以通过使用连接池来克服由于该错误而导致的查询缓慢?您可以解决连接过多的错误。缓慢取决于多种原因。例如:没有索引的复杂嵌套查询,加载数据库。。。
    SELECT 
    u.id,  u.username , u.created_on , meta.full_name as fullname , meta.avatar , COUNT(s.val) as image_scores
    FROM
       users u
           LEFT JOIN meta ON (u.id = meta.user_id)
           LEFT JOIN images i ON (u.id = i.user_id)
           LEFT JOIN score_history s ON (i.id = s.content_id)and s.content_type = 'image'
    GROUP BY
       u.id
    ORDER BY
       image_scores DESC
    LIMIT 9