[TYPO3-german] Fatal error: Allowed memory size
bernd wilke
t3ng at bernd-wilke.net
Fri Feb 20 09:13:09 CET 2015
Am 19.02.15 um 18:27 schrieb JCL - Johannes C. Laxander:
>
> Hallo Bernd,
>
> danke für deine Hinweise...
>
>>> Was genau besagt diese Fehlermeldung? Ich vermute, es hängt
>> mit einer Exbase-Extension zusammen. Was könnte hier die
>> Ursache sein?
>>
>> zu viele daten.
>> wenn die Konfiguration und das Datenvolumen unglücklich ist
>> werden riesige Datenmengen geladen, die in keinen Speicher
>> mehr passen.
>>
>
> Was sind zu viele Daten? Es sind weniger als 500 Datensätze!?
kommt sicher auf die Datensatzgröße an. ich würde aber vermuten:
eigentlich nicht.
>
>> Vorsicht bei:
>> + sehr vielen Datensätzen, wenn bei extbase mal eben alle Datensätze
>> geladen werden nur um zb. die Anzahl festzustellen.
>> ansatz: andere als die std funktionen benutzen, queries
>> manuell aufbauen
>>
>
> Die Anzahl der Datensätze (count!?) wird m.E. nicht festgestellt, aber ich überprüfe dies noch mal.
was gemacht wird ist eigentlich egal, es geht darum dass evtl. wirklich
alle Daten in den Speicher geladen werden ohen dass diese tatsächlich
benötigt werden.
>
>> + wenn Datensätze viele Relationen haben, die evtl. auch noch alle
>> nachgeladen werden sollen. insbesondere bei rekursiven
>> Relationen könnte es zu eienr "Explosion" kommen. hier könnte
>> man mit LazyLoad das ganze eindämmen.
>>
>
> Es gibt schon ein paar Relationen, ca. 10. Was sind "viele Relationen"?
> Ich versuche mal, das ganze mit LazyLoad einzudämmen...
auchhier wieder: es kommt darauf an. 10 Relationen pro Datensatz auf
andere Datensätze mit vielen Daten und ggfls weiteren Relationen und
schon sprengt es den Speicher
>
>> da das ganz im for-VH auftritt könnte es an folgender
>> Konstruktion liegen:
>>
>> <f:for each="{records}" as="record" iteraton="iterator">
>> <f:if condition="{iterator.isFirst}">
>> :
>> <div>erster von {records->f:count()} Datensätzen</div>
>> :
>> </f:if>
>> </f:for>
>> bei vielen Datensätzen ist das extrem ineffizient.
>>
>
> for-VH wird merfach eingesetzt, auch mit iterator.isFirst, aber nicht mit records->f:count
dies hier sollte nur ein beispiel sein. es werden alle Datensätze in den
Speicher geladen, dmait das f:for darüber iterieren kann - und dann wird
nur etwas mit dem ersten Datensatz gemacht. count() sollte hier nur ein
Beispiel sein, wo 'alle' Datensätze benötigt werden. (eigentlich wird
nur die Anzahl benötigt und ganz bestimmt nicht alle Felder aller
Datensätze - und ganz bestimmt nicht irgendwelche relationalen
Informationen, die evtl. auch noch vollständig in den Speicher geladen
werden.
beispiel:
filialen (tt_address mit erweiterung: 1:n relation zu mitarbeiter)
mitarbeiter (fe_user incl. einem Bild von ~1 MB ;-) )
jetzt wollen wir die Info der Hauptzentrale ausgeben:
<f:for filalen as="filale" iteration="iterator">
<f:if condition="{filiale.isZentrale}">
{filiale.address}
</f:if>
</f:for>
wenn jetzt alle Filialen (500?) mit allen Mitarbeitern (jeweils 100?)
und deren Bilder[1] in den Speicher geladen werden ist das schon mächtig
groß für eine einzelne Adresse
[1] mit FAL werden die Bilder nicht wirklich in den Speicher geladen
sondern nur ein FAL-record, der erheblich kleiner als das Bild ist.
bernd
--
http://www.pi-phi.de/cheatsheet.html
More information about the TYPO3-german
mailing list