Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Blokowanie transakcji w MySQL, Problemy z LOCK IN SHARE MODE
d3m0n
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 29.12.2005

Ostrzeżenie: (20%)
X----


Witam serdecznie
Niedawno otworzyłem portal, który w bardzo szybkim tempie rozpoczął sie rozwijać. I wraz z ubiegiem czasu pojawiły sie problemy.

Po długich analizach zachowań doszedłem do wniosku, że problem pojawia się w transakcjach. Przedstawie prosty przykład:

Jeśli użytkownik posiada punkty to ma mu jeden odjąć i coś wykonać.

  1. <?php
  2. 1.) mysql_query("START TRANSACTION;");
  3. 2.) $query = wykonaj_sql("SELECT `ilosc_punktow` from `uzytkownicy` WHERE login = '".$login."' LIMIT 1 LOCK IN SHARE MODE");
  4. 3.) $punkty = mysql_result($query,0,0);
  5. 4.) if ($punkty == 0) {  wykonaj_sql("UPDATE `uzytkownicy` SET `ilosc_punktow` = `ilosc_punktow` - 1 WHERE login = '".$login."'"); ...Jakieś zapytanie.... }
  6. 5.) mysql_query("COMMIT;");
  7. ?>


W niektórych momentach dochodzi do sytuacji, w której dane elementy blokują sie, a mianowicie gdy chce wykonać zapytanie dotyczace tabeli `uzytkownicy`:
  1. SELECT * FROM `uzytkownicy` WHERE `login` = '$login'


Otrzmuje blad:
  1. #1205 - Lock wait timeout exceeded; try restarting transaction



Moje wnioski:
Po wykonaniu LOCK IN SHARE nastepuje np. zerwanie polaczenia przez co skrypt w danym polaczeniu nie moze wykonać "COMMIT;" odblokowywujac w ten sposób blokade na element.


Jakieś propozycje?

Z góry dziękuję i pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
rafalp
post
Post #2





Grupa: Zarejestrowani
Postów: 224
Pomógł: 18
Dołączył: 4.02.2003
Skąd: Częstochowa

Ostrzeżenie: (0%)
-----


Odświeżam bo mam taki sam problem. Czy ktoś zna powód dla którego MySQL blokuje tabele po zerwanym połączeniu tak że pomaga tylko restart silnika? Wg mnie powinien być jakiś mechanizm który po błędzie zwalniał by tabele, wszak transakcja zadziałała - pierwsze zapytania nie wykonały się jednak dalej baza staje się nieużyteczna z powodu w/w błędu.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 05:01