FHEM Forum

FHEM => Sonstiges => Thema gestartet von: StefanW am 14 Juni 2015, 07:45:41

Titel: DbLog & deleteOldDays
Beitrag von: StefanW am 14 Juni 2015, 07:45:41
Hallo zusammen...

Ich habe da mal eine Frage bezüglich DbLog und der Funktion deleteOldDays.
In der commandref steht diesbezüglich folgendes drin:
set <name> deleteOldDays <n>

    Löscht Datensätze, die älter sind als <n> Tage. Die Anzahl der gelöschten Datensätze wird in das Reading lastRowsDeleted geschrieben.


Nur leider funktioniert das bei mir wohl nicht.
Ich bekomme auch das Reading lastRowsDeleted nicht geschrieben.
Im Log ist auch nix zu finden.

Die Datenbank ist SQLite und mittlerweile knapp 1,3GB groß.

Hat zufällig jemand eine Idee, warum das bei mir nicht funktioniert?

Gruß
Stefan
Titel: Antw:DbLog & deleteOldDays
Beitrag von: igami am 15 Juni 2015, 10:23:12
Hier schließe ich mich an.
Habe auch das Problem, dass die DB zu groß wird, mittlerweile 9 GB. Der letze count ist noch vom 25.11.2014 versuche ich den zu aktualisieren bleibt der Browser dabei die Seite zu laden. Htop zeigt mir an, dass das System nicht mehr Auslastung hat als vorher. Auch ein deleteOldDays funktioniert nicht.

Grüße
igami
Titel: Antw:DbLog & deleteOldDays
Beitrag von: DerFrickler am 15 Juni 2015, 10:53:20
funktioniert bei mir wunderbar

lastRowsDeleted 478 2015-06-15 00:00:31

getriggert wird das bei mir über ein "at", alles älter 90 Tage verschwindet aus der Datenbank...
Titel: Antw:DbLog & deleteOldDays
Beitrag von: DerFrickler am 15 Juni 2015, 10:54:50
Zitat von: StefanW am 14 Juni 2015, 07:45:41
Hallo zusammen...

Ich habe da mal eine Frage bezüglich DbLog und der Funktion deleteOldDays.
In der commandref steht diesbezüglich folgendes drin:
set <name> deleteOldDays <n>

    Löscht Datensätze, die älter sind als <n> Tage. Die Anzahl der gelöschten Datensätze wird in das Reading lastRowsDeleted geschrieben.


Nur leider funktioniert das bei mir wohl nicht.
Ich bekomme auch das Reading lastRowsDeleted nicht geschrieben.
Im Log ist auch nix zu finden.

Die Datenbank ist SQLite und mittlerweile knapp 1,3GB groß.

Hat zufällig jemand eine Idee, warum das bei mir nicht funktioniert?

Gruß
Stefan

wie alt ist Deine Datenbank und welchen Zeitraum (n-Tage) hast du gewählt?
Titel: Antw:DbLog & deleteOldDays
Beitrag von: StefanW am 15 Juni 2015, 18:51:30
Also, die Datenbank ist knapp 4 Monate alt.

Ich löse das deleteOldDays noch von Hand aus, dabei ist egal ob ich 10, 20 oder 30 Tage eingebe.
Das Ergebnis bleibt leider das gleiche.
Titel: Antw:DbLog & deleteOldDays
Beitrag von: mago0211 am 22 Juni 2015, 21:02:52
Hallo zusammen,

konnte das gleiche Verhalten beobachten. Wenn ich deleteOldDays mache wird das Reading zwar aktualisiert
lastRowsDeleted 177560 2015-06-22 04:10:29

Aber die Datenbankgröße bleibt unverändert?

Gruß
Markus
Titel: Antw:DbLog & deleteOldDays
Beitrag von: Jorge3711 am 22 Juni 2015, 21:58:36
Datenbankgröße prüfen:


SELECT
    table_schema 'Data Base Name',
    SUM(data_length + index_length) / 1024 / 1024 'Data Base Size in MB',
    SUM(data_free) / 1024 / 1024 'Free Space in MB'
FROM
    information_schema.TABLES
GROUP BY table_schema;

