主キーを使用して 1 つのテーブルに対して 1 つの行をそれぞれ削除する 2 つの重複クエリがデッドロックする可能性があることを理解していません。誰でも説明できますか?
トランザクションの 1 つがロックを取得し、もう 1 つが待機する必要があるように思えます。
クエリを含むデッドロック レポートは次のとおりです。
Fri Jun 01 2012 13:50:23
*** (1) TRANSACTION:
TRANSACTION 3 1439005348, ACTIVE 0 sec, process no 22419, OS thread id 1166235968 starting index read
mysql tables in use 1, locked 1
LOCK WAIT 2 lock struct(s), heap size 368
MySQL thread id 125597624, query id 3426379709 node3-int 10.5.1.119 application-devel updating
DELETE FROM `SessData` WHERE `SessKey` = '87EDF1479A275557AC8280DCA78AB886'
AND `Name` = 'CurrentRequestURL'
*** (2) TRANSACTION:
TRANSACTION 3 1439005340, ACTIVE 0 sec, process no 22419, OS thread id 1234073920 starting index read, thread declared inside InnoDB 0
mysql tables in use 1, locked 1
3 lock struct(s), heap size 1216
MySQL thread id 125597622, query id 3426379705 node2-int 10.5.1.118 application-devel updating
DELETE FROM `SessData` WHERE `SessKey` = '87EDF1479A275557AC8280DCA78AB886'
AND `Name` = 'CurrentRequestURL'
*** WE ROLL BACK TRANSACTION (2)
テーブルのスキーマは次のとおりです。
CREATE TABLE `application`.`SessData` (
`SessKey` varchar(255) NOT NULL default '',
`Name` varchar(255) NOT NULL default '',
`Value` varchar(255) default NULL,
PRIMARY KEY (`SessKey`,`Name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
その他の詳細:
MySQL version: 4.1.21
Isolation level: REPEATABLE-READ
Character set on the the above columns: latin1