现在时间晚上8点,陪实施升级。目前已经处理完毕,本想着这次的升级是很快就能解决的。然而,却卡在了更新数据上,还是经验少啊。现在我把实施的活动叙述一下也算给自己增加一点经验教训,出升级包时也多考虑一些事情,尤其是对现网的环境。
经过实施排查后发现我们的update语句会触发一个触发器,而触发器里面的语句update时会很慢。
升级的sql:update CMS_CONTENT_PROGRAM set SEARCH_NAME=TAGS;
是不是长得很普通的一个sql啊...
sql执行过程中执行了> show processlist ;
这个是看当前跑着的sql进程,发现了它:
update CMS_PROGRAM set status=-1 where code=new.external_code;
奇怪:我们没有执行这个啊,就杀死了这个进行,我们要执行的sql却死掉了,这时候就考虑到了触发器。
show TRIGGERS \G ;
经查看,锁定目标:
于是就在原有的update语句上加了一个条件过滤掉status是 -1 的值,就很快了。
得到的教训:
如果在执行update语句之前能意识到这个问题,提前把status为-1的过滤掉,就不会出现这个问题了吧。
以后要记住了要防患于未然,原来我从来没有关注过触发器,以后我会注意的,给sql时一定要注意,尤其是大批量的更新数据时。