免费注册 查看新帖 |

Chinaunix

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

mysql从数据库update非常慢.导致大量select等待中. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-11 10:47 |只看该作者 |倒序浏览
mysql从数据库,进行统计的,里面某些表有200W 300W数据,用户表每天新增5K-10K,订单表也是5K以上.

这个从数据库可以让用户进行实时的查看当天的利润,这个SELECT语句,非常没有效率的.


主库执行update很快,也用到了索引,可是当这个update在从库上执行时即变得非常慢,当时大量select实时统计无法进行.这具体是什么原因.[code]| 2   | system user |                    | GO | Connect | 66   | Locked                           | update jiuder_order set is_se
nd=1,express_id=1,express_name='圆é

论坛徽章:
0
2 [报告]
发表于 2011-11-11 10:57 |只看该作者
回复 1# todayhero


    你是说主库很快,从库很慢? 将update转化为相关的select语句,然后explain主库和从库看看两者的执行计划有什么分别,以及两边的索引分布等等/

论坛徽章:
0
3 [报告]
发表于 2011-11-11 12:59 |只看该作者
Locked  by some query

论坛徽章:
0
4 [报告]
发表于 2011-11-11 14:14 |只看该作者
本帖最后由 todayhero 于 2011-11-11 14:16 编辑

回复 3# justlooks


   
| 2   | system user |                     | GG | Connect | 234  | Locked                           | UPDATE  jiuder_order  SET  s
electbank='', buynum='1', uid='2287725', username='dontgo', email='54967 |
| 621 | stats       | 192.168.1.101:12445 | GG | Query   | 122  | Sending data                     | select  FROM_UNIXTIME( payti
me, '%Y-%m-%d' ) as isdate , sum(buynum) as quantity,sum(costprice) as a |
| 624 | stats       | 192.168.1.101:12488 | GG | Query   | 106  | Locked                           | SELECT sum(return_num) as to
tal FROM jiuder_order   WHERE status in(3,4)  AND  gid=10037 AND isdelet |
| 632 | stats       | 192.168.1.101:12596 | GG | Query   | 59   | Locked                           | SELECT count(orderid) as tot
al FROM jiuder_order                                                     |
| 635 | stats       | 192.168.1.101:12652 | GG | Query   | 47   | Locked                           | SELECT count(orderid) as tot
al FROM jiuder_order                                                     |
| 636 | stats       | 192.168.1.101:12679 | GG | Query   | 43   | Locked                           | SELECT sum(payprice) as shis
hou,sum(costprice+fare) as yingshou,sum((saleprice-cost)*       buynum) as lir |
| 638 | stats       | 192.168.1.101:12685 | GG | Query   | 42   | Locked                           | SELECT count(orderid) as tot
al FROM jiuder_order                                                     |


从上面的show processlist来看,是由于update导致lock,然后select无法执行的吧?
而不是因为select导致lock.引起update无法执行的.
update实际测试的时候,速度很快,我认为update不会导致lock

应该是这样理解吧!

论坛徽章:
0
5 [报告]
发表于 2011-11-11 14:18 |只看该作者
表锁了,或看看表的存储引擎,或innodb_flush_log_at_trx_commit参数的值,或磁盘的情况如raid几,或show full processlist时的连接sql情况

论坛徽章:
0
6 [报告]
发表于 2011-11-11 14:36 |只看该作者
本帖最后由 todayhero 于 2011-11-11 14:37 编辑

回复 3# justlooks


    谢谢明白了.


Sending data  这个告诉我了,当前正在执行这个语句.

然后出现update导致锁表,其它的SELECT也要等UPDATE完成,才能进行select

论坛徽章:
0
7 [报告]
发表于 2011-11-11 17:29 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2011-11-11 18:24 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
9 [报告]
发表于 2011-11-14 14:45 |只看该作者
GO | Connect | 66   | Locked  

出现锁等待很严重,应该不是InnoDB引擎,而是MyISAM引擎,建议修改为InnoDB引擎,并且检查下:
Innodb_buffer_pool_size的大小,以及把丛库的相关参数:sort_buffer_size,read_buffer_size,join_buffer_size等适当地调大.....加速查询语句的执行速度...

合理的索引是必须要创建的,另外估计是你从机的机器性能差或引擎转换了使用而总体导致服务器压力大

论坛徽章:
0
10 [报告]
发表于 2011-11-14 17:52 |只看该作者
回复 9# eugene_jin


    我的从库是进行实时注册用户统计的和利润统计的,where字母中用到函数,不管用innodb还是myisam表,都是表锁的.不会是行锁的.


我用的myisam表.innodb的行锁,也是根据索引来的,这个实时统计,条件中带了函数.行锁是用不到的.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP