我有一个每小时运行一次的任务,现在已经运行了几个月。该过程从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:请不要告诉我如何减少长时间查询,而不是帮助我理解这个具体问题。
答案 0 :(得分:0)
我认为您可以尝试:
我认为索引定义良好,并且在没有您的知识的情况下,其他人不会更新数据库结构;)
答案 1 :(得分:0)
几点建议
app_id
。 analytics
中触发了太多更新/删除,则执行optimize table analytics
。这将重新构建索引如果您发布explain
结果