Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
meine smarthome.db hat nun 3GB. Wie kann ich herausfinden, welche Items den Großteil des Speichers verbrauchen?
Ich vermute, dass eine Handvoll Items einfach sehr häufig aktualisiert werden und dadurch viel Speicher brauchen.
was heisst "die funktion"? alle items auf einmal? bei mir dauert alleine EIN Item meist schon ewig..
wenn du alle auf einmal anfragen willst, legst Du Dir vermutlich die DB lahm... Zudem fand ich den Einstieg in die Abfragen mit Python sehr zäh, da habe ich mir im Java Umfeld wesentlich leichter getan. Zudem musst Du den ganzen Locking- / Transaktionsmechanismus dafür vermutlich verstehen.
einfache Methode wäre - dieses Script irgendwo unter datatest.py speichern, dann mittels
Code:
python3 ./datatest.py
starten. Es werden alle vorhandenen
Items mit Anzahl Datensätze ausgegeben.
Laufzeit bei einer 80MB-Datenbank ca. 5 Sekunden.
Bei Bedarf könnte man auf diesem Weg auch Datensätze "älter" als beliebigem TimeStamp löschen - quasi die Datenbank ausmisten.
Code:
import sqlite3
your_db_file = "/usr/local/smarthome/var/db/mydb"
con = sqlite3.connect(your_db_file)
cursor = con.cursor()
print ("Items:")
print ("=========")
result = cursor.execute("select * from 'item'")
myResult = result.fetchall()
print ("Total-Items in Log: " + str(len(myResult)))
myfiller = " "
for row in myResult:
mycursor = con.cursor()
mySql="SELECT * FROM log WHERE item_id = "+str(row[0])+";"
mycursor.execute(mySql)
myResult = mycursor.fetchall()
mycursor.close()
print (row[1] + myfiller[0:len(myfiller)-len(row[1])]+ ' - Anzahl Datensätze :' + str(len(myResult)))
cursor.close()
con.close()
Gruss Andre
Nachtrag : Das funktioniert so auch im Executor-Plugin
Nachtrag : Das funktioniert so auch im Executor-Plugin
Cool. Das geht aber speziell nur mit der SQLite Datenbank. Vielleicht könnte man das so umstricken, das man das im Executor direkt mit dem Database Plugin testen kann?
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar