Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Database Plugin

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Ja, den Fehler hatten psilo und Onkelandy auch. Der tritt bisher nur mit mysql auf, nicht mit sqlite3. Daraus schließe ich: Du nutzt mysql?

    Welche Version des database Plugins nutzt Du?

    Seit meinen letzten Änderungen ist der Fehler bei den beiden (soweit ich weiss) nicht mehr aufgetreten.
    Das Problem liegt in pymysql (oder mysql selbst) welches nur einen aktiven Cursor je connection unterstützt.
    Viele Grüße
    Martin

    There is no cloud. It's only someone else's computer.

    Kommentar


      Zitat von Msinn Beitrag anzeigen
      Du nutzt mysql?
      Korrekt.

      Zitat von Msinn Beitrag anzeigen
      Welche Version des database Plugins nutzt Du?
      Vorletzte develop-Version. (Ich bekomm Scipy nicht aktualisiert, so dass bei jedem Update das UZSU-Plugin "Pflege" darf.)
      Dann mach ich mal wieder ein Update

      Danke.

      Kommentar


        Msinn bei mir kommt mglw dazu, dass ich die 8 GB DB gecleared hatte. Ich glaube das Volumen hat den Fehler wahrscheinlicher gemacht.

        Nachdem auch mit neuem Datenbestand der Fehler am Dez. 20 2022 11:15 wieder da war, ist er allerdings nicht mehr aufgetreten - Du hattest da noch was gefixt. Ich habe seitdem aber auch seltener neu gestartet.

        PS: Der Fehler kam bisher auch immer nur beim Neustart, nicht im Betrieb. Der Betrieb inkl erfassen und auslesen von Daten lief trotzdem immer augenscheinlich einwandfrei.

        Kommentar


          Msinn
          Ich habe gestern nochmal auf den aktuellen develop hochgezogen.

          Der Fehler tritt (zumindest bei mir) weiterhin und auch im Betrieb auf.

          Code:
          2023-01-13  10:07:00 ERROR    lib.db                                   Can not execute query: SELECT id, name, time, val_str, val_num, val_bool, changed from item WHERE name = %(id)s; (args OrderedDict([('id', 'wetter.darksky.hourly.hour3.windSpeed')])): Packet sequence number wrong - got 1 expected 2
          2023-01-13  10:07:00 ERROR    plugins.database                         Database: Error for query SELECT id, name, time, val_str, val_num, val_bool, changed from item WHERE name = wetter.darksky.hourly.hour3.windSpeed;: Packet sequence number wrong - got 1 expected 2
          2023-01-13  10:07:00 WARNING  plugins.database                         id(): No id found for item wetter.darksky.hourly.hour3.windSpeed - Exception Packet sequence number wrong - got 1 expected 2
          2023-01-13  10:07:00 ERROR    lib.db                                   Can not execute query: SELECT MAX(id) FROM item; (args OrderedDict()): (0, '')
          2023-01-13  10:07:00 ERROR    plugins.database                         Database: Error for query SELECT MAX(id) FROM item;: (0, '')
          2023-01-13  10:07:00 WARNING  plugins.database                         Problem dumping wetter.darksky.hourly.hour3.windSpeed: (0, '')
          2023-01-13  10:07:00 WARNING  plugins.database                         Error rolling back: (0, '')
          2023-01-13  10:07:00 ERROR    lib.db                                   Can not execute query: SELECT 1 (args OrderedDict()): (0, '')
          2023-01-13  10:07:00 WARNING  lib.db                                   Database [Database]: Connection error (0, '')
          2023-01-13  10:07:00 WARNING  lib.db                                   fetchone: No cursor defined for stmt SELECT 1 with params ()
          2023-01-13  10:08:24 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
          2023-01-13  10:09:56 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
          2023-01-13  10:11:27 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
          2023-01-13  10:12:59 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
          2023-01-13  10:14:31 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected
          2023-01-13  10:16:03 WARNING  plugins.database                         remove_older_than_maxage skipped because db is not connected​

          Kommentar


            Ok, dann werde ich mal weiter im Nebel stochern...

            Was bei Dir aber neu ist, sind die letzten WARNINGS.
            Viele Grüße
            Martin

            There is no cloud. It's only someone else's computer.

            Kommentar


              Zitat von Msinn Beitrag anzeigen
              Ok, dann werde ich mal weiter im Nebel stochern...
              Ich konnte bislang keinen Auslöser feststellen. Aber, es scheint das der RPI nach einer gewissen Menge der Fehler auf Volllast läuft. Zumindest beginnt das Viessmann Plugin beim Lesen der seriellen Inputs Fehler zu erkennen. Das passiert immer dann, wenn der RPI längere Zeit auf Volllast läuft.

              Edit:
              Auf meinem TestRPI tritt der Fehler nicht auf. Dort ist die DB kleiner und wird weniger genutzt.

              Kommentar


                Die Ursache dürfte darin liegen, dass pymysql nur einen Cursor je connection unterstützt und das database Plugin aus mehreren Threads zur gleichen Zeit unterschiedliche Cursors nutzt.

                z.B.
                • normales lesen/schreiben von Daten und zeitgleich (per scheduler gestartet, also in einem anderen Thread) eine Routine, die Daten-Maintenance macht
                • normales lesen/schreiben von Daten und zeitgleich aus einem anderen Plugin (also auch aus einem anderen Thread) ein Abruf von Daten (über die db() Funktion des database Plugins)
                • normales lesen/schreiben von Daten und zeitgleich aus dem websocket Modul oder dem alten visu_websocket Plugin (also auch aus einem anderen Thread) ein Abruf von Daten für Plots in der Visu
                • ...
                Für einen Teil des ersten Falles hatte ich im Plugin in der letzten Änderung eine zweite Verbindung für Teile der Maintenance aufgemacht. Das war noch nicht als vollständige Lösung gedacht, sondern um festzustellen ob sich die Meldungshäufigkeit ändert (zumal die bisherigen Änderungen sich nur auf den Startzeitraum bezogen).

                Zuletzt geändert von Msinn; 13.01.2023, 15:53.
                Viele Grüße
                Martin

                There is no cloud. It's only someone else's computer.

                Kommentar


                  Zitat von Msinn Beitrag anzeigen
                  Die Ursache dürfte darin liegen, dass pymysql nur einen Cursor je connection unterstützt und das database Plugin aus mehreren Threads zur gleichen Zeit unterschiedliche Cursors nutzt.
                  Aber geändert hat sich doch nicht, oder?
                  Das mehrere Threads auf die DB zugreifen war doch schon immer so, oder?
                  Warum tritt der Fehler jetzt auf?

                  Kommentar


                    Doch, vor einigen Versionen sind Maintenance Routinen hinzugekommen. Früher wuchs die Datenbank einfach ins unermessliche.
                    Viele Grüße
                    Martin

                    There is no cloud. It's only someone else's computer.

                    Kommentar


                      Sisamiwe Bei Dir muss noch irgendwas anders sein als bei psilo und Onkelandy . Bei den beiden trat das nur nach dem Start auf, bei Dir (wie Du sagst) aber auch später zur Laufzeit

                      Viele Grüße
                      Martin

                      There is no cloud. It's only someone else's computer.

                      Kommentar


                        Moin,

                        Ich habe alle 1-2 Minuten einen Logeintrag des database-Plugins „remove_older_than_maxage“. Wird das Löschen alter Daten zwingend bei jedem item-update gemacht, oder kann man das auch bündeln? Also zum Beispiel einmal am Tag eine Bereinigung?

                        Den Logeintrag kann ich natürlich unterdrücken. Aber was ist hinsichtlich Belastung der Datenbank bzw. Systemlast günstiger?

                        Gruß
                        Wolfram

                        Kommentar


                          Das wird bewusst in kleineren Häppchen gemacht. Kleine Häppchen sind wichtig, wenn die max_age Attribute bzw. Parameter neu gesetzt wurden und viele zu löschende Daten vorhanden sind, damit die normale Nutzung der Datenbank nicht behindert wird. (Sonst könnte sich z.B. der Aufbau der Plots in de Visu velangsamen.

                          Im Normalfall (wenn die mengen alter Daten gelöscht sind), kannst Du durch Ändern des Parameters removeold_cycle das Interval hochsetzen. Standardmäßig steht der auf 91 Sekunden. Den Wert kannst Du je nach Wunsch auf mehrere Stunden erhöhen.
                          Viele Grüße
                          Martin

                          There is no cloud. It's only someone else's computer.

                          Kommentar

                          Lädt...
                          X