+--------------------+----------------------+------------------+
| Data Base Name     | Data Base Size in MB | Free Space in MB |
+--------------------+----------------------+------------------+
| fhem               |           9.10937500 |       0.00000000 |
| fhem_test          |           6.10937500 |       0.00000000 |
| information_schema |           0.00390625 |       0.00000000 |
| mysql              |           0.54202366 |       0.00017548 |
+--------------------+----------------------+------------------+




Mach mal ein

mysql> optimize table history;
+--------------+----------+----------+----------+
| Table        | Op       | Msg_type | Msg_text |
+--------------+----------+----------+----------+
| fhem.history | optimize | status   | OK       |
+--------------+----------+----------+----------+


auf die Datenbank und prüfe die DB Größe danach nochmal:


SELECT
    table_schema 'Data Base Name',
    SUM(data_length + index_length) / 1024 / 1024 'Data Base Size in MB',
    SUM(data_free) / 1024 / 1024 'Free Space in MB'
FROM
    information_schema.TABLES
GROUP BY table_schema;

+--------------------+----------------------+------------------+
| Data Base Name     | Data Base Size in MB | Free Space in MB |
+--------------------+----------------------+------------------+
| fhem               |           7.10937500 |       0.00000000 |
| fhem_test          |           6.10937500 |       0.00000000 |
| information_schema |           0.00390625 |       0.00000000 |
| mysql              |           0.54202366 |       0.00017548 |
+--------------------+----------------------+------------------+


Jetzt kleiner?
Titel: Antw:DbLog & deleteOldDays
Beitrag von: mago0211 am 23 Juni 2015, 21:52:44
Hallo Jorge,

erstmal Danke für deine Antwort.

der Befehl:
sudo sqlite3 fhem.db "VACUUM;"
brachte bei mir Abhilfe.

Bedeutet also das ich nach jedem deleteOldDays am besten den VACUUM Befehl hinterher ausführe?

Gruß
Markus
Titel: Antw:DbLog & deleteOldDays
Beitrag von: Jorge3711 am 24 Juni 2015, 14:04:46
Das bedeutet, dass durch deleteOldDays in der Datenbank die entsprechenden Einträge als gelöscht markiert werden. Die Datenbankdateien selbst werden deshalb nicht kleiner und ist bei den Datenbanken die ich kenne normal. Das erreichst Du erst durch deinen genannten Befehl. Wenn dass Deine Erwartung war, musst Du den Befehl jedes Mal ausführen.
Titel: Antw:DbLog & deleteOldDays
Beitrag von: mago0211 am 24 Juni 2015, 20:24:02
Ah Ok,

Danke für deine Antwort.

Wäre es sinnvoll das in die Doku zu schreiben? Es scheint ja noch ein paar andere SQL unerfahrenen User zu geben die das nicht wissen.

Gruß
Markus
Titel: Antw:DbLog & deleteOldDays
Beitrag von: betateilchen am 26 Juni 2015, 09:24:03
Das Problem tritt nur bei sqlite Datenbanken auf.
Und das mit dem Vacuum steht - wenn ich mich recht erinnere - auch irgend schon in einer Doku.

Man kann das als Pragma direkt beim ersten Anlegen der sqlite-Datenbank angeben, dann macht sqlite das automatisch.
Titel: Antw:DbLog & deleteOldDays
Beitrag von: AitschPi am 05 Juli 2015, 15:04:22
Zitat von: betateilchen am 26 Juni 2015, 09:24:03
Und das mit dem Vacuum steht - wenn ich mich recht erinnere - auch irgend schon in einer Doku.
Steht auf jeden Fall in der Referenz zu configDB - da habe ich das heute gesehen und dann google befragt, was das macht und ob ich das in mySQL auch brauche... ;o)
Titel: Antw:DbLog & deleteOldDays
Beitrag von: rapster am 11 Juli 2015, 01:10:29
In der commandRef steht allerdings autovacuum = 2;

Das bedeutet ohne zusätzlichem setzen des "incremental_vacuum pragma" wird hier nix automatisch ausgeführt.

Wenn die Datenbank automatisch verkleinert werden soll muss autovacuum = 1 gesetzt werden.

EDIT:
- nach Ändern des autovacuum pragmas, nicht vergessen 1x "VACUUM;" manuell auszuführen damit dies übernommen wird.