Professional Documents
Culture Documents
05 Exemple Extra Tranzactii Si Deadlock
05 Exemple Extra Tranzactii Si Deadlock
html
pentru a crea 2 sesiuni, este nevoie sa creeat 2 conexiuni diferite din workbench
Exemplul 1:
Sesiunea 1:
START TRANSACTION;
Sesiunea 2:
START TRANSACTION;
Exemplul 2:
use deadlocks;
1
-- session 1 session 2
-----------------------------------------------------------------------
-
BEGIN;
-----------------------------------------------------------------------
-
BEGIN;
-----------------------------------------------------------------------
-
INSERT INTO foo VALUES (1);
-----------------------------------------------------------------------
-
INSERT INTO foo VALUES (2);
-----------------------------------------------------------------------
-
UPDATE foo SET id = 2 WHERE id = 1;
-----------------------------------------------------------------------
-
UPDATE foo SET id = 4 WHERE id =
2;
Exemplul 3
2
CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES U(id) ON DELETE
CASCADE
);
BEGIN; -- A
BEGIN; -- B
INSERT INTO O VALUES (1, 'a'); -- A
INSERT INTO O VALUES (2, 'b'); -- B
SAVEPOINT s_a; -- A
SAVEPOINT s_b; -- B
SELECT * FROM OU WHERE object_id = 1 FOR UPDATE; -- A
SELECT * FROM OU WHERE object_id = 2 FOR UPDATE; -- B
INSERT INTO OU(object_id, user_id) VALUES (1, 1); -- A
INSERT INTO OU(object_id, user_id) VALUES (2, 1); -- B
Rezultat:
16:24:04 INSERT INTO OU(object_id, user_id) VALUES (2, 1) Error Code: 1213. Deadlock
found when trying to get lock; try restarting transaction 0.015 sec
select @@innodb_print_all_deadlocks;
3
SHOW ENGINE INNODB STATUS;
------------------------
------------------------
LOCK WAIT 5 lock struct(s), heap size 1128, 3 row lock(s), undo log entries 2
MySQL thread id 16, OS thread handle 12876, query id 1546 localhost ::1 root update
RECORD LOCKS space id 268 page no 5 n bits 72 index fk_object_id of table `deadlock`.`ou` trx id 54511
lock_mode X
Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 0
RECORD LOCKS space id 268 page no 5 n bits 72 index fk_object_id of table `deadlock`.`ou` trx id 54511
lock_mode X insert intention waiting
Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 0
4
mysql tables in use 1, locked 1
LOCK WAIT 5 lock struct(s), heap size 1128, 4 row lock(s), undo log entries 2
MySQL thread id 18, OS thread handle 6536, query id 1548 localhost ::1 root update
RECORD LOCKS space id 268 page no 5 n bits 72 index fk_object_id of table `deadlock`.`ou` trx id 54512
lock_mode X
Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 0
RECORD LOCKS space id 268 page no 5 n bits 72 index fk_object_id of table `deadlock`.`ou` trx id 54512
lock_mode X insert intention waiting
Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 0
https://blog.renoki.org/understanding-lockforupdate-and-sharedlock-in-laravel