I encountered this deadlock in my system
LATEST DETECTED DEADLOCK
------------------------
100601 8:17:41
*** (1) TRANSACTION:
TRANSACTION 0 46219915, ACTIVE 1 sec, process no 4325, OS thread id 1192118592 fetching rows
mysql tables in use 2, locked 1
LOCK WAIT 116 lock struct(s), heap size 30704, 105662 row lock(s), undo log entries 5
MySQL thread id 35700, query id 114651060 slimsjjb002.webex.com 66.114.173.114 slim Sending data
SELECT S.SERVICE, S.PURPOSE, S.SCRIPTID, S.SCRIPTNAME, S.SCRIPTCONTENT, S.COMMENTS, S.CREATOR, S.CREATETIME, S.LASTMODIFIEDTIME,
(SELECT COUNT(1) FROM SMT_EP E WHERE E.EPFORTYPE = 'SCRIPT' AND E.EPFORID = S.SCRIPTID) HASEP
FROM SMT_SCRIPT S WHERE S.SCRIPTID IN (-1,5894740) ORDER BY LOWER(S.SCRIPTNAME)
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 0 page no 214810 n bits 1056 index `PURPOSE` of table `SLIMDB`.`SMT_EP` trx id 0 46219915 lock mode S waiting
Record lock, heap no 77 PHYSICAL RECORD: n_fields 4; compact format; info bits 0
0: len 1; hex 02; asc ;; 1: len 1; hex 01; asc ;; 2: len 4; hex 8059f258; asc Y X;; 3: len 4; hex 8059f25a; asc Y Z;;
*** (2) TRANSACTION:
TRANSACTION 0 46219912, ACTIVE 1 sec, process no 4325, OS thread id 1218210112 fetching rows, thread declared inside InnoDB 160
mysql tables in use 2, locked 1
116 lock struct(s), heap size 30704, 105661 row lock(s), undo log entries 5
MySQL thread id 35697, query id 114651180 slimsjjb002.webex.com 66.114.173.114 slim Sending data
SELECT S.SERVICE, S.PURPOSE, S.SCRIPTID, S.SCRIPTNAME, S.SCRIPTCONTENT, S.COMMENTS, S.CREATOR, S.CREATETIME, S.LASTMODIFIEDTIME,
(SELECT COUNT(1) FROM SMT_EP E WHERE E.EPFORTYPE = 'SCRIPT' AND E.EPFORID = S.SCRIPTID) HASEP
FROM SMT_SCRIPT S WHERE S.SCRIPTID IN (-1,5894744) ORDER BY LOWER(S.SCRIPTNAME)
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 0 page no 214810 n bits 1056 index `PURPOSE` of table `SLIMDB`.`SMT_EP` trx id 0 46219912 lock_mode X locks rec but not gap
Record lock, heap no 77 PHYSICAL RECORD: n_fields 4; compact format; info bits 0
0: len 1; hex 02; asc ;; 1: len 1; hex 01; asc ;; 2: len 4; hex 8059f258; asc Y X;; 3: len 4; hex 8059f25a; asc Y Z;;
*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 0 page no 214810 n bits 1056 index `PURPOSE` of table `SLIMDB`.`SMT_EP` trx id 0 46219912 lock mode S waiting
Record lock, heap no 78 PHYSICAL RECORD: n_fields 4; compact format; info bits 0
0: len 1; hex 02; asc ;; 1: len 1; hex 01; asc ;; 2: len 4; hex 8059f254; asc Y T;; 3: len 4; hex 8059f256; asc Y V;;
*** WE ROLL BACK TRANSACTION (2)
------------
TRANSACTIONS
------------
mysql isolation
tx_isolation | REPEATABLE-READ
no any foreign key restriction.
and no any INSERT INTO T SELECT ... FROM S WHERE, CREATE TABLE ... SELECT ...
I want to know why these select query need S lock
LATEST DETECTED DEADLOCK
------------------------
100601 8:17:41
*** (1) TRANSACTION:
TRANSACTION 0 46219915, ACTIVE 1 sec, process no 4325, OS thread id 1192118592 fetching rows
mysql tables in use 2, locked 1
LOCK WAIT 116 lock struct(s), heap size 30704, 105662 row lock(s), undo log entries 5
MySQL thread id 35700, query id 114651060 slimsjjb002.webex.com 66.114.173.114 slim Sending data
SELECT S.SERVICE, S.PURPOSE, S.SCRIPTID, S.SCRIPTNAME, S.SCRIPTCONTENT, S.COMMENTS, S.CREATOR, S.CREATETIME, S.LASTMODIFIEDTIME,
(SELECT COUNT(1) FROM SMT_EP E WHERE E.EPFORTYPE = 'SCRIPT' AND E.EPFORID = S.SCRIPTID) HASEP
FROM SMT_SCRIPT S WHERE S.SCRIPTID IN (-1,5894740) ORDER BY LOWER(S.SCRIPTNAME)
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 0 page no 214810 n bits 1056 index `PURPOSE` of table `SLIMDB`.`SMT_EP` trx id 0 46219915 lock mode S waiting
Record lock, heap no 77 PHYSICAL RECORD: n_fields 4; compact format; info bits 0
0: len 1; hex 02; asc ;; 1: len 1; hex 01; asc ;; 2: len 4; hex 8059f258; asc Y X;; 3: len 4; hex 8059f25a; asc Y Z;;
*** (2) TRANSACTION:
TRANSACTION 0 46219912, ACTIVE 1 sec, process no 4325, OS thread id 1218210112 fetching rows, thread declared inside InnoDB 160
mysql tables in use 2, locked 1
116 lock struct(s), heap size 30704, 105661 row lock(s), undo log entries 5
MySQL thread id 35697, query id 114651180 slimsjjb002.webex.com 66.114.173.114 slim Sending data
SELECT S.SERVICE, S.PURPOSE, S.SCRIPTID, S.SCRIPTNAME, S.SCRIPTCONTENT, S.COMMENTS, S.CREATOR, S.CREATETIME, S.LASTMODIFIEDTIME,
(SELECT COUNT(1) FROM SMT_EP E WHERE E.EPFORTYPE = 'SCRIPT' AND E.EPFORID = S.SCRIPTID) HASEP
FROM SMT_SCRIPT S WHERE S.SCRIPTID IN (-1,5894744) ORDER BY LOWER(S.SCRIPTNAME)
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 0 page no 214810 n bits 1056 index `PURPOSE` of table `SLIMDB`.`SMT_EP` trx id 0 46219912 lock_mode X locks rec but not gap
Record lock, heap no 77 PHYSICAL RECORD: n_fields 4; compact format; info bits 0
0: len 1; hex 02; asc ;; 1: len 1; hex 01; asc ;; 2: len 4; hex 8059f258; asc Y X;; 3: len 4; hex 8059f25a; asc Y Z;;
*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 0 page no 214810 n bits 1056 index `PURPOSE` of table `SLIMDB`.`SMT_EP` trx id 0 46219912 lock mode S waiting
Record lock, heap no 78 PHYSICAL RECORD: n_fields 4; compact format; info bits 0
0: len 1; hex 02; asc ;; 1: len 1; hex 01; asc ;; 2: len 4; hex 8059f254; asc Y T;; 3: len 4; hex 8059f256; asc Y V;;
*** WE ROLL BACK TRANSACTION (2)
------------
TRANSACTIONS
------------
mysql isolation
tx_isolation | REPEATABLE-READ
no any foreign key restriction.
and no any INSERT INTO T SELECT ... FROM S WHERE, CREATE TABLE ... SELECT ...
I want to know why these select query need S lock