![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 15.07.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam, to znowu ja i jak zwykle bardzo proszę o pomoc.
Otóż mam pewien dylemat, obawiam się deadlocka (zakleszczenia) i chce go uniknąć. Zastanawiam się czy uchroni mnie przed tym unia, ponieważ blokuję rekordy SELECT .. FOR UPDATE. Chodzi mi o to czy jak wykonam polecenie typu:
a rekord o ID = 2 będzie zablokowany przez innego klienta to czy MySQL to zauważy w ten sposób, że poczeka na zablokowanie rekordu o ID = 1 by nie powstało zakleszczenie. Proszę o pomoc. Mam nadzieje, że mój problem opisałem dość dobrze i zrozumiale na tyle, że ktoś mi pomoże. Ten post edytował gamestaza 14.10.2011, 13:50:45 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
InnoDB ? Jest kilka porad w sieci i raczej nie ma większego sensu uciekać się do takich dziwacznych rozwiązań, których skutki nie do końca i nie zawsze można przewidzieć. Deadlocki można wykrywać na różne sposoby, np.
innodb_table_locks = 1 autocommit = 0 innodb_lock_wait_timeout http://dev.mysql.com/doc/refman/5.0/en/innodb-deadlocks.html http://dev.mysql.com/doc/refman/5.0/en/inn...-detection.html http://dba.stackexchange.com/questions/173...adlock-in-mysql -------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 15.07.2011 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję za pomoc już pokonaliśmy deadlock'i. W uni SELECTy są traktowane jak podzapytania, więc można się zakleszczyć podczas blokowania rekordów.. ale już sobie z tym poradziliśmy odpowiednio sortując podzapytania w odpowiednią kolejność ich wywołań.
Ten post edytował gamestaza 15.10.2011, 15:03:34 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 24.07.2025 - 15:44 |