昨天下午14:00,14:30,15:00和15:30,共出现4次从库179和主库有延迟的情况,延迟时间平均在50s左右。
在出现问题时,管理员登陆数据库服务器,通过show processlist发现从库179在顺序执行类似如下的语句:
UPDATE salesrule_coupon SET product_name='sss150307',order_amount='200000.0000' WHERE orderid='77585'
经分析,14:00,14:30,15:00和15:30这四个时间段,每分钟有大概有50条这样的update语句需要从库一个一个顺序执行,并且每条update完成时间需要1s。这样就出现了如下的现象,从库执行50条update语句就需要50s的时间,所以造成从库179和主库延迟(主库执行50条update语句可能是瞬间就能完成,因为主库的是多线程进行update,从库是单线程的)。
最后发现每条update需要1s的原因是由于走的全表扫描(explain select * from salesrule_coupon where orderid=77884发现 ),在表salesrule_coupon的orderid字段添加索引后解决。
alter table salesrule_coupon add index idx_salesrule_coupon_orderid (orderid);
这样,在执行update语句,每条仅需0.03s完成。
这是目前发现的原因,如果后期再有数据库延迟,继续观察分析。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28916011/viewspace-1819386/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28916011/viewspace-1819386/