Sample Header Ad - 728x90

Mysql Deadlock in Stored Procedure,composite unique key

1 vote
0 answers
580 views
I have a table with composite unique key(uniqueness on combination of 3 columns.) Table structure: CREATE TABLE userreview ( cid bigint(12) unsigned NOT NULL, conid bigint(12) unsigned NOT NULL, userid bigint(12) unsigned NOT NULL, flag int(12) unsigned NOT NULL DEFAULT '0', updatedat timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), UNIQUE KEY idx_userreview_cid_conid_userid (cid,conid,userid) ) ; Below is stored procedure . CREATE PROCEDURE testdeadlock(IN pconid BIGINT(12), IN pcid BIGINT(12), IN puserid BIGINT(12),IN pflag INT(1)) BEGIN DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING BEGIN ROLLBACK; RESIGNAL; END; START TRANSACTION; IF pflag = 1 THEN INSERT ignore into userreview(cid,conid,userid,flag) VALUES(pcid,pconid,puserid,1) ON DUPLICATE KEY UPDATE flag = 1; /*update operation in table 1*/ ELSEIF pflag = 0 THEN INSERT ignore into userreview(cid,conid,userid) VALUES(pcid,pconid,puserid) ON DUPLICATE KEY UPDATE flag = 0; /*update operation in table 2*/ ELSEIF pflag = 2 THEN INSERT ignore into userreview(cid,conid,userid) VALUES(pcid,pconid,puserid) ON DUPLICATE KEY UPDATE flag = 2; /*update operation in table 3*/ end if; COMMIT; end; When this procedure is executing from client side(using node.js),sometime it occurs deadlock when concurrent transactions are going to execute on same rows.Though there is unique index still facing deadlock problem. Is there any suggestion to avoid deadlock? Deadlock result:- LATEST DETECTED DEADLOCK ------------------------ 2018-07-06 16:55:51 0x2b0b08e99700 *** (1) TRANSACTION: TRANSACTION 102648166, ACTIVE 0 sec inserting mysql tables in use 2, locked 2 LOCK WAIT 2 lock struct(s), heap size 1136, 1 row lock(s) MySQL thread id 108948, OS thread handle 47323865503488, query id 242017676 10.0.3.130 numbertankroot update INSERT ignore into userreview(cid,conid,userid,flag) VALUES( NAME_CONST('pcid',8157), NAME_CONST('pconid',3158), NAME_CONST('puserid',85217)) ON DUPLICATE KEY UPDATE flag = 0 *** (1) WAITING FOR THIS LOCK TO BE GRANTED: RECORD LOCKS space id 735 page no 17308 n bits 256 index idx_userreview_cid_conid_userid of table userreview trx id 102648166 lock_mode X waiting Record lock, heap no 183 PHYSICAL RECORD: n_fields 15; compact format; info bits 0 0: len 8; hex 0000000000001fdd; asc ;; 1: len 8; hex 000000000005af9f; asc ;; 2: len 8; hex 00000000000bd0b7; asc ;; 3: len 6; hex 0000061e4965; asc Ie;; 4: len 7; hex 2800000eb42873; asc ( (s;; 5: len 1; hex 80; asc ;; 6: len 1; hex 84; asc ;; 7: len 4; hex 00000001; asc ;; 8: len 1; hex 01; asc ;; 9: len 8; hex 0000000000001fdd; asc ;; 10: len 4; hex 00000000; asc ;; 11: len 4; hex 00000000; asc ;; 12: len 4; hex 00000001; asc ;; 13: len 6; hex 5b3f9f170000; asc [? ;; 14: len 6; hex 5b3f9f17213e; asc [? !>;; *** (2) TRANSACTION: TRANSACTION 102648170, ACTIVE 0 sec inserting mysql tables in use 2, locked 2 4 lock struct(s), heap size 1136, 2 row lock(s) MySQL thread id 108960, OS thread handle 47326394160896, query id 242017689 10.0.3.130 numbertankroot update INSERT ignore into userreview(cid,conid,userid,flag) VALUES( NAME_CONST('pcid',8157), NAME_CONST('pconid',3158), NAME_CONST('puserid',85217)) ON DUPLICATE KEY UPDATE flag = 1 *** (2) HOLDS THE LOCK(S): RECORD LOCKS space id 735 page no 17308 n bits 256 index idx_userreview_cid_conid_userid of table userreview trx id 102648170 lock mode S locks rec but not gap Record lock, heap no 183 PHYSICAL RECORD: n_fields 15; compact format; info bits 0 0: len 8; hex 0000000000001fdd; asc ;; 1: len 8; hex 000000000005af9f; asc ;; 2: len 8; hex 00000000000bd0b7; asc ;; 3: len 6; hex 0000061e4965; asc Ie;; 4: len 7; hex 2800000eb42873; asc ( (s;; 5: len 1; hex 80; asc ;; 6: len 1; hex 84; asc ;; 7: len 4; hex 00000001; asc ;; 8: len 1; hex 01; asc ;; 9: len 8; hex 0000000000001fdd; asc ;; 10: len 4; hex 00000000; asc ;; 11: len 4; hex 00000000; asc ;; 12: len 4; hex 00000001; asc ;; 13: len 6; hex 5b3f9f170000; asc [? ;; 14: len 6; hex 5b3f9f17213e; asc [? !>;; *** (2) WAITING FOR THIS LOCK TO BE GRANTED: RECORD LOCKS space id 735 page no 17308 n bits 256 index idx_userreview_cid_conid_userid of table userreview trx id 102648170 lock_mode X waiting Record lock, heap no 183 PHYSICAL RECORD: n_fields 15; compact format; info bits 0 0: len 8; hex 0000000000001fdd; asc ;; 1: len 8; hex 000000000005af9f; asc ;; 2: len 8; hex 00000000000bd0b7; asc ;; 3: len 6; hex 0000061e4965; asc Ie;; 4: len 7; hex 2800000eb42873; asc ( (s;; 5: len 1; hex 80; asc ;; 6: len 1; hex 84; asc ;; 7: len 4; hex 00000001; asc ;; 8: len 1; hex 01; asc ;; 9: len 8; hex 0000000000001fdd; asc ;; 10: len 4; hex 00000000; asc ;; 11: len 4; hex 00000000; asc ;; 12: len 4; hex 00000001; asc ;; 13: len 6; hex 5b3f9f170000; asc [? ;; 14: len 6; hex 5b3f9f17213e; asc [? !>;; *** WE ROLL BACK TRANSACTION (1)
Asked by 5a01d01P (135 rep)
Jul 19, 2018, 05:36 AM