[gelöst] epg2vdr: SQL-Error in 'execute(stmt_execute)' - Deadlock found when trying to get lock ...

  • Ist das wirklich so? Das wäre dann natürlich was völlig anderes, sorry.
    Ich dachte, die Meldung hätte was zu bedeuten, bzw. "irgendwas hat nicht geklappt".
    Und andere bekommen die Meldung ja auch nicht.
    Ich bin bei Fehlermeldungen im syslog dann einfach verunsichert; v.a. wenn _ich_ nicht herauslesen kann, dass (3 Sekunden) später eh alles passt.

    MyVDR: yaVDR-Ansible (Ubuntu 20) - softhddevice-openglosd (ffmpeg 2.8) - epgd/epg2vdr - skindesigner estuary4vdr (adaptiert) - 1920x1080@50 Hz | kodi 18 - inputstream + amazon vod
    Aerocube M40 | 300W | ASRock H61M-GE | Intel G530 | Asus ENGT520 | 2 x TT-budget S2-3200 | ASRock Smart Remote (CIR) | 4 GB RAM | 120 GB SSD | 3 TB HDD

  • Einen Deadlock mit "Die Message hat doch absolut nichts zu sagen" ist jetzt etwas grob verharmlosend.


    Mal für die Interessierten eine kurze und vereinfachte Erklärung was ein Deadlock bedeutet:


    Der Thread 1 holt sich einen exklusiven Lock auf die Tabelle A, weil er darauf schreiben will
    Der Thread 2 holt sich einen exklusiven Lock auf die Tabelle B, wer er darauf schreiben will
    Jetzt will der Thread 1 sich einen Lock auf die Tabelle B holen, weil er davon lesen will. Er muss aber warten, bis Thread 2 seinen Lock released hat.
    Der Thread 2 denkt aber gar nicht daran den Lock zu releasen, will seinerseits einen Lock auf Tabelle A und hängt, weil Thread 1 ja schon einen Lock darauf hat.
    Deadlock! Tot, weil normalerweise jetzt beide Threads bis in alle Ewigkeiten hängen würden. Allerdings erkennt die Datenbank-Engine das, und schickt eine Fehlermeldung.
    Jetzt kann der Programmierer z.B. in den Threads unterschiedlich lange warten und es dann nochmal versuchen. Das scheint wohl hier die Vorgehensweise zu sein.


    Ich kenne mich mit MySQL nicht sehr aus, aber bei richtigen Datenbanken macht man das anders. Statt implizite Locks durch die Datenbank-Zugriffe zu machen, lockt man durch das Starten einer Transaktion mit expliziten Locks.
    Thread 1 versucht Tabelle A und B zu locken und schafft das, weil keiner die Tabellen gelockt hat.
    Thread 2 versucht ebenfalls Tabelle A und B zu locken, hängt aber weil Thread 1 die Tabellen gelockt hat.
    Das ist aber kein Deadlock, weil Thread 1 ja weitermachen kann und die Locks released. Dann kann auch Thread 2 die Locks bekommen.


    So, jetzt habe ich euch genug gelangweilt.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • der Deadlock bei dem im ersten Post genannten Statement ist, solange er selten auftritt aus fachlichen (nicht technischen) Gründen relativ unkritisch.


    Hintergrund, wenn der epgd 'arbeitet' teilt er dies den VDRs mit damit diese die Arbeit im EPG Handler (das speisen der DB mit EPG Updates) solange aussetzen und es nicht zu diesen 'deadlocks' kommt. Hier kann es in sehr seltenen Fällen zu einer Überschneidung beim timing und einem damit verbundenen Deadlock kommen. Bei mir tritt das 0-4 Mal im Monat auf, meist 0 Mal ;).
    Unkritisch da die EPG Updates permanent erneut'einfliegen' und somit beim nächsten Mal - sofern in der Tabelle nicht aktuell - übernommen werden.


    Tritte es mehrmals täglich oder sogar mehrmals in einer Stunde auf ist es ein Zeichen dass in der epgd / epg2vdr Kommunikation etwas klemmt - dann sollte man das recherchieren.


    Grüße
    Jörg

  • der Deadlock bei dem im ersten Post genannten Statement ist, solange er selten auftritt aus fachlichen (nicht technischen) Gründen relativ unkritisch.


    Zwischen den Zeilen meines Posts hatte ich ja schon angedeutet, dass sowas durchaus in Ordnung sein "kann", was du ja jetzt bestätigt hast.


    Nur einen Schönheitspreis gewinnt das nicht ;).


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Nur einen Schönheitspreis gewinnt das nicht .


    da stimme ich zu ;)


    das erweiterte SVDRP Interface des VDR 2.3.2 verbessert oder löst das vermutlich. Muss den epgd nur noch dort hin portieren (leider wie immer abwärts kompatibel)

  • Vielen Dank für die ausführlichen Erläuterungen.


    Mittlerweile schauts bei mir so aus, als würde der Deadlock nur noch selten bzw. nur nach dem Aufwachen/Einschalten auftreten.
    Aber leider eben immer noch - auch mit der neuesten Version (von heute):

    Code
    epgd-tool -show-stats
    +-------------------------------------------+--------+-----------------+----------+-----------------------------+-----------------------------+-----------------------------+
    | version                                   | master | ip              | state    | last touch                  | last download               | next download               |
    +-------------------------------------------+--------+-----------------+----------+-----------------------------+-----------------------------+-----------------------------+
    | vdr 2.2.0 epg2vdr 1.1.40-GIT (27.02.2017) | y      | 192.168.192.150 | attached | 27th February 2017 22:52:47 | 27th February 2017 20:21:52 | NULL                        |
    | epgd 1.1.100-GIT (26.02.2017)             | -      | 192.168.192.150 | standby  | 27th February 2017 22:43:42 | 27th February 2017 20:35:28 | 28th February 2017 08:35:28 |
    +-------------------------------------------+--------+-----------------+----------+-----------------------------+-----------------------------+-----------------------------+


    Wenns nicht mehr werden, ist es wohl ok...

    MyVDR: yaVDR-Ansible (Ubuntu 20) - softhddevice-openglosd (ffmpeg 2.8) - epgd/epg2vdr - skindesigner estuary4vdr (adaptiert) - 1920x1080@50 Hz | kodi 18 - inputstream + amazon vod
    Aerocube M40 | 300W | ASRock H61M-GE | Intel G530 | Asus ENGT520 | 2 x TT-budget S2-3200 | ASRock Smart Remote (CIR) | 4 GB RAM | 120 GB SSD | 3 TB HDD

  • Der nicht 24/7 VDR ist auch der bei dem der EPG handler aktiv ist?
    Kannst du bitte das Ergebnis von


    Code
    egrep "deadlock|handler state" /var/log/syslog


    (Pfad ggf. anpassen) posten wenn du einen deadlock hattest.


    Jörg

  • Also das Positive zuerst:
    Seit heute morgen (Aufwachen VDR) kein einziger Deadlock mehr *freu*
    (Viell. hat da das gestrige Update schon geholfen???)


    Jetzt zu deinen Fragen/Empfehlungen:

    Der nicht 24/7 VDR ist auch der bei dem der EPG handler aktiv ist?


    Hmmmm ... ich habe nur einen einzigen yaVDR (siehe Signatur) und der läuft nicht 24/7 durch, sondern geht immer mal wieder in den Ruhezustand (S3, glaub ich).
    Auf diesem PC läuft auch der epgd und die Datenbank.


    Hier noch das Ergebnis von egrep "deadlock|handler state" /var/log/syslog.1 vom gestrigen syslog VOR dem Update (der heutige ist ja "sauber")


    Danke, Jörg, für deine Bemühungen!

    MyVDR: yaVDR-Ansible (Ubuntu 20) - softhddevice-openglosd (ffmpeg 2.8) - epgd/epg2vdr - skindesigner estuary4vdr (adaptiert) - 1920x1080@50 Hz | kodi 18 - inputstream + amazon vod
    Aerocube M40 | 300W | ASRock H61M-GE | Intel G530 | Asus ENGT520 | 2 x TT-budget S2-3200 | ASRock Smart Remote (CIR) | 4 GB RAM | 120 GB SSD | 3 TB HDD

  • Und hier noch von vorgestern (syslog.2) - etwas gesprächiger bzgl. Deadlock:
    pastebin
    Pro Nachricht sind "nur" 100.000 Zeichen erlaubt, darum antworte ich mir selbst

    MyVDR: yaVDR-Ansible (Ubuntu 20) - softhddevice-openglosd (ffmpeg 2.8) - epgd/epg2vdr - skindesigner estuary4vdr (adaptiert) - 1920x1080@50 Hz | kodi 18 - inputstream + amazon vod
    Aerocube M40 | 300W | ASRock H61M-GE | Intel G530 | Asus ENGT520 | 2 x TT-budget S2-3200 | ASRock Smart Remote (CIR) | 4 GB RAM | 120 GB SSD | 3 TB HDD

    2 Mal editiert, zuletzt von davie2000 ()

  • Pro Nachricht sind "nur" 100.000 Zeichen erlaubt, darum antworte ich mir selbst


    Witzbold! Mit solchen Logs bläst man das VDR-Portal ja auch nicht auf, sondern bringt sie z.B. nach https://paste.ubuntu.com/ und verlinkt dahin.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Sorry, Gerald, du hast natürlich Recht. Da habe ich nicht dran gedacht - ich gelobe Besserung (siehe Edit) ;)


    Update:
    Gerade das syslog gecheckt und zumindest zweimal pro Tag tritt der Deadlock noch auf.
    Hier die egrep-Ausgabe:
    pastebin

    MyVDR: yaVDR-Ansible (Ubuntu 20) - softhddevice-openglosd (ffmpeg 2.8) - epgd/epg2vdr - skindesigner estuary4vdr (adaptiert) - 1920x1080@50 Hz | kodi 18 - inputstream + amazon vod
    Aerocube M40 | 300W | ASRock H61M-GE | Intel G530 | Asus ENGT520 | 2 x TT-budget S2-3200 | ASRock Smart Remote (CIR) | 4 GB RAM | 120 GB SSD | 3 TB HDD

    Einmal editiert, zuletzt von davie2000 ()

  • das ist die relevante Stelle:

    Code
    Feb 27 20:32:38 myVDR vdr: epg2vdr: Change handler state to 'active'
    Feb 27 20:32:57 myVDR vdr: epg2vdr: SQL-Error in 'execute(stmt_execute)' - Deadlock found when trying to get lock; try restarting transaction (1213) 'Deadlock found when trying to get lock; try restarting transaction' [update events set delflg = ?, updflg = ?, updsp = ? where channelid = ? and source = ? and starttime+duration > ? and starttime < ? and (tableid > ? or (tableid = ? and version <> ?));]
    Feb 27 20:33:02 myVDR vdr: epg2vdr: SQL-Error in 'execute(stmt_execute)' - Deadlock found when trying to get lock; try restarting transaction (1213) 'Deadlock found when trying to get lock; try restarting transaction' [update events set delflg = ?, updflg = ?, updsp = ? where channelid = ? and source = ? and starttime+duration > ? and starttime < ? and (tableid > ? or (tableid = ? and version <> ?));]
    Feb 27 20:33:06 myVDR vdr: epg2vdr: Change handler state to 'standby'


    der Handler wird erst aktiviert wenn der epgd mit seinem Job fertig ist, nur wer erzeugt dann den Deadlock :o.
    Hier bitte nochmal mit dem erweiterten grep:

    Code
    egrep "deadlock|handler state|epgd: State now" /var/log/syslog


    es genügen wenige Zeilen um den Deadlock herum! ;)


    Wie viele Tuner hat dein VDR?


    Jörg

  • Hallo Jörg!


    Hier die Ausgabe von egrep "Deadlock|handler state|epgd: State now" /var/log/syslog.2
    Spoiler gelöscht
    Und hier noch die gleiche Stelle aus dem syslog.2 mit allen Meldungen (also "ungegrept"):
    Spoiler gelöscht
    Mein VDR hat zwei SAT-Tuner (TT-3200; siehe Signatur).


    Vielen Dank für deine Bemühungen!


    lg
    davie2000


    PS: Gerade gesehen, dass es ein update für epg2vdr gibt. Werde das nach dem Post durchführen und weiter beobachten.



    Update
    Und hier noch mal die richtigen Daten vom 27.02.,die zu deinem Auszug passen, sorry.
    egrep-Ausgabe


    syslog.4 rund um den Deadlock:


    syslog.4 vom Starten/Aufwachen bis einige Minuten nach dem Deadlock:
    https://paste.ubuntu.com/24103397/


    Update 2 (bzw. PPS)
    Nach dem update & dist-upgrade gibts genau den gleichen Deadlock wieder. Gerade vor ein paar Minuten (nach Reboot) aufgetreten.


    Und hier nochmal das aktuelle syslog (komplett ab Start):
    https://paste.ubuntu.com/24103466/

    MyVDR: yaVDR-Ansible (Ubuntu 20) - softhddevice-openglosd (ffmpeg 2.8) - epgd/epg2vdr - skindesigner estuary4vdr (adaptiert) - 1920x1080@50 Hz | kodi 18 - inputstream + amazon vod
    Aerocube M40 | 300W | ASRock H61M-GE | Intel G530 | Asus ENGT520 | 2 x TT-budget S2-3200 | ASRock Smart Remote (CIR) | 4 GB RAM | 120 GB SSD | 3 TB HDD

    6 Mal editiert, zuletzt von davie2000 ()

  • Seit den neuesten updates über mehrere Tage keine deadlocks mehr bei mir -> gelöst.


    Vielen Dank!

    MyVDR: yaVDR-Ansible (Ubuntu 20) - softhddevice-openglosd (ffmpeg 2.8) - epgd/epg2vdr - skindesigner estuary4vdr (adaptiert) - 1920x1080@50 Hz | kodi 18 - inputstream + amazon vod
    Aerocube M40 | 300W | ASRock H61M-GE | Intel G530 | Asus ENGT520 | 2 x TT-budget S2-3200 | ASRock Smart Remote (CIR) | 4 GB RAM | 120 GB SSD | 3 TB HDD

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!