【问题标题】:queries are running slow after Too many connections error连接太多错误后查询运行缓慢
【发布时间】:2013-05-31 10:05:24
【问题描述】:

几天前,我在我的网站上运行了持续查询,这需要很长时间才能完成(我已经运行了大约 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

【问题讨论】:

    标签: mysql database-connection innodb


    【解决方案1】:

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

    1. 使用说明运行查询。解释[您的查询]。通过这种方式,您可以看到正在使用哪些索引,并且您可以找出任何需要索引的字段。
    2. 检查您的表是否正确编入索引。 users.id、meta.user_id、images.id、score_history.content_id 和 content_type 是要索引的字段。
    3. 确保在您的 mysql 服务器中启用了查询缓存。

    除此之外,尽量重复使用同一个连接,避免连接过多的问题或使用后总是关闭连接。

    【讨论】:

      【解决方案2】:

      你可以通过Connection Pooling解决这个问题

      【讨论】:

      • 谢谢,你的意思是我可以解决持久连接问题,所以我不会再收到错误,使用连接池,或者我可以通过使用连接来解决由于该错误导致的查询缓慢池化?
      • 可以解决连接数过多的错误。缓慢取决于多种原因。例如:没有索引的复杂嵌套查询,加载数据库...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-13
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      • 1970-01-01
      • 2021-11-04
      相关资源
      最近更新 更多