Speicherproblem

Speicherproblem

am 03.04.2008 17:00:10 von Peter Ludikovsky

Servus!

Umgebung: Perl 5.8.8, DBI 1.5.9, MySQL 5

Eine unserer Apps zeigt ein sehr seltsames Verhalten. Per DBI werden aus
einer MySQL DB (ca 700 MB) Daten ausgelesen und gemangled (nachdem auf
die DB nicht mehr zugegriffen wird).

Das Problem tritt bei eben diesem mangling auf, genauer bei 3 ineinander
verschachtelten maps. Bei der normalen ausführung werden diese auch nach
15 Minuten nicht beendet. Wenn man allerdings in die äusserste map ein
print auf STDERR einfügt wird das Script innerhalb von 5 min. fertig.

Ist so etwas schon mal jemandem passiert? Wenn ja, gibt es einen
Workaround? Würde es Sinn machen, die maps durch foreach zu ersetzen?

MfG
/peter

Re: Speicherproblem

am 03.04.2008 18:07:15 von Bjoern Hoehrmann

* Peter Ludikovsky wrote in de.comp.lang.perl.misc:
>Das Problem tritt bei eben diesem mangling auf, genauer bei 3 ineinander
>verschachtelten maps. Bei der normalen ausführung werden diese auch nach
>15 Minuten nicht beendet. Wenn man allerdings in die äusserste map ein
>print auf STDERR einfügt wird das Script innerhalb von 5 min. fertig.

Mit demselben Ergebnis? An sich klingt das so als würde das "print" den
Rückgabewert verändern, und zwar so, dass das ganze schneller beendet
wird. Du müsstest dann das print so einfügen, dass der Rückgabewert
gleichbleibt. Ggf. hilft es eines der Profiler Module zu benutzen um zu
sehen, was genau passiert.
--
Björn Höhrmann · mailto:bjoern@hoehrmann.de · http://bjoern.hoehrmann.de
Weinh. Str. 22 · Telefon: +49(0)621/4309674 · http://www.bjoernsworld.de
68309 Mannheim · PGP Pub. KeyID: 0xA4357E78 · http://www.websitedev.de/

Re: Speicherproblem

am 03.04.2008 18:35:57 von Peter Ludikovsky

Bjoern Hoehrmann wrote:
> * Peter Ludikovsky wrote in de.comp.lang.perl.misc:
>> Das Problem tritt bei eben diesem mangling auf, genauer bei 3 ineinander
>> verschachtelten maps. Bei der normalen ausführung werden diese auch nach
>> 15 Minuten nicht beendet. Wenn man allerdings in die äusserste map ein
>> print auf STDERR einfügt wird das Script innerhalb von 5 min. fertig.
>
> Mit demselben Ergebnis? An sich klingt das so als würde das "print" den
> Rückgabewert verändern, und zwar so, dass das ganze schneller beendet
> wird. Du müsstest dann das print so einfügen, dass der Rückgabewert
> gleichbleibt. Ggf. hilft es eines der Profiler Module zu benutzen um zu
> sehen, was genau passiert.

Ja, gleiches Ergebnis. Statt dem print hilft interessanter weise auch
ein einfaches defined $_

Re: Speicherproblem

am 03.04.2008 18:38:57 von Frank Seitz

Peter Ludikovsky wrote:
>
> Umgebung: Perl 5.8.8, DBI 1.5.9, MySQL 5
>
> Eine unserer Apps zeigt ein sehr seltsames Verhalten. Per DBI werden aus
> einer MySQL DB (ca 700 MB) Daten ausgelesen und gemangled (nachdem auf
> die DB nicht mehr zugegriffen wird).

Hoffentlich habt ihr sehr viel Hauptspeicher. Perl verbrutzelt
vermutlich ein Vielfaches der 700 MB.

> Das Problem tritt bei eben diesem mangling auf, genauer bei 3 ineinander
> verschachtelten maps. Bei der normalen ausführung werden diese auch nach
> 15 Minuten nicht beendet. Wenn man allerdings in die äusserste map ein
> print auf STDERR einfügt wird das Script innerhalb von 5 min. fertig.

Klingt obskur. Kommt das gleiche Ergebnis raus?
Was darf man sich unter diesen drei verschachtelten map konkret
vorstellen? Bin noch nie auf die Idee gekommen, map zu schachteln.

> Ist so etwas schon mal jemandem passiert? Wenn ja, gibt es einen
> Workaround? Würde es Sinn machen, die maps durch foreach zu ersetzen?

Foreach ist vermutlich das bessere Konstrukt, aber ich sehe
da keinen Zusammenhang zu dem Verhalten, das du beschreibst.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel