MySQL进程占用异常巨大的时间

时间:2015-07-19 09:39:50

标签: mysql

我有一个每小时运行一次的任务,现在已经运行了几个月。该过程从MySQL(MariaDB)获取分析并聚合数据。通常需要1-5分钟才能完成。

然而,自从13个小时前开始,它现在已经有26分钟了。我重新启动了MySQL服务器,没有任何改变。进程列表显示聚合负责很长时间(有些查询需要花费500秒才能完成,过去只需不到30秒)。

我要查询的表是2600万行。

什么可能导致处理时间突然冒出来?它已经很好地工作了很长时间!

你建议我现在做什么?数据库可能已经损坏了吗?

查询:

*************************** 2. row ***************************
      Id: 76042556
    User: -----
    Host: --------
      db: mydb
 Command: Query
    Time: 456
   State: Sending data
    Info: SELECT avg(analytics.event) AS `avg_session`, count(*) AS `count` FROM `analytics` WHERE `analytics`.`app_id` = '436' AND `analytics`.`event_type` = 'session' AND `analytics`.`created_at` >= '2015-06-19 12:16:41' AND `analytics`.`created_at` <= '2015-07-19 12:16:41' ORDER BY `analytics`.`id` ASC
Progress: 0.000

说明:

EXPLAIN EXTENDED SELECT `analytics`.`event` AS `event`, `analytics`.`created_at` AS `a_created_at`, EXTRACT(DAY FROM analytics.created_at) AS `interval`, count(analytics.id) AS `count` FROM `analytics` WHERE `analytics`.`app_id` = '436' AND `analytics`.`event_type` = 'startup' AND `analytics`.`created_at` >= '2015-06-21 09:32:41' AND `analytics`.`created_at` <= '2015-07-21 09:32:41' GROUP BY `interval` ORDER BY `a_created_at` ASC
    -> ;
+------+-------------+-----------+------+---------------+--------+---------+-------+----------+----------+----------------------------------------------+
| id   | select_type | table     | type | possible_keys | key    | key_len | ref   | rows     | filtered | Extra                                        |
+------+-------------+-----------+------+---------------+--------+---------+-------+----------+----------+----------------------------------------------+
|    1 | SIMPLE      | analytics | ref  | app_id        | app_id | 5       | const | 15236882 |   100.00 | Using where; Using temporary; Using filesort |
+------+-------------+-----------+------+---------------+--------+---------+-------+----------+----------+----------------------------------------------+
P.S:请不要告诉我如何减少长时间查询,而不是帮助我理解这个具体问题。

2 个答案:

答案 0 :(得分:0)

我认为您可以尝试:

  • 优化表格
  • 修复表 - 数据可能实际上已损坏或可能存在一些过载
  • 检查锁:可能会在表上执行更多插入操作 通过聚合查询查询(也许某些功能已经存在 最近添加,用户更经常提交表单...)

我认为索引定义良好,并且在没有您的知识的情况下,其他人不会更新数据库结构;)

答案 1 :(得分:0)

几点建议

  1. 删除Order by子句,因为它对此查询没有任何帮助
  2. 根据您的数据性质添加适当的索引。可能是app_id
  3. 如果在analytics中触发了太多更新/删除,则执行optimize table analytics。这将重新构建索引
  4. 如果您发布explain结果

    ,它会对我们有所帮助