sql >> Database teknologi >  >> RDS >> Mysql

Løsning til Insert Intention Locks i MySQL

Denne deadlock-fejl er en fejl i MySQL InnoDB-motoren, som ikke er blevet rettet i 12 år. (Bug #25847:https://bugs.mysql.com/bug.php? id=25847 , løsning:Hvordan låser jeg en InnoDB-række, der ikke eksisterer endnu? ) Det er ikke relateret til Unique Key. Kørsel af denne forespørgsel vil også resultere i den samme Deadlock-fejl.

Session #1: CREATE TABLE t (id int) ENGINE=InnoDB;
Session #1: SET AUTOCOMMIT = 0;
Session #1: SELECT id FROM t WHERE id = 1 FOR UPDATE;
Session #2: SET AUTOCOMMIT = 0;
Session #2: SELECT id FROM t WHERE id = 2 FOR UPDATE;
Session #1: INSERT INTO t (id) VALUES (1); -- Hang
Session #2: INSERT INTO t (id) VALUES (2); -- Session #1: OK, Session #2: Deadlock found when trying to get lock; try restarting transaction
 

InnoDB-status er den samme:

------------------------ LATEST DETECTED DEADLOCK ------------------------ 2019-10-24 00:25:31 0x1638 *** (1) TRANSACTION: TRANSACTION 1287, ACTIVE 62 sec inserting mysql tables in use 1, locked 1 LOCK WAIT 3 lock struct(s), heap size 1136, 2 row lock(s) MySQL thread id 7, OS thread handle 9444, query id 143 localhost ::1 root update INSERT INTO t (id) VALUES (1) *** (1) WAITING FOR THIS LOCK TO BE GRANTED: RECORD LOCKS space id 23 page no 3 n bits 72 index GEN_CLUST_INDEX of table `test`.`t` trx id 1287 lock_mode X insert intention waiting Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 0 0: len 8; hex 73757072656d756d; asc supremum;; *** (2) TRANSACTION: TRANSACTION 1288, ACTIVE 19 sec inserting, thread declared inside InnoDB 5000 mysql tables in use 1, locked 1 3 lock struct(s), heap size 1136, 2 row lock(s) MySQL thread id 9, OS thread handle 5688, query id 145 localhost ::1 root update INSERT INTO t (id) VALUES (2) *** (2) HOLDS THE LOCK(S): RECORD LOCKS space id 23 page no 3 n bits 72 index GEN_CLUST_INDEX of table `test`.`t` trx id 1288 lock_mode X Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 0 0: len 8; hex 73757072656d756d; asc supremum;; *** (2) WAITING FOR THIS LOCK TO BE GRANTED: RECORD LOCKS space id 23 page no 3 n bits 72 index GEN_CLUST_INDEX of table `test`.`t` trx id 1288 lock_mode X insert intention waiting Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 0 0: len 8; hex 73757072656d756d; asc supremum;; *** WE ROLL BACK TRANSACTION (2)

  1. Brug af MariaDB Audit Plugin til databasesikkerhed

  2. Sikkerhedskopier dine MySQL-databaser

  3. Hvordan starter man spring-boot app uden at være afhængig af databasen?

  4. GUI MySQL database frontend