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.
Ankündigung
Einklappen
Keine Ankündigung bisher.
Neues Database Plugin
Einklappen
X
-
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
Einen Kommentar schreiben:
-
Doch, vor einigen Versionen sind Maintenance Routinen hinzugekommen. Früher wuchs die Datenbank einfach ins unermessliche.
Einen Kommentar schreiben:
-
Aber geändert hat sich doch nicht, oder?Zitat von Msinn Beitrag anzeigenDie 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.
Das mehrere Threads auf die DB zugreifen war doch schon immer so, oder?
Warum tritt der Fehler jetzt auf?
Einen Kommentar schreiben:
-
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
- ...
Zuletzt geändert von Msinn; 13.01.2023, 15:53.
Einen Kommentar schreiben:
-
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.Zitat von Msinn Beitrag anzeigenOk, dann werde ich mal weiter im Nebel stochern...
Edit:
Auf meinem TestRPI tritt der Fehler nicht auf. Dort ist die DB kleiner und wird weniger genutzt.
Einen Kommentar schreiben:
-
Ok, dann werde ich mal weiter im Nebel stochern...
Was bei Dir aber neu ist, sind die letzten WARNINGS.
Einen Kommentar schreiben:
-
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
Einen Kommentar schreiben:
-
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.
Einen Kommentar schreiben:
-
Korrekt.Zitat von Msinn Beitrag anzeigenDu nutzt mysql?
Vorletzte develop-Version. (Ich bekomm Scipy nicht aktualisiert, so dass bei jedem Update das UZSU-Plugin "Pflege" darf.)Zitat von Msinn Beitrag anzeigenWelche Version des database Plugins nutzt Du?
Dann mach ich mal wieder ein Update
Danke.
Einen Kommentar schreiben:
-
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.
Einen Kommentar schreiben:
-
Hallo,
seit ein paar Tagen bekomme ich sporadisch folgenden Fehler:
Manchmal gibt es Folgefehler:Code:2023-01-12 03:16:10 ERROR lib.db Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 1 expected 2 2023-01-12 03:16:10 WARNING lib.db Database [Database]: Connection error Packet sequence number wrong - got 1 expected 2 2023-01-12 03:16:10 ERROR lib.db Can not execute query: SELECT 1 (args OrderedDict()): (0, '') 2023-01-12 03:16:10 WARNING lib.db Database [Database]: Connection error (0, '') 2023-01-12 03:21:48 ERROR lib.db Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 1 expected 2 2023-01-12 03:21:48 WARNING lib.db Database [Database]: Connection error Packet sequence number wrong - got 1 expected 2 2023-01-12 03:21:48 ERROR lib.db Can not execute query: SELECT 1 (args OrderedDict()): (0, '') 2023-01-12 03:21:48 WARNING lib.db Database [Database]: Connection error (0, '')
Code:2023-01-12 03:25:29 ERROR lib.db Can not execute query: DELETE FROM log WHERE item_id = %(id)s ORDER BY time ASC LIMIT %(maxrecords)s; (args OrderedDict([('id', 301), ('maxrecords', 20000)])): 'NoneType' object has no attribute 'read' 2023-01-12 03:25:29 ERROR lib.db Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 78 expected 2 2023-01-12 03:25:29 ERROR plugins.database Database: Error for query DELETE FROM log WHERE item_id = 301 ORDER BY time ASC LIMIT 20000;: 'NoneType' object has no attribute 'read' 2023-01-12 03:25:29 WARNING lib.db Database [Database]: Connection error Packet sequence number wrong - got 78 expected 2 2023-01-12 03:25:29 ERROR plugins.database.Remove old Method plugins.database.Remove old exception: 'NoneType' object has no attribute 'read' Traceback (most recent call last): File "/usr/local/smarthome/lib/scheduler.py", line 678, in _task obj() File "/usr/local/smarthome/plugins/database/__init__.py", line 1558, in remove_older_than_maxage self._execute(self._prepare("DELETE FROM {log} WHERE item_id = :id ORDER BY time ASC LIMIT :maxrecords;"), {'id': item_id, 'maxrecords': self.max_delete_logentries}, cur=cur) File "/usr/local/smarthome/plugins/database/__init__.py", line 1660, in _execute self._query(self._db.execute, query, params, cur) File "/usr/local/smarthome/plugins/database/__init__.py", line 1690, in _query raise e File "/usr/local/smarthome/plugins/database/__init__.py", line 1687, in _query tuples = func(self._prepare(query), params, cur=cur) File "/usr/local/smarthome/lib/db.py", line 332, in execute result = cur.execute(stmt, args) File "/home/smarthome/.local/lib/python3.8/site-packages/pymysql/cursors.py", line 148, in execute result = self._query(query) File "/home/smarthome/.local/lib/python3.8/site-packages/pymysql/cursors.py", line 310, in _query conn.query(q) File "/home/smarthome/.local/lib/python3.8/site-packages/pymysql/connections.py", line 548, in query self._affected_rows = self._read_query_result(unbuffered=unbuffered) File "/home/smarthome/.local/lib/python3.8/site-packages/pymysql/connections.py", line 775, in _read_query_result result.read() File "/home/smarthome/.local/lib/python3.8/site-packages/pymysql/connections.py", line 1156, in read first_packet = self.connection._read_packet() File "/home/smarthome/.local/lib/python3.8/site-packages/pymysql/connections.py", line 711, in _read_packet recv_data = self._read_bytes(bytes_to_read) File "/home/smarthome/.local/lib/python3.8/site-packages/pymysql/connections.py", line 732, in _read_bytes data = self._rfile.read(num_bytes) AttributeError: 'NoneType' object has no attribute 'read' 2023-01-12 03:31:09 ERROR lib.db Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 1 expected 2 2023-01-12 03:31:09 WARNING lib.db Database [Database]: Connection error Packet sequence number wrong - got 1 expected 2 2023-01-12 03:31:09 ERROR lib.db Can not execute query: SELECT 1 (args OrderedDict()): (0, '') 2023-01-12 03:31:09 WARNING lib.db Database [Database]: Connection error (0, '') 2023-01-12 03:37:10 ERROR lib.db Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 1 expected 2 2023-01-12 03:37:10 WARNING lib.db Database [Database]: Connection error Packet sequence number wrong - got 1 expected 2 2023-01-12 03:37:10 WARNING lib.db fetchone: No cursor defined for stmt SELECT 1 with params () 2023-01-12 03:41:56 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.currently.cloudCover')])): Packet sequence number wrong - got 1 expected 2 2023-01-12 03:41:56 ERROR plugins.database Database: Error for query SELECT id, name, time, val_str, val_num, val_bool, changed from item WHERE name = wetter.darksky.currently.cloudCover;: Packet sequence number wrong - got 1 expected 2 2023-01-12 03:41:56 WARNING plugins.database id(): No id found for item wetter.darksky.currently.cloudCover - Exception Packet sequence number wrong - got 1 expected 2 2023-01-12 03:41:56 ERROR lib.db Can not execute query: SELECT MAX(id) FROM item; (args OrderedDict()): (0, '') 2023-01-12 03:41:56 ERROR plugins.database Database: Error for query SELECT MAX(id) FROM item;: (0, '') 2023-01-12 03:41:56 WARNING plugins.database Problem dumping wetter.darksky.currently.cloudCover: (0, '') 2023-01-12 03:41:56 WARNING plugins.database Error rolling back: (0, '') 2023-01-12 03:41:56 ERROR lib.db Can not execute query: SELECT 1 (args OrderedDict()): (0, '') 2023-01-12 03:41:56 WARNING lib.db Database [Database]: Connection error (0, '') 2023-01-12 03:41:56 ERROR lib.db Can not execute query: SELECT 1 (args OrderedDict()): (0, '') 2023-01-12 03:41:56 WARNING lib.db Database [Database]: Connection error (0, '') 2023-01-12 03:41:56 WARNING plugins.database remove_older_than_maxage skipped because db is not connected 2023-01-12 03:47:52 ERROR lib.db Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 1 expected 2 2023-01-12 03:47:52 WARNING lib.db Database [Database]: Connection error Packet sequence number wrong - got 1 expected 2 2023-01-12 03:47:52 ERROR lib.db Can not execute query: SELECT 1 (args OrderedDict()): (0, '') 2023-01-12 03:47:52 WARNING lib.db Database [Database]: Connection error (0, '') 2023-01-12 03:54:02 ERROR lib.db Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 1 expected 2 2023-01-12 03:54:02 WARNING lib.db Database [Database]: Connection error Packet sequence number wrong - got 1 expected 2 2023-01-12 03:54:02 ERROR lib.db Can not execute query: SELECT 1 (args OrderedDict()): (0, '') 2023-01-12 03:54:02 WARNING lib.db Database [Database]: Connection error (0, '') 2023-01-12 04:00:17 ERROR lib.db Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 1 expected 2 2023-01-12 04:00:17 WARNING lib.db Database [Database]: Connection error Packet sequence number wrong - got 1 expected 2 2023-01-12 04:00:17 ERROR lib.db Can not execute query: SELECT 1 (args OrderedDict()): (0, '') 2023-01-12 04:00:17 WARNING lib.db Database [Database]: Connection error (0, '') 2023-01-12 04:00:17 WARNING plugins.database remove_older_than_maxage skipped because db is not connected 2023-01-12 04:06:16 ERROR lib.db Can not execute query: SELECT 1 (args OrderedDict()): Packet sequence number wrong - got 1 expected 2 2023-01-12 04:06:16 WARNING lib.db Database [Database]: Connection error Packet sequence number wrong - got 1 expected 2 2023-01-12 04:06:16 WARNING lib.db fetchone: No cursor defined for stmt SELECT 1 with params () 2023-01-12 04:11:06 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.hour6.windGust')])): Packet sequence number wrong - got 1 expected 2 2023-01-12 04:11:06 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.hour6.windGust;: Packet sequence number wrong - got 1 expected 2 2023-01-12 04:11:06 WARNING plugins.database id(): No id found for item wetter.darksky.hourly.hour6.windGust - Exception Packet sequence number wrong - got 1 expected 2
Sagt Euch das was?
Vielen Dank und beste Grüße
Einen Kommentar schreiben:
-
Wegen dem Kopieren der Werte für ein Item... denke das einfachste wäre das über MySQL SuperPower zu tun:
https://www.w3schools.com/sql/sql_in...nto_select.asp
Also in etwa so:
INSERT INTO log (time, item_id, duration, val_str, val_num, val_bool, changed)
SELECT time, 23 as item_id, duration,val_str, val_num, val_bool, changed FROM log WHERE item_id=1;
Ist natürlich ungetestet (backup vorher erstellen). Du musst die Item IDs aus der DB besorgen (Tabelle item).
23 wäre die neue ItemID, 1 das von dem kopiert wird.
Zuletzt geändert von TCr82; 21.12.2022, 21:38.
Einen Kommentar schreiben:
-
Hi,
Ich habe noch eine Frage.
Kann man ein Item aus der DB inkl. aller Werte mit einem neuen Namen duplizieren?
Hintergrund:
aktuell habe ich ein "TotalErtrag" item meiner PV das vom Wechselrichter gefüttert wird. Nun bekomme ich eine zweite Anlage. "TotalErtrag" sollte dann aus der Summe zweier Anlagen errechnet werden. Das kopierte item wird dann weiter mit der bestehenden Anlage versorgt. Ich mag einfach meine erstellten Diagramme/Tabellen weiterführen.
Einen Kommentar schreiben:


Einen Kommentar schreiben: