![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 105 Pomógł: 6 Dołączył: 7.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam ponownie,
w konsoli wydaje polecenie: Które powinno zablokować tabelę dla innych wątków zarówno odczytu jak i zapisu lub modyfikacji i zaraz potem przeładowuję stron www zawiera zapytanie SQL które wybiera dane i dane te są wybierane. Wiec jakie jest w sumie działanie tej komendy LOCK TABLES skoro można dane odczytać w innym wątku? ![]() Tabela jest typu InnoDB.... Ten post edytował Mion 29.12.2009, 11:49:48 |
|
|
![]()
Post
#2
|
|
![]() Developer Grupa: Moderatorzy Postów: 3 045 Pomógł: 290 Dołączył: 20.01.2007 ![]() |
Blokujesz tabele przed zapisem.
Zwróć uwagę na lock_type. Zresztą poczytaj sobie manual, tam wszystko jest napisane. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 105 Pomógł: 6 Dołączył: 7.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
WRITE blokuje tabele przed "Przy klauzuli WRITE jedynie aktualny wątek będzie dopuszczony do jakichkolwiek operacji na tabeli (zarówno odczytu jak i zapisu lub modyfikacji). " W tym wypadku wywołanie ze strony www powinno uruchomić inny wątek niż wątek uruchomiony z konsoli gdzie wydałem komendę...
//// Nawet jak zablokuje wszystkie tabele z konsoli wchodzące w skład zapytania lub
Mogę wygenerować stronę która wykonuje SELECT dla tych tabel. Jedynie zgodnie z oczekiwaniem działa kiedy wywołuje się komenda UPDATE dla zablokowanych tabeli - wtedy strona "czeka" na odblokowanie tabel. Jest to dosyć nieoczekiwane działanie [właściwie nie działanie] tego polecenia, a co gorsza wydaje mi się, że komendy są właściwe ![]() Ten post edytował Mion 29.12.2009, 14:10:53 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Jesteś pewien, że te dane nie idą z jakiegoś cache?
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 105 Pomógł: 6 Dołączył: 7.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
Tak
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Jaka to wersja serwera?
Nie chciałbym być sztampowy, ale "u mnie działa". |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 105 Pomógł: 6 Dołączył: 7.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
No właśnie, bo powinno dziać, ale nie działa, jedynie działa w wypadku poleceń zmieniających jak update
![]() Wersja serwera: 5.0.67 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Nie znalazłem żadnego zgłoszenia błędu dotyczącego LOCK TABLES w tej wersji.
Próbowałeś otworzyć sobie dwie konsole, w jednej zablokować tabele, a z drugiej zrobić SELECTa? |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 105 Pomógł: 6 Dołączył: 7.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
Z dwoma klientami konsolowymi nie sprawdzałem, ale sprawdzałem blokując w konsoli poleceniem:
LOCK TABLES UserZdjecia AS U WRITE, UserKonto AS UK WRITE; a tabele wywoływałem SELECT z poziomu przeglądarki www oraz programu MySQL QueryBrowset czyli z innych wątków i blokada działa tylko dla update, ale nie na select pomimo jej założenie w/w instrukcją SQL beeeee ![]() /// Po dłuższej walce z tym problemem Już wiem dlaczego tak dziwnie się działo, bo jednak ostatnie polecenia select było cachowane co zauważyłem wywolujac inną stronę z select na której już nie działało. Jeśli nie ma pobierać rekordów z'cachowanych przy włączonej blokadzie należy do klauzuli SELECT dodać SQL_NO_CACHE ![]() Ten post edytował Mion 29.12.2009, 18:41:37 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 23.06.2025 - 07:30 |