Hallo shopware-Team,
wir haben seit dem upgrade von 5.5.10 auf 5.6.4 ein arges Problem mit den Sessions.
Die Datenbank blockiert für 50 Sekunden (default für lock-timeout), wenn die sessions aufgeräumt werden sollen (egal ob per cron oder per gc). Dann bricht es ab mit einem Fehler (siehe unten). Die Anzahl der Einträge scheint nicht relevant zu sein, hatte zum Schluss alles gelöscht aus der s_core_session was nicht in den letzten 10 Minuten editiert wurde (übrig blieben 1.800 Einträge) und es war dennoch nicht möglich die Sessions aufzuräumen. Selbst das umstellen via config.php auf aufräumen per cron scheint nicht einwandfrei zu gehen (session.gc_probability = 0). Trotz dieser Einstellung blockierte die Datenbank alle ~20 Sekunden um die Sessions zu löschen (via SHOW PROCESSLIST kontrolliert). Erst als ich gc_divisor auf 1.000.000 gestellt hatte, gab es keine Aufrufe mehr. Über eine lange Zeit habe ich heute in der Datenbank einfach per kill den Prozess „DELETE FROM s_core_session …“ nach spätestens 10 Sekunden Laufzeit gelöscht, um den shop zumindest einigermaßen am laufen zu halten. Mir schien es am Ende so, dass keine Transaktion offen sein darf (= aktiver Seitenaufruf auf der Webseite sein darf), da sonst es mit hoher Wahrscheinlichkeit zu einem dead-lock kommen kann. Sprich sw:session:cleanup bekommt kein lock, da eine andere Transaktion noch nicht beendet ist und ebenfalls ein INSERT INTO auf die s_core_session machen möchte (und dort ebenfalls wartet auf den lock). Was halt auffällt: mit 5.5.10 lief noch alle einwandfrei!
Uncaught PDOException: SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction in …
Randnotiz: Alle x male klappt das Aufräumen der Sessions allerdings innerhalb von 0,04 Sekunden.
Randnitiz 2: Selbst wenn keine Session gelöscht wird, (kontrolliert mit SELECT COUNT(*) FROM s_core_session) wird angezeigt, dass eine Session entfernt wurde (einfach mehrfach den cron hintereinander ausführen).
$ php bin/console sw:session:cleanup
[OK] Successfully removed 1 expired sessions
SETUP:
Debian 9.12
PHP 7.3.15
MariaDB 10.3