DbRep - Import von 770MB csv (8.758.319 Datensätze) in mySQL, RasPi 3 stürzt ab.

Begonnen von Frank_Huber, 18 Januar 2019, 09:42:46

Vorheriges Thema - Nächstes Thema

Wuppi68

Zitat von: Wernieman am 18 Januar 2019, 13:27:05
Dachte ein Kollege auch mal ;o)
(War allerdings ein mehrere GByte Großer mySQL-Dump ...)

naja, es geht .... muss aber genug Platz im SWAP/TMP vorhanden sein
Jetzt auf nem I3 und primär Homematic - kein Support für cfg Editierer

Support heißt nicht wenn die Frau zu Ihrem Mann sagt: Geh mal bitte zum Frauenarzt, ich habe Bauchschmerzen

Wernieman

Und es braucht Zeit zum laden, die wir eigentlich nicht hatten ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

DS_Starter

Hallo Frank,

wie seiht es bei dir aus ?

Ich habe mal bei mir getestet. Habe rund 28Mio Datensätze exportiert und in etwa 2 Stunden in die MySQL importiert.
Die Warnungen habe ich auch festgestellt. Schau mal woran das liegt. Ist mir früher nie aufgefallen.


2019.01.18 19:00:22.169 1: PERL WARNING: Malformed UTF-8 character (unexpected non-continuation byte 0x43, immediately after start byte 0xc2) in transliteration (tr///) at ./FHEM/93_DbRep.pm line 5410, <FH> line 28085845.
2019.01.18 19:00:22.803 1: PERL WARNING: utf8 "\xC2" does not map to Unicode at ./FHEM/93_DbRep.pm line 5443, <FH> line 28089041.
2019.01.18 19:00:22.804 1: PERL WARNING: Malformed UTF-8 character (unexpected non-continuation byte 0x43, immediately after start byte 0xc2) in transliteration (tr///) at ./FHEM/93_DbRep.pm line 5410, <FH> line 28089041.
2019.01.18 19:00:22.827 4: DbRep Rep.MariaVM.Import - execute command after import: 'set LogMariaVM reopen'
2019.01.18 19:00:22.831 3: DbLog LogMariaVM: Reopen requested.
2019.01.18 19:00:22.832 3: DbLog LogMariaVM - Creating Push-Handle to database mysql:database=fhemtest;host=192.168.2.44;port=3306 with user fhemtest
2019.01.18 19:00:22.833 3: DbLog LogMariaVM - Push-Handle to db mysql:database=fhemtest;host=192.168.2.44;port=3306 created
2019.01.18 19:00:22.834 3: DbLog LogMariaVM - UTF8 support enabled
2019.01.18 19:00:22.948 2: DbRep Rep.MariaVM.Import - command message after import: "Reopen executed."
2019.01.18 19:00:22.995 3: DbRep Rep.MariaVM.Import - Number of imported datasets to fhemtest from file /sds1/backup/export.txt: 28089090
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Frank_Huber

Zitat von: DS_Starter am 18 Januar 2019, 23:22:30
Konnte die Warnungen beseitigen und habe einen Fix eingecheckt.
Ja, habs gesehen.
Meiner schafft noch. (seit 11.08)
Ich geb bescheid.

Gesendet von meinem Doogee S60 mit Tapatalk


Frank_Huber

So wie es aussieht ist er abgeschmiert.
Komme nicht mehr drauf. Nicht per Browser auf FHEM, nicht per SSH und nicht per VNC.
Auf ping reagiert er aber.

Kann ich wohl erst Montag weitermachen.
(RasPi steht im Büro)

Gesendet von meinem Doogee S60 mit Tapatalk


Frank_Huber

Kam jetzt doch drauf...

aus dem Import dbRep deice:
state   Process died prematurely   2019-01-19 08:57:38
im Log hab ich "cannot fork cannot allocate memory" Meldungen.

War wohl zuviel.
Werd das am Montag nochmal starten. im 4 Teilen zu je ca 2 Mio Datensätzen.

Nach dem Fix, sollte ich die oben geschriebenen Änderungen trotzdem vorher machen?

DS_Starter

Nein, brauchst nichts ändern. RAM Verbrauch bleibt auch stabil. Habe ich gerade nochmal nachgeschaut mit einem laufenden Test.
Eine Teilung der Importmenge ist wahrscheinlich gut. Ich mache es auf einer VM mit 1GB Speicher und konnte die 28Mio in einem File importieren, allerdings ist ein NUC drunter.
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Frank_Huber


Wernieman

Würde es bringen, eventuell mysql für den Import vorher "zu tunen"? z.B. keine BinLogs schreiben etc.?

Es ist ja jederzeit möglich, dieses tunen zurückzunehmen ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

DS_Starter

Man kann bestimmt noch tunen, keine Frage. Der Import ist nur so einfach gehalten dass es problemlos zwischen SQLite, MySQL und Postgre hin und her funktioniert ohne auf Spezifika der jeweiligen DB einzugehen oder diese auszureizen.
Vielleicht stelle ich mir dieser Aufgabe nochmal, aber das braucht wie üblich viel Zeit für die Ausarbeitung und Testen.
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Frank_Huber

So, in vier Teilen konnte ich alles erfolgreich importieren. Jetzt mal die Performance beobachten und mit den Plots spielen...

Hab auch schmerzlich lernen müssen dass Linux den gesamten Inhalt des /tmp Ordner bei jedem booten löscht.
dachte gestern ich mach nen Reboot nach den ersten zwei Import files. war ne blöde Idee. musste dannach die Hälfte nochmal exportieren...

Wo wir gerade beim export sind. ´Hier hätte ich noch einen Verbesserungsvorschlag.
Ein Attribut z.B. "maxlinesperfile".
Setzt man das aus z.B. 1.000.000 wird mit der 1.000.001en Zeile automatisch eine neue Datei angelegt. z.B. mit automatischen Endungen _part1 _part2.......

So etwas würde einen größeren Export auf kleinen Systemen erleichtern. Das Limitieren auf einen Zeitbereich sagt ja nichts über die Datenmenge aus.

Danke & Grüße

Frank_Huber

Nachtrag:
die Importierten Daten haben bei der EInheit Fehler:

alte DB SQLite:
2016-11-16 13:14:39|Flur_KG_Ost_Temp|OWTHERM|temperature: 10.4375|temperature|10.4375|°C
2016-11-16 14:04:39|Flur_KG_Ost_Temp|OWTHERM|temperature: 10.5|temperature|10.5|°C
2016-11-16 15:04:39|Flur_KG_Ost_Temp|OWTHERM|temperature: 10.6875|temperature|10.6875|°C
2016-11-16 16:04:39|Flur_KG_Ost_Temp|OWTHERM|temperature: 10.6875|temperature|10.6875|°C
2016-11-16 17:04:39|Flur_KG_Ost_Temp|OWTHERM|temperature: 10.75|temperature|10.75|°C


die gleichen Datensätze nach dem Import in mySQL:
| 2016-11-16 13:14:39 | Flur_KG_Ost_Temp | OWTHERM | temperature: 10.4375 | temperature | 10.4375 | ?C   |
| 2016-11-16 14:04:39 | Flur_KG_Ost_Temp | OWTHERM | temperature: 10.5    | temperature | 10.5    | ?C   |
| 2016-11-16 15:04:39 | Flur_KG_Ost_Temp | OWTHERM | temperature: 10.6875 | temperature | 10.6875 | ?C   |
| 2016-11-16 16:04:39 | Flur_KG_Ost_Temp | OWTHERM | temperature: 10.6875 | temperature | 10.6875 | ?C   |
| 2016-11-16 17:04:39 | Flur_KG_Ost_Temp | OWTHERM | temperature: 10.75   | temperature | 10.75   | ?C   |


Ne Idee wie sich das beheben lässt?

DS_Starter

Hallo Frank,


sqlCmd update history set TIMESTAMP=TIMESTAMP,UNIT='°C' WHERE UNIT='?C'


sollte es bringen.

Den Vorschlag setzte ich mal auf meine ToDo.

Grüße
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Frank_Huber

Zitat von: DS_Starter am 22 Januar 2019, 13:28:22

sqlCmd update history set TIMESTAMP=TIMESTAMP,UNIT='°C' WHERE UNIT='?C'

sollte es bringen.
Danke werde ich versuchen, aber sollte es nicht nach dem Import unverändert sein?
Wenn ich es richtig sehe wurde es im Export schon "verhagelt".

Auf jeden Fall hat aber die Migration SQLite zu mySQL am Ende gut funktioniert.