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
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
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...
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?
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.
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
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?
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
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.
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
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.
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)
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.