Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: 1213 - Deadlock found...

    Pianski Roland

    • Frisch an Board
    • Beiträge: 92
    • Geschlecht:
    1213 - Deadlock found...
    am: 13. April 2020, 13:46:02
    Hallo zusammen,
    ich hab seit einigen Tagen ständig Fehlermeldungen die per Email kommen.

    "1213 - Deadlock found when trying to get lock; try restarting transaction"

    gerade eben zB.:

    Code: PHP  [Auswählen]
    1213 - Deadlock found when trying to get lock; try restarting transaction

    INSERT INTO whos_online (customer_id, full_name, session_id, time_entry, ip_address, time_last_click, last_page_url, http_referer)
    VALUES ('0', '[Suchmaschine]', '', '1586755419', '', '1586755419', '/shop/index.php?cPath=1_8', '---')
    ON DUPLICATE KEY UPDATE customer_id = '0', full_name = '[Suchmaschine]', ip_address = '', time_last_click = '1586755419', last_page_url = '/shop/index.php?cPath=1_8'

    Request URL: www.kratzhimmel.de/shop/index.php?cPath=1_8

    [XT SQL Error]

    und heute Vormittag diesen:

    Code: PHP  [Auswählen]
    1213 - Deadlock found when trying to get lock; try restarting transaction

    INSERT INTO whos_online (customer_id, full_name, session_id, time_entry, ip_address, time_last_click, last_page_url, http_referer)
    VALUES ('0', '[Suchmaschine]', '', '1586739289', '', '1586739289', '/shop/product_reviews_info.php?products_id=42&reviews_id=4', '---')
    ON DUPLICATE KEY UPDATE customer_id = '0', full_name = '[Suchmaschine]', ip_address = '', time_last_click = '1586739289', last_page_url = '/shop/product_reviews_info.php?products_id=42&reviews_id=4'

    Request URL: www.kratzhimmel.de/shop/product_reviews_info.php?products_id=42&reviews_id=4

    [XT SQL Error]

    heute Nacht:

    Code: PHP  [Auswählen]
    1213 - Deadlock found when trying to get lock; try restarting transaction

    INSERT INTO whos_online (customer_id, full_name, session_id, time_entry, ip_address, time_last_click, last_page_url, http_referer)
    VALUES ('0', '[Suchmaschine]', '', '1586647244', '', '1586647244', '/shop/specials.php', '---')
    ON DUPLICATE KEY UPDATE customer_id = '0', full_name = '[Suchmaschine]', ip_address = '', time_last_click = '1586647244', last_page_url = '/shop/specials.php'

    Request URL: www.kratzhimmel.de/shop/specials.php

    [XT SQL Error]

    gestern:

    Code: PHP  [Auswählen]
    1213 - Deadlock found when trying to get lock; try restarting transaction

    INSERT INTO whos_online (customer_id, full_name, session_id, time_entry, ip_address, time_last_click, last_page_url, http_referer)
    VALUES ('0', '[Suchmaschine]', '', '1586638266', '', '1586638266', '/shop/product_info.php?products_id=171', '---')
    ON DUPLICATE KEY UPDATE customer_id = '0', full_name = '[Suchmaschine]', ip_address = '', time_last_click = '1586638266', last_page_url = '/shop/product_info.php?products_id=171'

    Request URL: www.kratzhimmel.de/shop/product_info.php?products_id=171

    [XT SQL Error]

    und so geht es seit Tagen :-(

    Hat jemand eine Ahnung woran das liegen kann?
    Für eure Rückmeldungen und Tips wäre ich sehr dankbar.
    MfG Roland Pianski

    PS: Ich hab die ganzen Tage nichts am Shop geändert, daher hab ich auch keinen Plan wiso diese Fehlermeldungen auf einmal kommen.

    PSS: 
    modified eCommerce Shopssoftware v2.0.5.0 rev 12487 dated: 2019-12-13
    Datenbank Version: "MOD_2.0.5.0"

    Linkback: https://www.modified-shop.org/forum/index.php?topic=40986.0

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.743
    • Geschlecht:
    Re: 1213 - Deadlock found...
    Antwort #1 am: 13. April 2020, 18:02:53
    • Schau mal bitte mittels phpMyAdmin welche ENGINE die Tabelle whos_online hat, MyISAM oder InnoDB.
    • Schau mal ob die Indices gesetzt sind:
      Auf Struktur gehen und schauen,
      - ob da der PRIMARY KEY auf session_id angelegt ist
      - ob ein Index auf time_last_click sitzt 8nicht so wichtig für das Problem, sollte aber da sein)

    Zu Punkt 1:
    Wenn die ENGINE InnoDB ist ändere sie auf MyISAM:
    Code: SQL  [Auswählen]
    ALTER TABLE whos_online ENGINE = MyISAM;

    und beobachte ob das Problem weiter auftritt.

    Zu Punkt 2:
    Wenn die Indices (oder einer davon) nicht gesetzt sind einfach Tabelle neu anlegen:
    (Daß dabei die inhalte verloren gehen ist unwichtig, die Tabelle wird ja ständig mit den Daten der Besucher des Shops aktualisiert.)
    Code: SQL  [Auswählen]
    DROP TABLE IF EXISTS whos_online;
    CREATE TABLE whos_online (
      customer_id INT(11) DEFAULT NULL,
      full_name VARCHAR(64) NOT NULL,
      session_id VARCHAR(32) NOT NULL,
      ip_address VARCHAR(50) NOT NULL,
      time_entry VARCHAR(14) NOT NULL,
      time_last_click VARCHAR(14) NOT NULL,
      last_page_url VARCHAR(255) NOT NULL,
      http_referer VARCHAR(255) NOT NULL,
      PRIMARY KEY (session_id),
      KEY idx_time_last_click (time_last_click)
    );

    und beobachten ob das Problem weiter auftritt.

    Gruß,
    noRiddle

    *NACHTRAG*
    Ach, und was ist bei Konfiguration => Admibereich Optionen => "Wer ist Online - Anzeigezeitraum in Sek." eingetragen  ?

    brummi49

    • Neu im Forum
    • Beiträge: 35
    • Geschlecht:
    Re: 1213 - Deadlock found...
    Antwort #2 am: 14. April 2020, 19:26:38
    gleiches Problem hier  seit einigen Wochen. Betroffen ist ist die whos_online.

    Ich habe dann nacheinander folgende Anpassungen durchgeführt:

    - alle Updates seit 2.03 bis 2.05 erfolgreich installiert.
    - Änderung php Version auf 7.0 (vorher 5. irgendwas)
    - Tabelle whos_online neu angelegt (aus dem Script der 2.05 Vollversion)

    Nach jedem Stepp habe ich das Ergebnis kontrolliert. Interessant war, dass das es bis zu einem Tag fehlerfrei lief, aber dann kam die Meldung erneut und wieder häufiger, aktuell alle paar Minuten.

    Anzeigezeitraum steht auf 900 s.
    Ich werde morgen dann mal noch das von Dir bereitgestellte Script ausführen und die Tabelle damit neu anlegen.

    Gruß Günter

    Code: SQL  [Auswählen]
    1213 - Deadlock found WHEN trying TO GET LOCK; try restarting TRANSACTION

    INSERT INTO whos_online (customer_id, full_name, session_id, time_entry, ip_address, time_last_click, last_page_url, http_referer)
    VALUES ('0', '[Suchmaschine]', '', '1586881333', '114.119.164.115', '1586881333', '/xtc/Heba:.:2.html', '---')
    ON DUPLICATE KEY UPDATE customer_id = '0', full_name = '[Suchmaschine]', ip_address = '114.119.164.115', time_last_click = '1586881333', last_page_url = '/xtc/Heba:.:2.html'
     

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.743
    • Geschlecht:
    Re: 1213 - Deadlock found...
    Antwort #3 am: 14. April 2020, 19:51:46
    ...
    Ich werde morgen dann mal noch das von Dir bereitgestellte Script ausführen und die Tabelle damit neu anlegen.
    ...

    Das brauchst du nicht zu machen.
    Du schriebst doch
    "- Tabelle whos_online neu angelegt (aus dem Script der 2.05 Vollversion)"
    womit du bereits genau das gemacht hast was ich schrieb und du "Skript" nennst.

    Das wäre jedoch interessant:
    ...
    Zu Punkt 1:
    Wenn die ENGINE InnoDB ist ändere sie auf MyISAM:
    Code: SQL  [Auswählen]
    ALTER TABLE whos_online ENGINE = MyISAM;

    und beobachte ob das Problem weiter auftritt.
    ...

    Auf vielen mySQL-Servern ist als DEFAULT ENGINE InnoDB eingestellt und da der Installer bzw. der mySQL-Code zum Generieren der Tabellen in der DB keine ENGINE angibt (übrgens auch kein DEFAULT CAHRSET und keine COLLATION), fällt der Server auf seine DEFAULT-Einstellungen zurück.

    Den Fehler mit dem "Deadlock" kann es meines Wissens nach nur auf InnoDB-Tabellen geben.
    Es hat etwas mit dem Befehl ON DUPLICATE KEY UPDATE beim Updaten der Tabelle mit Einträgen zu tun, ich muß da auch nochmal recherchieren.
    Wenn du InnoDB haben solltest und auf MyISAM gewechselt haben wirst und das Problem damit dann behoben sein sollte, lasse ich das aus Zeitgründen dann allerdings erstmal.

    Gruß,
    noRiddle

    brummi49

    • Neu im Forum
    • Beiträge: 35
    • Geschlecht:
    Re: 1213 - Deadlock found...
    Antwort #4 am: 15. April 2020, 09:18:29
    Habe die Tabelle auf MyISAM umgestellt, war vorher tatsächlich auf InnoDB eingestellt.
    Nun werden wir das mal einen Tag beobachten.
    Melde mich wieder mit dem Ergebnis zurück.

    Herzlichen Dank
    Günter

    brummi49

    • Neu im Forum
    • Beiträge: 35
    • Geschlecht:
    Re: 1213 - Deadlock found...
    Antwort #5 am: 16. April 2020, 09:22:21
    Das sieht gut aus!
    Bis jetzt keine Fehlermeldungen mehr.

    Nochmals vielen Dank an noRiddle!
    Gruß Günter

    peter111

    • Fördermitglied
    • Beiträge: 257
    • Geschlecht:
    Re: 1213 - Deadlock found...
    Antwort #6 am: 17. April 2020, 08:32:45
    Zur Info
    es scheint kein Einzelfall zu sein. Ich hatte die gleiche Meldung gleich zweimal
    und habe nun auch auf MyISAM umgestellt und behalte das "im Auge".
    Gruß Peter

    Pianski Roland

    • Frisch an Board
    • Beiträge: 92
    • Geschlecht:
    Re: 1213 - Deadlock found...
    Antwort #7 am: 19. April 2020, 16:23:23
    @all

    Danke für die Hilfe ;-)
    Hab "whos_online" momentan deaktiviert da ich beruflich zZt. sehr eingespannt bin.
    Hab aktuell bei deaktivierter Funktion auch keine Fehlermeldungen mehr bekommen.
    ...Aber danke nochmal ;-)
    VLG Roland

    webald

    • modified Team
    • Beiträge: 2.795
    Re: 1213 - Deadlock found...
    Antwort #8 am: 18. September 2020, 17:08:53
    Könnte bitte mal einer der betroffenen in der Datei inc/xtc_update_whos_online.inc.php folgenden Code ( testen?

    Code: PHP  [Auswählen]
        // remove entries that have expired
        $id2delete_qry = xtc_db_query("SELECT customer_id FROM " . TABLE_WHOS_ONLINE . " WHERE time_last_click < '" . $xx_mins_ago . "'");
        $id2delete = array();
        while ($delids = xtc_db_fetch_array($id2delete_qry))
        {
            $id2delete[] = $delids['customer_id'];
        }
        if (count($id2delete) > 0)
        {
            xtc_db_query("DELETE FROM " . TABLE_WHOS_ONLINE . " WHERE customer_id IN (" . implode( ',', $id2delete ) . ")");
        }

        //xtc_db_query("DELETE FROM " . TABLE_WHOS_ONLINE . " WHERE time_last_click < '" . $xx_mins_ago . "'");

        xtc_db_query("INSERT INTO " . TABLE_WHOS_ONLINE . " (customer_id, full_name, session_id, time_entry, ip_address, time_last_click, last_page_url, http_referer)
                           VALUES ('"
    . (int)$wo_customer_id ."', '".xtc_db_input($wo_full_name)."', '".xtc_db_input($wo_session_id)."', '".xtc_db_input($current_time)."', '".xtc_db_input($wo_ip_address)."', '".xtc_db_input($current_time)."', '".xtc_db_input($wo_last_page_url)."', '".xtc_db_input($wo_referer)."')
                           ON DUPLICATE KEY UPDATE customer_id = '"
    .(int)$wo_customer_id."', full_name = '".xtc_db_input($wo_full_name)."', ip_address = '".xtc_db_input($wo_ip_address)."', time_last_click = '".xtc_db_input($current_time)."', last_page_url = '".xtc_db_input($wo_last_page_url)."'");
     

    Erklärung:
    Die Delete-Abfrage sperrt die Tabelle, benutzt dabei den Index auf time_last_click.

    Direkt danach wird ein Update versucht und hierbei ein anderer Index (customer_id) benutzt, während der Datensatz durch die Aktuaiseirung des obigen Index noch gesperrt ist.

    Ja, das könnte man mit einer SQL-Abfrage mit Subquery auch ausführen, allerdings lässt mariaDB keine Subquery auf die gleiche Tabelle zu.

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.743
    • Geschlecht:
    Re: 1213 - Deadlock found...
    Antwort #9 am: 23. August 2022, 13:03:55
    Hat sich hiemit mal jemand weiter beschäftigt ?
    Ich hatte gestern
    [2022-08-22 14:40:21] [warning] [modified] [pid:1209944] 1213 - Deadlock found when trying to get lock; try restarting transaction<br/><br/>DELETE FROM whos_online WHERE time_last_click < '1661171121' in File: PATH/inc/db_functions_mysqli.inc.php on Line: 161 {} {}
    [2022-08-22 14:40:21] [warning] [modified] [pid:1209944] Backtrace #0 - PATH/inc/xtc_update_whos_online.inc.php called at Line 65 {} {}
    [2022-08-22 14:40:21] [warning] [modified] [pid:1209944] Backtrace #1 - PATH/includes/application_top.php called at Line 309 {} {}
    ...

    Vielleicht sollte man webalds Ausführungen mal folgen. Das ist nach Recherche begründet, lässt sich allerdings schwer prüfen um zu sehen ob's hilft, weil solch ein Deadlock ja nur sporadisch auftritt.

    Das Folgende verstehe ich allerdings nicht, hab' ich nch nie gehört, warum sollte das nicht gehen  ?
    [...]
    ..., allerdings lässt mariaDB keine Subquery auf die gleiche Tabelle zu.

    Gruß,
    noRiddle
    7 Antworten
    4250 Aufrufe
    13. August 2012, 11:25:08 von babylon
    2 Antworten
    1086 Aufrufe
    13. November 2018, 09:01:06 von web-looks
    0 Antworten
    726 Aufrufe
    19. Februar 2022, 22:43:53 von Onlineshopper
               
    anything