免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3606 | 回复: 15
打印 上一主题 下一主题

[求助!!]mysql group by 查询 cpu占用率100% [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-03-15 11:07 |只看该作者 |倒序浏览
我先把问题描述一下,mysql不是很熟,请教各位高手了:)
mysql 里有一表:(目前60个字段,有需要会动态增加,主键 reporttime,hostip )
mysql> desc QGG_Info;
+---------------+------------------+------+-----+---------+-------+
| Field         | Type             | Null | Key | Default | Extra |
+---------------+------------------+------+-----+---------+-------+
| hostip        | varchar(15)      |      | PRI |         |       |
| reporttime    | varchar(12)      |      | PRI |         |       |
| data_40020100 | int(11) unsigned | YES  |     | NULL    |       |
| data_40020200 | int(11) unsigned | YES  |     | NULL    |       |
| data_40020300 | int(11) unsigned | YES  |     | NULL    |       |

+---------------+------------------+------+-----+---------+-------+
60 rows in set (0.02 sec)

该表大概有200w条数据

当我在控制台执行该条sql语句的时候 发现cpu使用率几乎100%
mysql> select sum(data_40023500),reporttime from QGG_Info where data_40023500 is not null  group by reporttime order by reporttime desc limit 3,1;
+--------------------+--------------+
| sum(data_40023500) | reporttime   |
+--------------------+--------------+
|              87537 | 200603151057 |
+--------------------+--------------+
1 row in set (10.81 sec)


  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                               
8685 root      14   0  455m 262m 247m R 99.9 13.0  39:47.52 mysqld                                                                 
12528 root      16   0  1008 1008  772 R  9.1  0.0   0:02.69 top                                                                    
25819 root       9   0  1948 1712 1096 S  0.6  0.1   0:39.71 manager                                                               
25824 root       9   0  1948 1712 1096 S  0.6  0.1   0:38.93 manager                                                               
25822 root       9   0  1948 1712 1096 S  0.3  0.1   0:39.55 manager  

///////////////////////////////////////////////////////////////////////////////////////////////////////////////
show processlist;
+-------+------+--------------------+-------+---------+------+----------------------+------------------------------------------------------------------------------------------------------+
| Id    | User | Host               | db    | Command | Time | State                | Info                                                                                                 |
+-------+------+--------------------+-------+---------+------+----------------------+------------------------------------------------------------------------------------------------------+
| 22218 | root | IedOssBak1:54815   | stat  | Sleep   |    1 |                      | NULL                                                                                                 |
| 22219 | root | IedOssBak1:54816   | stat  | Sleep   |    7 |                      | NULL                                                                                                 |
| 22220 | root | IedOssBak1:54817   | stat  | Sleep   |    1 |                      | NULL                                                                                                 |
| 22221 | root | IedOssBak1:54818   | stat  | Sleep   |   41 |                      | NULL                                                                                                 |
| 22222 | root | IedOssBak1:54819   | stat  | Sleep   |   31 |                      | NULL                                                                                                 |
| 22223 | root | IedOssBak1:54820   | stat  | Sleep   |   21 |                      | NULL                                                                                                 |
| 37132 | root | localhost          | NULL  | Query   |    0 | NULL                 | show processlist                                                                                     |
| 37444 | root | localhost| qqpet | Query   |    7 | Copying to tmp table | select sum(data_40023500),reporttime from QGG_Info where data_40023500 is not null  group by reportt |
+-------+------+--------------------+-------+---------+------+----------------------+------------------------------------------------------------------------------------------------------+
8 rows in set (0.00 sec)


可以确认就是这条sql 语句引起的,请问高手们是什么原因呢?怎样解决??多谢了

论坛徽章:
0
2 [报告]
发表于 2006-03-15 11:32 |只看该作者
10秒钟,它遍历一遍你的数据库,200万条记录,把所有非NULL数据取出来并且汇总金额。我想差不多吧。

论坛徽章:
0
3 [报告]
发表于 2006-03-15 11:38 |只看该作者
给 where 后面用到的字段加上索引试试。

论坛徽章:
0
4 [报告]
发表于 2006-03-15 11:53 |只看该作者
to 楼上兄台,换成这个了
select sum(data_40023500),reporttime from QGG_Info  group by reporttime order by reporttime desc limit 3,1;

还是一样的,占用99.99%

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                               
3954 root      14   0  457m 259m 241m R 99.9 12.8  42:18.59 mysqld                                                                 
3958 root      15   0  457m 259m 241m R 13.4 12.8  30:02.87 mysqld

论坛徽章:
0
5 [报告]
发表于 2006-03-15 11:57 |只看该作者
不知道是不是还要 优化mysql?

论坛徽章:
0
6 [报告]
发表于 2006-03-15 12:03 |只看该作者
原帖由 hycoment 于 2006-3-15 11:53 发表
to 楼上兄台,换成这个了
select sum(data_40023500),reporttime from QGG_Info  group by reporttime order by reporttime desc limit 3,1;

还是一样的,占用99.99%

Sorry 啊,我看错了。我开始以为你问的是用时10秒钟觉得太长。
占用CPU,我不清楚了,我平时也没注意过。
其实,我上面说加索引应该也没用,因为你本意就是加总所有记录,所以它一定要遍历每一条记录的。

论坛徽章:
0
7 [报告]
发表于 2006-03-15 12:35 |只看该作者
原帖由 rardge 于 2006-3-15 12:03 发表

Sorry 啊,我看错了。我开始以为你问的是用时10秒钟觉得太长。
占用CPU,我不清楚了,我平时也没注意过。
其实,我上面说加索引应该也没用,因为你本意就是加总所有记录,所以它一定要遍历每一条记录的。


感谢rardge兄台,在线等。。。 不知道占用率这么高,算不算问题啊??

论坛徽章:
0
8 [报告]
发表于 2006-03-15 15:30 |只看该作者
我觉得不是问题,暂用率高只是MYSQL尽可能调用空闲资源来进行查询

只要查询过后马上把CPU空出来就是正常的吧,这是个人理解,高手指点

论坛徽章:
0
9 [报告]
发表于 2006-03-16 08:58 |只看该作者
先用explain分析一下你的查询语句,把结果贴上来

论坛徽章:
0
10 [报告]
发表于 2006-03-16 13:13 |只看该作者
原帖由 yejr 于 2006-3-16 08:58 发表
先用explain分析一下你的查询语句,把结果贴上来


mysql> explain select sum(data_40023500),reporttime from QGG_Info  group by reporttime order by reporttime desc limit 3,1;
+----+-------------+----------+------+---------------+------+---------+------+---------+---------------------------------+
| id | select_type | table    | type | possible_keys | key  | key_len | ref  | rows    | Extra                           |
+----+-------------+----------+------+---------------+------+---------+------+---------+---------------------------------+
|  1 | SIMPLE      | QGG_Info | ALL  | NULL          | NULL |    NULL | NULL | 1688136 | Using temporary; Using filesort |
+----+-------------+----------+------+---------------+------+---------+------+---------+---------------------------------+
1 row in set (0.00 sec)

兄台看看先!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP