关于MYSQL 死锁的问题 Deadlock found when trying to get lock; try restarting ..........
时间:2011-07-16
来源:互联网
定时执行的MYSQL 存储过程报错:
Deadlock found when trying to get lock; try restarting transaction
这个错误是在MYSQL 的错误日志中看到的, 不知道要从哪里开始入手解决这个问题。 暂时没发现这个错误对业务逻辑有什么影响,求高手指点。 贴出过程代码如下:
SQL code
Deadlock found when trying to get lock; try restarting transaction
这个错误是在MYSQL 的错误日志中看到的, 不知道要从哪里开始入手解决这个问题。 暂时没发现这个错误对业务逻辑有什么影响,求高手指点。 贴出过程代码如下:
SQL code
DELIMITER $$ USE `sms`$$ DROP PROCEDURE IF EXISTS `proc_passout`$$ CREATE DEFINER=`root`@`%` PROCEDURE `proc_passout`() BEGIN DECLARE flag_lt INT(4); DECLARE flag_dx INT(4); DECLARE flag_yd INT(4); DECLARE flag INT(4) DEFAULT 0; DECLARE allflag INT(4); DECLARE cont_flag INT(4); DECLARE cont_deliverflag INT; DECLARE i_oid VARCHAR(20) DEFAULT 0; DECLARE tmpName VARCHAR(20) DEFAULT '' ; DECLARE selectmoid CURSOR FOR SELECT oid FROM cont WHERE DELIVERFLAG=5 ORDER BY oid ASC LIMIT 100; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET tmpName = NULL; /*=========================*/ SET cont_deliverflag=9; OPEN selectmoid; FETCH selectmoid INTO i_oid; /*处理黑名单*/ SET autocommit=0; UPDATE mt a,blacklist b SET a.deliverflag=1,a.delivertime=LEFT(NOW()+0,14),a.msgid='blacklist' WHERE a.phone=b.phone AND a.moid=i_oid; COMMIT; /*=========================*/ WHILE ( tmpName IS NOT NULL) DO /*===========联通========*/ SELECT COUNT(*) INTO flag_lt FROM mt WHERE moid=i_oid AND SUBSTR(phone,1,3) IN(SELECT subphone FROM telcom WHERE TYPE IN(2)); /*==========电信==========*/ SELECT COUNT(*) INTO flag_dx FROM mt WHERE moid=i_oid AND SUBSTR(phone,1,3) IN(SELECT subphone FROM telcom WHERE TYPE IN(3)); /*============总数=========*/ SELECT COUNT(*) INTO allflag FROM mt WHERE moid=i_oid; IF flag_lt=allflag THEN #全是联通号 UPDATE cont SET channelid=1,deliverflag=cont_deliverflag WHERE oid=i_oid; SET flag =1; ELSEIF flag_dx=allflag THEN #全是电信号 UPDATE cont SET channelid=10,deliverflag=cont_deliverflag WHERE oid=i_oid ; SET flag=1; ELSE /*处理联通号码*/ IF flag_lt>0 AND flag=0 THEN SET @moid=seq('cont'); SET autocommit=0; UPDATE mt SET moid=@moid WHERE moid=i_oid AND SUBSTR(phone,1,3) IN(SELECT subphone FROM telcom WHERE TYPE IN(2)); INSERT INTO cont(putintime,Oid, MsgType, MsgCont, ChannelId, ChName, ChPassword, SpNumber,DeliverFlag,PRIORITY) SELECT PUTINTIME,@moid,MSGTYPE,MSGCONT,1,CHNAME,CHPASSWORD,SPNUMBER,cont_deliverflag,PRIORITY FROM cont WHERE oid=i_oid AND DELIVERFLAG=5; COMMIT; END IF; /*处理CDMA号码*/ IF flag_dx>0 AND flag=0 THEN SET @moid=seq('cont'); SET autocommit=0; UPDATE mt SET moid=@moid WHERE moid=i_oid AND SUBSTR(phone,1,3) IN(SELECT subphone FROM telcom WHERE TYPE IN(3)); INSERT INTO cont(putintime,Oid, MsgType, MsgCont, ChannelId, ChName, ChPassword, SpNumber,DeliverFlag,PRIORITY) SELECT PUTINTIME,@moid,MSGTYPE,MSGCONT,10,CHNAME,CHPASSWORD,SPNUMBER,cont_deliverflag,PRIORITY FROM cont WHERE oid=i_oid AND DELIVERFLAG=5; COMMIT; END IF; END IF; SELECT COUNT(*) INTO flag_yd FROM mt WHERE moid=i_oid AND SUBSTR(phone,1,3) IN(SELECT subphone FROM telcom WHERE TYPE IN(2,3)); /*处理移动号码*/ IF flag_yd=0 THEN SET autocommit=0; UPDATE cont SET DELIVERFLAG=cont_deliverflag WHERE cont.OID=i_oid AND DELIVERFLAG=5; COMMIT; END IF; FETCH selectmoid INTO i_oid; END WHILE; CLOSE selectmoid; END$$ DELIMITER ;
作者: xiaoping117 发布时间: 2011-07-16
自己顶一个先,怎么没人回答啊
作者: xiaoping117 发布时间: 2011-07-17
show engine innodb status
只里面得laster detected deadlock可以看到最近造成死锁的两条sql是什么
只里面得laster detected deadlock可以看到最近造成死锁的两条sql是什么
作者: rucypli 发布时间: 2011-07-17
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28