Wie werden Deadlocks und Probleme mit dem Timeout von Sperren beseitigt?

17

Ich habe mehrere Blogs gelesen, versucht zu googeln, fand aber bei keiner Lösung eine Befriedigung. Ich habe folgende Probleme:

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) )

Ich habe versucht, dies durch Erhöhen innodb_pool_buffer_sizeund wait_timeoutin meiner.ini zu lösen, aber es hat nicht funktioniert.

Ich habe die Engine meiner Cache-Tabelle von Innodb auf MyIasm geändert. Das Problem ist weg, aber es ist keine perfekte Lösung. Die Tabellen-Engine wird nach einem Upgrade von Drupal geändert. Dieses Problem hat keine Auswirkungen auf die Website, aber ich möchte nicht, dass dies auftritt.

Irgendeine Lösung, Jungs?

Sumit Madan
quelle
Laufen Sie regelmäßig Cron? Wird es erfolgreich abgeschlossen?
mpdonadio
Ja, cron läuft erfolgreich.
Sumit Madan
Was lässt Sie denken, dass die Cachetabellen-Engine beim Upgrade geändert wird? Das war nicht meine Erfahrung.
Keithm
Ich meine, wenn ich den Drupal aktualisiere, wird die Cache-Tabelle von MyIasm auf Innodb geändert. Nein???
Sumit Madan

Antworten:

16

Lesen und befolgen Sie diesen Beitrag . es geht von InnoDB aus.

Lesen Sie insbesondere den Abschnitt, der besagt, dass der Datei settings.php Folgendes hinzugefügt werden soll.

$databases['default']['default']['init_commands'] = array('isolation' => "SET SESSION tx_isolation='READ-COMMITTED'");
mikeytown2
quelle
In dem Link give spricht er nur für Cache_field Deadlock. Auf meiner Site tritt das Wartezeitlimit für Deadlocks und Sperren jedoch für alle Cache-Tabellen auf.
Sumit Madan
Hey Mike, danke für den Link. Ich habe deinen anderen Beitrag überprüft und zur settings.php hinzugefügt, um $databases['default']['default']['init_commands'] = array('isolation' => "SET SESSION tx_isolation='READ-COMMITTED'");mein Problem auf meinem lokalen Server zu lösen. Ich habe es noch nicht auf dem Live-Server überprüft. Bitte bestätigen Sie, dass es in Zukunft kein Problem geben wird, wenn es von Ihnen getestet wird. Ich benutze Commerce Kickstart.
Sumit Madan
Ich verwende alle Empfehlungen live, habe Berichte gehört, die von drupal.org read commit verwendet werden. Verwenden Sie außerdem unbedingt die neueste Version von d7, da diese auch einen Deadlock-Fix enthält.
mikeytown2
1
Mikeytown2 Aus dem, was Sie sagen, habe ich verstanden, dass jetzt Drupal 7-Versionen dies gelöst haben? Ich frage mich, wie ich immer noch das gleiche Problem in der neuesten Version habe.
Marko Blazekovic
1
@MarkoBlazekovic Die meisten der Hauptprobleme mit Deadlocking sind in D7 zur Hälfte gelöst. Es gibt immer noch einige Deadlock- und Metadatensperrprobleme mit den Datenbank-Cache-Tabellen. Ich arbeite an einem Modul, um sie zu lösen: drupal.org/project/apdqc . APDQC aus meinen Tests behebt nahezu jedes einzelne Datenbanksperrproblem in Bezug auf die Cache-Tabellen. Beheben Sie nach der Installation alle Probleme im Statusbericht. Beachten Sie, dass sich das Modul noch in der Entwicklungsphase befindet, da ich noch keine Nicht-Entwickler-Version herausgebracht habe.
mikeytown2
4

Der beste Weg, um Deadlock-Fehler ein für alle Mal zu beseitigen, ist das Asynchronous Prefetch Database Query Cache- Modul.

Ich kann es nicht genug empfehlen. Brillant geschrieben und große Leistungssteigerung.

bmunslow
quelle