Deadlock found when trying to get lock

Hallo zusammen,

ich finde im EXCEPTION_LOG in den letzten Tagen sehr häufig folgende Meldung:

Zusammenfassung

oxConnectionException-oxException (time: 2019-03-15 18:30:16): [1213]: mysql error: [1213: Deadlock found when trying to get lock; try restarting transaction] in EXECUTE (...) with user trpshop
 
 Stack Trace: #0 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/core/adodblite/adodbSQL_drivers/mysql/mysql_driver.inc(369): adodb_throw('mysql', 'EXECUTE', 1213, 'Deadlock found ...', 'update oxarticl...', Array, Object(object_ADOConnection))
#1 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/core/adodblite/adodb.inc.php(316): mysql_driver_ADOConnection->do_query('update oxarticl...', -1, -1, Array)
#2 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/core/oxlegacydb.php(177): ADOConnection->Execute('update oxarticl...', Array)
#3 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/core/oxbase.php(1393): oxLegacyDb->execute('update oxarticl...')
#4 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/core/oxi18n.php(453): oxBase->_update()
#5 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/application/models/oxarticle.php(4361): oxI18n->_update()
#6 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/core/oxbase.php(849): oxArticle->_update()
#7 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/application/models/oxarticle.php(2161): oxBase->save()
#8 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/application/controllers/admin/article_stock.php(129): oxArticle->save()
#9 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/core/oxview.php(522): Article_Stock->save()
#10 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/core/oxshopcontrol.php(357): oxView->executeFunction('save')
#11 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/core/oxshopcontrol.php(126): oxShopControl->_process('article_stock', 'save', NULL, NULL)
#12 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/core/oxid.php(40): oxShopControl->start()
#13 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/index.php(26): Oxid::run()
#14 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/admin/index.php(27): require_once('/var/www/vhosts...')
#15 {main}

 Connection Adress --> 
Connection Error --> 
---------------------------------------------

Was kann ich dagegen unternehmen?

Ho!

Könntest du bitte noch die Oxid-Version nennen?

Taucht der Fehler evt. auf, wenn du einen Artikel bearbeitest und den Reiter “Lager” speichern möchtest?

LG
Sio

Läuft evtl. ein Import oder Anbindung an eine Warenwirtschaft?

Hallo zusammen,

die Version ist die CE 4.10.2
Eine Anbindung an eine WaWi gibt es nicht. Ein Import lief nicht.
Was aber ständig passiert ist, dass Artikel gekauft werden und natürlich dann der Lagerbestand sinkt. Zudem passen wir den Lagerbestand teilweise manuell an. Z.B. bei Barverkauf. Das sind Arbeiten die wir regelmäßig machen.

Dabei sollte aber eigentlich kein Deadlock entstehen oder?

Viele Grüße
Chris

Eigentlich nicht - aber offenbar doch. Die Meldung kommt ja aus dem admin (process(‘article_stock’)), ist das immer der Fall oder gibt es auch welche aus dem Frontend?

Hallo leofonic,

der Fehler äußert sich immer auf die gleiche Art und Weise.
Ich habe am nach dem Post hier den PHP Speicher erhöht. Seit dem 15.03. ist kein Deadlock mehr im Log. Kann das schon die Lösung gewesen sein?
In Plesk habe ich für PHP jetzt 256M eingestellt. Zuvor war die Standardeinstellung gesetzt. Seitdem ist der Shop insgesamt deutlich schneller.

Viele Grüße
Chris

Interessant, vielleicht gibt es deshalb keine Deadlocks mehr weil die Anfragen schneller abgearbeitet werden und sich daher nicht mehr überschneiden.

Gestern kam es leider doch wieder dazu:

Zusammenfassung
oxConnectionException-oxException (time: 2019-03-25 18:30:11): [1213]: mysql error: [1213: Deadlock found when trying to get lock; try restarting transaction] in EXECUTE (
                    UPDATE `oxarticles`
                    SET
                        `oxvarminprice` = `oxprice`,
                        `oxvarmaxprice` = `oxprice`
                    WHERE
                        `oxid` = '5ec2888eb8238bac880ce8b70884f5ee', Array) with user trpshop

 Stack Trace: #0 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/core/adodblite/adodbSQL_drivers/mysql/mysql_driver.inc(369): adodb_throw('mysql', 'EXECUTE', 1213, 'Deadlock found ...', '?              ...', Array, Object(object_ADOConnection))
#1 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/core/adodblite/adodb.inc.php(316): mysql_driver_ADOConnection->do_query('?              ...', -1, -1, Array)
#2 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/core/oxlegacydb.php(177): ADOConnection->Execute('?              ...', Array)
#3 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/application/models/oxarticle.php(4609): oxLegacyDb->execute('?              ...')
#4 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/application/models/oxarticle.php(2321): oxArticle->_setVarMinMaxPrice('5ec2888eb8238ba...')
#5 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/core/oxbase.php(856): oxArticle->onChange(3)
#6 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/application/models/oxarticle.php(2161): oxBase->save()
#7 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/application/controllers/admin/article_stock.php(129): oxArticle->save()
#8 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/core/oxview.php(522): Article_Stock->save()
#9 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/core/oxshopcontrol.php(357): oxView->executeFunction('save')
#10 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/core/oxshopcontrol.php(126): oxShopControl->_process('article_stock', 'save', NULL, NULL)
#11 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/core/oxid.php(40): oxShopControl->start()
#12 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/index.php(26): Oxid::run()
#13 /var/www/vhosts/malta2566.startdedicated.de/httpdocs/trpshop/admin/index.php(27): require_once('/var/www/vhosts...')
#14 {main}

 Connection Adress -->
Connection Error -->

Scheint also seltener geworden zu sein, aber nicht weg.

Nun das ist jetzt etwas arg speziell, aber ich selbst würde versuchsweise die Funktion _setVarMinMaxPrice in der Klasse /application/models/oxArticles.php ändern.

Hier: https://pastebin.com/8fqKtJWE Zeile 16-18;

Ich habe den Code nicht getestet, aber bei mir kam es hin und wieder zu Problemen wenn oxDb im Assoc-Mode für Select und gleich wieder für Execute verwendet wurde.

Falls der Shop dann weiter funktioniert, kann ja ein Bugreport und bis es gefixt ist evt. ein kleines Fix-Modul erstellt werden. Mach ein Backup von der Datei, oder frage jemanden der da wenig Skrupel hat Core-Dateien testweise/temporär zu verändern.

Edit: Besser wäre es natürlich zu wissen, was die Funktion überhaupt erst aufruft :slight_smile:

LG
Sioweb

Nachtrag:

wir hatten das Problem mit einem großen Import in Oxid 6 heute, nach dem wir die PHP Version umgestellt hatten. Wir hatten das memory_limit in der php.INI bzw. mit ini_set(‘memory_limit’, xxx) noch nicht hoch genug eingestellt.

Das hat zumindest unser Problem deadlock-Problem gelöst.