Ankündigung

Einklappen
Keine Ankündigung bisher.

Database Plugin - Speichernutzung ermitteln

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

    Database Plugin - Speichernutzung ermitteln

    Hallo,

    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.

    Gruß,
    Hendrik

    #2
    entweder mit phpmyadmin und entsprechenden queries oder direkt in der web gui des plugins die anzahl der datensätze ausgeben lassen?

    letzteres ist halt etwas mühseelig weil es nur für einzelne items geht und lange dauern kann.

    Kommentar


      #3
      Hallo,

      vielen Dank, Psilo.
      Würde es ggf. Sinn machen, die Funktion im Web-Interface einzubauen (ich könnte mich daran versuchen).

      Gruß,
      Hendrik

      Kommentar


        #4
        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.

        Kommentar


          #5
          Hallo henfri ,

          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
          Zuletzt geändert von AndreK; 25.03.2020, 22:30.

          Kommentar


            #6
            Zitat von AndreK Beitrag anzeigen
            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?


            Kommentar


              #7
              Hi bmx

              das ganze im Context von shNG und des Database-Plugins im Excutor :
              Dann gehts noch kürzer :-)

              Code:
              from lib.item import Items
              items = Items.get_instance()
              myfiller = "                                                            "
              allItems = items.return_items()
              for myItem in allItems:
                  if not hasattr(myItem,'db'):
                      continue
                  mycount = myItem.db('countall', 0)
                  print (myItem.property.name + myfiller[0:len(myfiller)-len(myItem.property.name)]+ ' - Anzahl Datensätze :'+str(mycount))
              Gruss Andre

              Kommentar


                #8
                Hey, vielen Dank!

                Ich habe jetzt rausgefunden, dass 80% der Daten von meinem Strom-Zähler Items kommen.

                Ist es irgendwie möglich, die Daten in der Vergangenheit weniger fein aufzulösen (ich glaube, rrd macht das so)?

                Gruß,
                Hendrik

                Kommentar


                  #9
                  Das ist leider noch nicht implementiert. Das sqlite plugin hatte das meines wissens

                  Kommentar

                  Lädt...
                  X