![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 5.01.2006 Skąd: Kraków Ostrzeżenie: (10%) ![]() ![]() |
Witam.
Potrzebuję kilka przykładów jak wywołać taki błąd w mysql?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Pilne. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 188 Pomógł: 0 Dołączył: 23.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
Aaaa no glupi jestem. Wiem co to zakleszczenie ale jakos w kontekscie mysql mi sie zapomnialo (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) . Podany przyklad przez ~mike_mecha jest ok, z tym, ze w normalnych skryptach "dobrze" zaprojektowanych dla kazdego BEGIN masz ROLLBACK lub COMMIT. I teraz sprawa jest taka, ze nie gwarantuje to, ze taki deadlock nie wystapi. Klasyczny deadlock wystapi, jesli proces A zalozyh blokade na zasob ZA, proces B zalozy blokade na zasob ZB i teraz proces A probuje zalozyc blokade na zasob ZB (ale musi poczekac, az proces B ja sciagnie), zas proces B chce zalozyc blokade na zasob ZA (ale musi poczekac, az proces A ja sciagnie). I wtedy powstanie takie zakleszczenie.
Probowalem przed chwila ulepszyc przyklad podany przez ~mike_mecha w ten spsob, ze wlaczylem sobie 2 konsole. Na obu z nich rozpoczalem transakcje (BEGIN;), potem na konsoli A zrobilem update tabeli X, zas na konsoli B update tabeli Y. Pozniej chcialem zamienic update'y (na konsoli A update tabeli Y, na konsoli B update tabeli X) i o dziwo dostalem komunikat: Cytat update AKTUALNY_SEZON set ID_SEZONU=1 where ID_SEZONU=1; ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction Nie wiem wiec, czy mozna taki deadlock wywolac w mysql, czy zabezpieczyli sie przed tym sprawdzajac taki graf procesow i zasobow. Ten post edytował Radarek 20.01.2006, 19:50:41 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 10.10.2025 - 16:26 |