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

Posty w temacie


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

 



RSS Aktualny czas: 23.09.2025 - 22:14