Deadlock beim als gelesen Markieren

  • Affected Version
    WoltLab Suite 5.4

    Wir haben seit dem Update auf die Version 5.4, die wir bei einigen Kunden vorgenommen haben das Problem mit Deadlocks. Am Anfang hatte ich erst unseren Push++ Server in Vermutung, jedoch als der zweite Kunde ebenfalls kam, der aber keinen Installiert hat, konnte ich nun diesen auch ausschließen.

    Und zwar tritt dies bei der Funktion wcf\system\user\notification\UserNotificationHandler::markAsConfirmed auf, in beiden Installation.


    Hier sind die beiden Deadlock logs, beim ersten erkennt man das dort die Funktion des Push++ aufgerufen wird, beim zweiten ist dies aber nicht der Fall und ist auch ein anderer Kunde.




    Hier zu noch den Error Log aus dem WSC, sofern benötigt

    Requested URL
    POST /forum/index.php?ajax-proxy/&t=8eff9e28bd3082a8681288bcbc62cb161cb9a9ce88284cbfba5373598970a14a-4lrtG3otW6pw5qwT54DoFQ==
    Referrer
    https://www.xxx/forum/thread/1642-welches-spiel-spielt-ihr-aktuell/?postID=257812
    Error Message
    Could not execute statement 'UPDATE wcf1_user_notification SET confirmTime = ? WHERE confirmTime = ? AND eventID = ? AND userID IN (?) AND objectID IN (?,?,?,?,?,?,?,?,?)'
    Type
    wcf\system\database\exception\DatabaseQueryExecutionException
    File (Line)
    /storagepool/c01005/htdocs/xxx/lib/system/database/statement/PreparedStatement.class.php (144)
    Query Parameter 1
    1645104874
    Query Parameter 2
    0
    Query Parameter 3
    12
    Query Parameter 4
    4290
    Query Parameter 5
    256235
    Query Parameter 6
    256530
    Query Parameter 7
    256902
    Query Parameter 8
    257336
    Query Parameter 9
    257379
    Query Parameter 10
    257886
    Query Parameter 11
    257887
    Query Parameter 12
    257888
    Query Parameter 13
    257891
    Stacktrace
    1. /storagepool/c01005/htdocs/xxx/lib/system/user/notification/UserNotificationHandler.class.php (925): wcf\system\database\statement\PreparedStatement->execute(…)
    2. /storagepool/c01005/htdocs/xxx/forum/lib/data/thread/ThreadAction.class.php (481): wcf\system\user\notification\UserNotificationHandler->markAsConfirmed(…)
    3. /storagepool/c01005/htdocs/xxx/lib/data/AbstractDatabaseObjectAction.class.php (216): wbb\data\thread\ThreadAction->markAsRead(…)
    4. /storagepool/c01005/htdocs/xxx/forum/lib/data/thread/ThreadPushAction.class.php (106): wcf\data\AbstractDatabaseObjectAction->executeAction(…)
    5. /storagepool/c01005/htdocs/xxx/lib/data/AbstractDatabaseObjectAction.class.php (216): wbb\data\thread\ThreadPushAction->getNewPosts(…)
    6. /storagepool/c01005/htdocs/xxx/lib/action/AJAXProxyAction.class.php (86): wcf\data\AbstractDatabaseObjectAction->executeAction(…)
    7. /storagepool/c01005/htdocs/xxx/lib/action/AJAXInvokeAction.class.php (111): wcf\action\AJAXProxyAction->invoke(…)
    8. /storagepool/c01005/htdocs/xxx/lib/action/AbstractAction.class.php (53): wcf\action\AJAXInvokeAction->execute(…)
    9. /storagepool/c01005/htdocs/xxx/lib/action/AJAXInvokeAction.class.php (65): wcf\action\AbstractAction->__run(…)
    10. /storagepool/c01005/htdocs/xxx/lib/system/request/Request.class.php (89): wcf\action\AJAXInvokeAction->__run(…)
    11. /storagepool/c01005/htdocs/xxx/lib/system/request/RequestHandler.class.php (119): wcf\system\request\Request->execute(…)
    12. /storagepool/c01005/htdocs/xxx/forum/index.php (11): wcf\system\request\RequestHandler->handle(…)
    Error Message
    SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction
    Type
    PDOException
    File (Line)
    /storagepool/c01005/htdocs/xxx/lib/system/database/statement/PreparedStatement.class.php (126)
    Stacktrace
    1. /storagepool/c01005/htdocs/xxx/lib/system/database/statement/PreparedStatement.class.php (126): PDOStatement->execute(…)
    2. /storagepool/c01005/htdocs/xxx/lib/system/user/notification/UserNotificationHandler.class.php (925): wcf\system\database\statement\PreparedStatement->execute(…)
    3. /storagepool/c01005/htdocs/xxx/forum/lib/data/thread/ThreadAction.class.php (481): wcf\system\user\notification\UserNotificationHandler->markAsConfirmed(…)
    4. /storagepool/c01005/htdocs/xxx/lib/data/AbstractDatabaseObjectAction.class.php (216): wbb\data\thread\ThreadAction->markAsRead(…)
    5. /storagepool/c01005/htdocs/xxx/forum/lib/data/thread/ThreadPushAction.class.php (106): wcf\data\AbstractDatabaseObjectAction->executeAction(…)
    6. /storagepool/c01005/htdocs/xxx/lib/data/AbstractDatabaseObjectAction.class.php (216): wbb\data\thread\ThreadPushAction->getNewPosts(…)
    7. /storagepool/c01005/htdocs/xxx/lib/action/AJAXProxyAction.class.php (86): wcf\data\AbstractDatabaseObjectAction->executeAction(…)
    8. /storagepool/c01005/htdocs/xxx/lib/action/AJAXInvokeAction.class.php (111): wcf\action\AJAXProxyAction->invoke(…)
    9. /storagepool/c01005/htdocs/xxx/lib/action/AbstractAction.class.php (53): wcf\action\AJAXInvokeAction->execute(…)
    10. /storagepool/c01005/htdocs/xxx/lib/action/AJAXInvokeAction.class.php (65): wcf\action\AbstractAction->__run(…)
    11. /storagepool/c01005/htdocs/xxx/lib/system/request/Request.class.php (89): wcf\action\AJAXInvokeAction->__run(…)
    12. /storagepool/c01005/htdocs/xxx/lib/system/request/RequestHandler.class.php (119): wcf\system\request\Request->execute(…)
    13. /storagepool/c01005/htdocs/xxx/forum/index.php (11): wcf\system\request\RequestHandler->handle(…)
    • Official Post

    Hallo,


    Deadlock-Meldungen mit den passenden Log-Einträgen. Ein Traum :love:

    1. Das kann möglicherweise ein Fehler in deinem Plugin sein. Ich kann gerne mal reinschauen, wenn du mir den Plugin-Store-Eintrag verlinkst.
    2. Der Deadlock ist mir bereits „notorisch bekannt“, den bekommt man aber nicht weg, solange die user_notification_to_user-Tabelle existiert. Ich habe für WoltLab Suite 5.4 schon versucht die Chance dafür mit diesem Commit zu reduzieren: https://github.com/WoltLab/WCF…473328940ea2359f431de581f. Mit WoltLab Suite 6.0 wird die Tabelle spätestens entfernt werden.
  • Der Deadlock ist mir bereits „notorisch bekannt“, den bekommt man aber nicht weg, solange die user_notification_to_user-Tabelle existiert.

    Falls du etwas Zeit übrig hast... kannst du mir erklären, wieso dieser Deadlock auftritt? Eventuell sollte ich schauen, dass ich Plugins von mir ggf. anpasse…


    Ich interpretiere aus dem Log, dass InnoDB nicht damit klarkommt, wenn relativ gleichzeitig Spalten gelöscht werden (DELETE) und dieselben auch abgeändert werden sollen (UPDATE). Aber wieso kommt es zu einem unausweislichen Deadlock? Gibt es keine fortlaufende Query-ID anhand man abwägen kann welche Query zuerst ausgeführt werden soll?

    1. Der Deadlock ist mir bereits „notorisch bekannt“, den bekommt man aber nicht weg, solange die user_notification_to_user-Tabelle existiert. Ich habe für WoltLab Suite 5.4 schon versucht die Chance dafür mit diesem Commit zu reduzieren: https://github.com/WoltLab/WCF…473328940ea2359f431de581f. Mit WoltLab Suite 6.0 wird die Tabelle spätestens entfernt werden.

    Es handelt sich um folgendes Plugin was die Fehler verursacht

    Und das hier ist natürlich die Basis davon, falls relevant

    • Official Post

    Hallo,

    Falls du etwas Zeit übrig hast... kannst du mir erklären, wieso dieser Deadlock auftritt? Eventuell sollte ich schauen, dass ich Plugins von mir ggf. anpasse…

    Die ganze Thematik ist etwas, über das man Vorlesungen an der Universität besucht, das hier in einem Forenbeitrag verständlich herunterzubrechen ist kaum möglich :)


    Die kurze Zusammenfassung ist aber: MySQL führt Queries parallel aus und Queries locken nicht atomar. Entsprechend gibt es kein „zuerst ausführen“.

    Es handelt sich um folgendes Plugin was die Fehler verursacht

    Danke, schaue ich mir bei Gelegenheit an.

  • Ich oute mich hier mal als jemand, der von dem Fehler betroffen ist.


    Nachdem Cyperghost alle seine Versuche, den Fehler zu beheben, rückgängig gemacht und dieses Thema hier erstellt hat, treten diese Deadlock-Fehler nun wieder mehrfach am Tag auf.


    Requested URL
    POST /forum/index.php?ajax-proxy/&t=10e58ae544249f6dddeee772770c86c26e90d92453fa1f3dc43a3bc1d632858a-ecetUziKmlDywB/WDT/l/Q==
    Referrer
    https://www.compiware-forum.de/forum/thread/1900-was-hast-du-dir-aktuell-gekauft/?pageNo=408
    Error Message
    Could not execute statement 'UPDATE wcf1_user_notification SET confirmTime = ? WHERE confirmTime = ? AND eventID = ? AND userID IN (?) AND objectID IN (?,?,?,?,?,?,?,?,?,?,?)'
    Type
    wcf\system\database\exception\DatabaseQueryExecutionException
    File (Line)
    /storagepool/c01005/htdocs/compiware-forum.de/lib/system/database/statement/PreparedStatement.class.php (144)
    Query Parameter 1
    1645470759
    Query Parameter 2
    0
    Query Parameter 3
    13
    Query Parameter 4
    11102
    Query Parameter 5
    258562
    Query Parameter 6
    258563
    Query Parameter 7
    258564
    Query Parameter 8
    258567
    Query Parameter 9
    258569
    Query Parameter 10
    258572
    Query Parameter 11
    258585
    Query Parameter 12
    258592
    Query Parameter 13
    258593
    Query Parameter 14
    258597
    Query Parameter 15
    258598
    Stacktrace
    1. /storagepool/c01005/htdocs/compiware-forum.de/lib/system/user/notification/UserNotificationHandler.class.php (925): wcf\system\database\statement\PreparedStatement->execute(…)
    2. /storagepool/c01005/htdocs/compiware-forum.de/forum/lib/data/thread/ThreadAction.class.php (481): wcf\system\user\notification\UserNotificationHandler->markAsConfirmed(…)
    3. /storagepool/c01005/htdocs/compiware-forum.de/lib/data/AbstractDatabaseObjectAction.class.php (216): wbb\data\thread\ThreadAction->markAsRead(…)
    4. /storagepool/c01005/htdocs/compiware-forum.de/forum/lib/data/thread/ThreadPushAction.class.php (106): wcf\data\AbstractDatabaseObjectAction->executeAction(…)
    5. /storagepool/c01005/htdocs/compiware-forum.de/lib/data/AbstractDatabaseObjectAction.class.php (216): wbb\data\thread\ThreadPushAction->getNewPosts(…)
    6. /storagepool/c01005/htdocs/compiware-forum.de/lib/action/AJAXProxyAction.class.php (86): wcf\data\AbstractDatabaseObjectAction->executeAction(…)
    7. /storagepool/c01005/htdocs/compiware-forum.de/lib/action/AJAXInvokeAction.class.php (111): wcf\action\AJAXProxyAction->invoke(…)
    8. /storagepool/c01005/htdocs/compiware-forum.de/lib/action/AbstractAction.class.php (53): wcf\action\AJAXInvokeAction->execute(…)
    9. /storagepool/c01005/htdocs/compiware-forum.de/lib/action/AJAXInvokeAction.class.php (65): wcf\action\AbstractAction->__run(…)
    10. /storagepool/c01005/htdocs/compiware-forum.de/lib/system/request/Request.class.php (89): wcf\action\AJAXInvokeAction->__run(…)
    11. /storagepool/c01005/htdocs/compiware-forum.de/lib/system/request/RequestHandler.class.php (119): wcf\system\request\Request->execute(…)
    12. /storagepool/c01005/htdocs/compiware-forum.de/forum/index.php (11): wcf\system\request\RequestHandler->handle(…)
    Error Message
    SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction
    Type
    PDOException
    File (Line)
    /storagepool/c01005/htdocs/compiware-forum.de/lib/system/database/statement/PreparedStatement.class.php (126)
    Stacktrace
    1. /storagepool/c01005/htdocs/compiware-forum.de/lib/system/database/statement/PreparedStatement.class.php (126): PDOStatement->execute(…)
    2. /storagepool/c01005/htdocs/compiware-forum.de/lib/system/user/notification/UserNotificationHandler.class.php (925): wcf\system\database\statement\PreparedStatement->execute(…)
    3. /storagepool/c01005/htdocs/compiware-forum.de/forum/lib/data/thread/ThreadAction.class.php (481): wcf\system\user\notification\UserNotificationHandler->markAsConfirmed(…)
    4. /storagepool/c01005/htdocs/compiware-forum.de/lib/data/AbstractDatabaseObjectAction.class.php (216): wbb\data\thread\ThreadAction->markAsRead(…)
    5. /storagepool/c01005/htdocs/compiware-forum.de/forum/lib/data/thread/ThreadPushAction.class.php (106): wcf\data\AbstractDatabaseObjectAction->executeAction(…)
    6. /storagepool/c01005/htdocs/compiware-forum.de/lib/data/AbstractDatabaseObjectAction.class.php (216): wbb\data\thread\ThreadPushAction->getNewPosts(…)
    7. /storagepool/c01005/htdocs/compiware-forum.de/lib/action/AJAXProxyAction.class.php (86): wcf\data\AbstractDatabaseObjectAction->executeAction(…)
    8. /storagepool/c01005/htdocs/compiware-forum.de/lib/action/AJAXInvokeAction.class.php (111): wcf\action\AJAXProxyAction->invoke(…)
    9. /storagepool/c01005/htdocs/compiware-forum.de/lib/action/AbstractAction.class.php (53): wcf\action\AJAXInvokeAction->execute(…)
    10. /storagepool/c01005/htdocs/compiware-forum.de/lib/action/AJAXInvokeAction.class.php (65): wcf\action\AbstractAction->__run(…)
    11. /storagepool/c01005/htdocs/compiware-forum.de/lib/system/request/Request.class.php (89): wcf\action\AJAXInvokeAction->__run(…)
    12. /storagepool/c01005/htdocs/compiware-forum.de/lib/system/request/RequestHandler.class.php (119): wcf\system\request\Request->execute(…)
    13. /storagepool/c01005/htdocs/compiware-forum.de/forum/index.php (11): wcf\system\request\RequestHandler->handle(…)


    Wenn ich das richtig verstanden habe, dürfte dieser Fehler im WSC 5.5 nicht mehr auftreten, korrekt?

    Gibt es etwas, dass ich jetzt bereits tun kann, um diesen Fehler zu fixen?

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!