2015-11-10 17 views
5

Korzystanie Python ja konsekwentnie otrzymuję błądPython3 - Przekroczono limit czasu oczekiwania na blokadę; spróbuj ponownie uruchomić transakcję”i przetwarzać tylko na bazie

(1205, 'Lock wait timeout exceeded; try restarting transaction') 

gdy próbuję wstawić do konkretnej tabeli. Jednak kiedy próbuję wstawić bezpośrednio z konsoli MySQL, działa dobrze. Przeglądanie bazy danych nie powoduje żadnych innych aktywnych zapytań w bazie danych. Ponieważ jest to baza danych deweloperów bez podłączonych aplikacji na żywo, nie mogę wyobrazić sobie żadnego problemu. Jednak jest on obsługiwany na serwerze, na którym znajdują się nasze bazy danych produkcji, więc zdecydowanie wolę nie resetować, jeśli to możliwe. Wszelkie porady dotyczące debugowania tego?

Uwaga Gdybym zobaczyć zapytanie prowadzony przeciwko bazy danych przy użyciu Pokaż pełny processlist, że ostatecznie zakończy się powyższego komunikatu, a następnie włóż ją ręcznie z konsoli MySQL, to działa zgodnie z oczekiwaniami.

EDIT Oto przykład zapytania:

INSERT INTO deals (user_ID, store_ID, storeChain_ID, title, dealSaving, 
dealDisclaimer, restriction, dealImage, dealURL, submit_ID, userProvider_ID, 
createDate, createDateTime, expirationDate, expirationDateTime, ZIP, STATE, 
city, businessType, DealType_ID, IP, rating, popular, dealSearchData, tag, 
submitName, provider_dealID) 
VALUES (NULL, 
     2651049, 
     NULL, 
     'Toronto East Community Arts Program', 
     'Three-Week Photography Workshop', 
     NULL, 
     NULL, 
     'https://a1.image.net/imgs/8423535b-bd3b-4e1e-afee-ab2869970a4c/700_q60.jpg', 
     'https://www.exmples.com/deals/1336374', 
     111, 
     1, 
     '2015-11-12', 
     '2015-11-12 10:01:58.282826', 
     '2015-11-17 09:59:59', 
     '2015-11-17 23:59:00', 
     'M4M 1K7', 
     'ON', 
     'Toronto', 
     NULL, 
     '1', 
     '127.0.0.1', 
     0, 
     144565, 
     'Three-Week Photography Workshop', 
     'Photography Class', 
     'Partner', 
     1336374) 

Edit Przykładem pomocą sugestia jest następująca:

self.DB['master']['cursor'].execute("SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED") 
self.DB['master']['con'].commit() 
self.DB['master']['cursor'].execute(dealsquery,data) 
self.DB['master']['con'].commit() 
+0

możesz pokazać swoje zapytanie python? – Busturdust

+0

Dodałem przykładowe zapytanie – user2694306

+0

Czy pracujesz z wieloma wątkami.? –

Odpowiedz

0

I Believe MySql używa „powtarzalny Odczyt "izolacja, która będzie posiadać blokadę dla CAŁKOWITEJ transakcji (aka aż do zatwierdzenia, wierzę). spróbuj użyć innej opcji jak izolację "Read Committed"

Aby ustawić czytać zaangażowani w python mysql jest coś takiego jak

cur = conn.cursor() cur.execute("SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED")

EDIT: dobrym źródłem wprowadzające do poziomów izolacji http://vladmihalcea.com/a-beginners-guide-to-database-locking-and-the-lost-update-phenomena/

+0

Próbowałem dodać to przed moim faktycznym oświadczeniem wstawiania, ale problem nadal występuje. – user2694306

+0

czy zatwierdziłeś zmianę przed wstawieniem? Czy przed kontynuowaniem wkładasz wkładkę? – Busturdust

+0

Tak, po każdej wstawce następuje zatwierdzenie, a także próbowałem zatwierdzić oświadczenie przed moją wstawką. Dodałem przykład do mojego oryginalnego pytania – user2694306

4

It okazuje się, że inny komponent nawiązywał połączenie i brakuje instrukcji commit().

Powiązane problemy