MySQL陷入了排序状态

时间:2013-07-17 19:52:11

标签: mysql

最近我的网站出现问题,mysql负载达到800%,大多数查询都停留在“排序结果”集中。

问题是我做了一个测试。具有1个结果集的相同查询,排序花费了9,8秒而没有花费0.02秒。该查询包含条件和分组的位置。

sql已经过优化,搜索是在索引字段中进行的,一切都很顺利,直到几天前。没有流量高峰,没有代码更改,没有。

您过去是否遇到此问题,或者您是否知道如何解决此问题?

由于

编辑: 查询的解释:

           id: 1
  select_type: SIMPLE
        table: m
         type: range
possible_keys: posterid_to_idx,to,poster_id
          key: posterid_to_idx
      key_len: 8
          ref: NULL
         rows: 6
        Extra: Using where; Using filesort

同样,相同的查询在几天前工作得很好。

  `id` int(11) NOT NULL AUTO_INCREMENT,
  `body` longtext NOT NULL,
  `poster_id` int(11) NOT NULL,
  `poster_name` varchar(50) NOT NULL,
  `to` int(11) NOT NULL,
  `added` int(11) NOT NULL,
  `picture` varchar(64) NOT NULL,
  `folder` int(11) DEFAULT NULL,
  `read` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `posterid_to_idx` (`poster_id`,`to`),
  KEY `to` (`to`),
  KEY `poster_id` (`poster_id`),
  KEY `msg` (`id`,`poster_id`,`to`),
  KEY `added` (`added`)
) ENGINE=InnoDB AUTO_INCREMENT=37548617 DEFAULT CHARSET=latin1

    SELECT SQL_CALC_FOUND_ROWS m.body, m.id,  m.poster_id, m.poster_name, m.to, m.added, m.picture, m.folder
FROM messages m
WHERE  ((m.poster_id = '1885585' OR m.poster_id = '1886341') 
      AND (m.to = '1886341' OR m.to = '1885585'))                 
ORDER BY m.id DESC                 LIMIT 0, 10

最高输出:

CPU:  6.0% user,  0.0% nice, 38.8% system,  0.2% interrupt, 55.0% idle
Mem: 11G Active, 1400M Inact, 5451M Wired, 87M Cache, 4923M Buf, 29G Free
Swap: 8000M Total, 8000M Free

1 个答案:

答案 0 :(得分:1)

所以经过my.cnf的大量试用后,我通过以下方式解决了问题:

  1. 降低查询缓存值

  2. 减少密钥缓冲区值

  3. 减少tmp表值

  4. 已停用的效果架构

  5. 我刚刚测试了各种配置并且知道完全流量(大约6k人在线)我的mysql保持50%的负载,这非常棒。没有sql或修改,只是innodb调整。

    不确定这是否是具有相同问题的人的答案,但至少是我的答案。

    在my.cnf

    query_cache_limit=128M
    query_cache_size=128M
    query_cache_type=1
    key_buffer_size=128M
    tmp_table_size=64M
    performance_schema=off