在太多连接错误后查询运行缓慢

时间:2013-05-31 10:05:25

标签: mysql database-connection innodb

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

它几乎杀死了我的数据库,一切都变慢了,当我试图从我的几个表中获取数据时我得到1040 too many connections(例如会话和设置表,这是我网站中最常用的表 - 几乎每个页面正在使用它们,奇怪的是我没有试图通过我的网站获取数据,我试图从phpmyadmin访问它们!这意味着那些表无法访问

我以任何方式关闭网站并删除了我的会话表,并以某种方式修复了(治愈我从未再次运行该查询)。

首先,我想知道附加到这些表的内容是什么?他们被腐化了吗?我明白达到了连接限制,但我认为我不应该在phpmyadmin中找到它。

第二个也是最重要的是我觉得我的查询现在运行得慢得多,即使我不再得到那个错误,我的连接数低于每页30个,这与我得到的太多连接错误有关吗?我应该清除还是清空一些东西!?

这是查询(每个表有大约50-60 000行)

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

2 个答案:

答案 0 :(得分:1)

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

  1. 使用explain运行查询。解释[你​​的查询]。通过这个,您可以看到正在使用的索引,您可以找出任何需要索引的字段。
  2. 检查您的表格是否正确编入索引。 users.id,meta.user_id,images.id,score_history.content_id和content_type是要编制索引的字段。
  3. 确保在mysql服务器中启用了查询缓存。
  4. 除此之外,尝试重用相同的连接以避免太多连接问题或在使用后始终关闭连接。

答案 1 :(得分:0)

您可以使用Connection Pooling

解决此问题