Jak pozbyć się problemów z zakleszczeniem i czasem oczekiwania na blokadę?

17

Czytałem wiele blogów, próbowałem google, ale nie znalazłem żadnej satysfakcji z żadnego rozwiązania. Mam następujące problemy:

PDOException: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction: DELETE FROM {cache_field} WHERE (cid LIKE :db_condition_placeholder_0 ESCAPE '\\') ; Array ( [:db_condition_placeholder_0] => field\_info:% ) in cache_clear_all() (line 163 of \includes\cache.inc).

PDOException: SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction: SELECT 1 AS expression FROM {sessions} sessions WHERE ( (sid = :db_condition_placeholder_0) AND (ssid = :db_condition_placeholder_1) )

Próbowałem rozwiązać ten problem, zwiększając innodb_pool_buffer_sizei wait_timeoutw moim.ini, ale nie zadziałało.

Zmieniłem silnik mojej tabeli pamięci podręcznej z Innodb na MyIasm. Problem zniknął, ale nie jest to idealne rozwiązanie. Silnik tabeli zostanie zmieniony po aktualizacji drupala. Ten problem nie ma wpływu na nic na stronie, ale nie chcę, aby tak się stało.

Jakieś rozwiązanie chłopaki?

Sumit Madan
źródło
Czy korzystasz z okresowego crona? Czy to się kończy?
mpdonadio
Tak, cron działa poprawnie.
Sumit Madan
Co sprawia, że ​​uważasz, że silnik tabeli pamięci podręcznej zostanie zmieniony podczas aktualizacji? To nie było moje doświadczenie.
keithm
Mam na myśli, że jeśli uaktualnię drupala, tabela pamięci podręcznej zostanie zmieniona z MyIasm na Innodb. Nie???
Sumit Madan

Odpowiedzi:

16

Przeczytaj i śledź ten post ; zakłada InnoDB.

W szczególności zapoznaj się z częścią dotyczącą dodania następujących elementów do pliku settings.php.

$databases['default']['default']['init_commands'] = array('isolation' => "SET SESSION tx_isolation='READ-COMMITTED'");
mikeytown2
źródło
W łączu podającym mówi tylko o impasie cache_field. Ale w mojej witrynie na wszystkich tabelach pamięci podręcznej występuje zakleszczenie i czas oczekiwania blokady.
Sumit Madan
Hej Mike, dzięki za link. Sprawdziłem twój drugi post i dodanie tego do settings.php $databases['default']['default']['init_commands'] = array('isolation' => "SET SESSION tx_isolation='READ-COMMITTED'");rozwiązało mój problem na moim lokalnym serwerze. Nie sprawdziłem tego jeszcze na serwerze na żywo. Potwierdź, że nie spowoduje to żadnego problemu w przyszłości, jeśli zostanie przez Ciebie przetestowany? Używam kickstart handlu.
Sumit Madan
Korzystam ze wszystkich rekomendacji na żywo, słyszę raporty, że drupal.org używa read read. Upewnij się również, że korzystasz z najnowszej wersji d7, ponieważ ma ona również poprawkę impasu.
mikeytown2
1
Mikeytown2 Z tego, co mówisz, zrozumiałem, że teraz drupal 7 wersji ma to rozwiązane? zastanawiam się nad tym, ponieważ wciąż mam ten sam problem w najnowszej wersji.
Marko Blazekovic
1
@MarkoBlazekovic Większość głównych problemów z zakleszczeniem rozwiązano w połowie w D7. Nadal występują problemy z zakleszczeniem i blokowaniem metadanych w tabelach pamięci podręcznej bazy danych. Pracuję nad modułem do ich rozwiązania: drupal.org/project/apdqc . APDQC z moich testów rozwiązuje prawie każdy problem z blokowaniem bazy danych w odniesieniu do tabel pamięci podręcznej. Pamiętaj, aby rozwiązać wszystkie problemy w raporcie stanu po jego zainstalowaniu. Zauważ, że moduł jest wciąż w fazie rozwoju, ponieważ nie wydałem go jeszcze w wersji innej niż dev.
mikeytown2