Newsarchiv mit über 10.000 Einträgen sprengt Speicher
Hallo zusammen,
ich stehe gerade vor der Aufgabe eine Webseite von Drupal noch Contao zu überführen und dabei den alten Bestand an News aus SEO-Gründen mit zu übernehmen. Dabei handelt es sich um derzeit rund 10.500 Beiträge die größtenteils nur aus dem Teaser bestehen und insgesamt in der Datenbanktabelle tl_news gerade mal 6,2 MB belegen. An sich also recht überschaubar.
Wenn nun ein neuer Beitrag erfasst werden soll oder ein älterer bearbeitet wird kommt es allerdings immer zu einem Speicherfehler dieser Art:
Code:
PHP Fatal error: Allowed memory size of 268435456 bytes exhausted
Das sieht mir ganz danach aus als wenn Contao wirklich mehr als 256MB an Arbeitsspeicher haben will nur um die News abzuspeichern. Kann das mit rechten Dingen zugehen? Und wenn ja - wie kann ich das umgehen ohne ein eigenes News-Modul zu programmieren? Die Release 3.3 hatte ich noch nicht getestet da ich für den Kunden die LTS 3.2 einsetzen sollte.
Vielen Dank schon mal im Voraus.
JBN
Ein Select den Speicher zu füllen
Ich habe das Problem nun soweit eingegrenzt das bei der Erstellung eines neuen News-Eintrags ein Select ausgeführt wird das alle Artikel aus der tl_news nebst diverser weiterer Daten aus den Tabellen tl_news_archive und tl_user ermittelt - wobei ich noch nicht gefunden habe, wo und warum dieses Statement benötigt wird.
Durch die Ergebnisse in diesem Statement werden aus den rund 6,5MB in der Datenbank-Tabelle tl_news eine Datenmenge von über 150MB wenn man dieses Statement direkt in phpMyAdmin mal ausgeben lässt. Das das in Verbindung mit der Datenhaltung dann die 256MB RAM für die PHP Prozess killt, ist verständlich.
Kann mir jemand mal den Wald vor Augen lichten und mir sagen, wo ich ansetzen sollte um diese Speichernutzung einzugrenzen? Mal abgesehen davon dem Kunden zu sagen das er alte News löschen soll... was aber keine gute Option wäre.
Hier das besagte SQL-Statement:
Code:
SELECT tl_news.*, j1.id AS pid__id, j1.tstamp AS pid__tstamp, j1.title AS pid__title, j1.jumpTo AS pid__jumpTo, j1.protected AS pid__protected, j1.groups AS pid__groups, j1.allowComments AS pid__allowComments, j1.notify AS pid__notify, j1.sortOrder AS pid__sortOrder, j1.perPage AS pid__perPage, j1.moderate AS pid__moderate, j1.bbcode AS pid__bbcode, j1.requireLogin AS pid__requireLogin, j1.disableCaptcha AS pid__disableCaptcha, j2.id AS author__id, j2.tstamp AS author__tstamp, j2.username AS author__username, j2.name AS author__name, j2.email AS author__email, j2.google AS author__google, j2.language AS author__language, j2.backendTheme AS author__backendTheme, j2.uploader AS author__uploader, j2.showHelp AS author__showHelp, j2.thumbnails AS author__thumbnails, j2.useRTE AS author__useRTE, j2.useCE AS author__useCE, j2.password AS author__password, j2.pwChange AS author__pwChange, j2.admin AS author__admin, j2.groups AS author__groups, j2.inherit AS author__inherit, j2.modules AS author__modules, j2.themes AS author__themes, j2.pagemounts AS author__pagemounts, j2.alpty AS author__alpty, j2.filemounts AS author__filemounts, j2.fop AS author__fop, j2.forms AS author__forms, j2.formp AS author__formp, j2.disable AS author__disable, j2.start AS author__start, j2.stop AS author__stop, j2.session AS author__session, j2.dateAdded AS author__dateAdded, j2.lastLogin AS author__lastLogin, j2.currentLogin AS author__currentLogin, j2.loginCount AS author__loginCount, j2.locked AS author__locked, j2.calendars AS author__calendars, j2.calendarp AS author__calendarp, j2.calendarfeeds AS author__calendarfeeds, j2.calendarfeedp AS author__calendarfeedp, j2.faqs AS author__faqs, j2.faqp AS author__faqp, j2.news AS author__news, j2.newp AS author__newp, j2.newsfeeds AS author__newsfeeds, j2.newsfeedp AS author__newsfeedp, j2.newsletters AS author__newsletters, j2.newsletterp AS author__newsletterp FROM tl_news LEFT JOIN tl_news_archive j1 ON tl_news.pid=j1.id LEFT JOIN tl_user j2 ON tl_news.author=j2.id WHERE tl_news.pid='1' AND tl_news.source='default' AND (tl_news.start='' OR tl_news.start<1408466706) AND (tl_news.stop='' OR tl_news.stop>1408466706) AND tl_news.published=1 ORDER BY tl_news.date DESC
Vielen Dank noch mal im Voraus in der Hoffnung auf eine kleine Machete (zum Wald auslichten).
Thanx.
JBN
Sitemap - Erstellung optimieren
Leider hatte ich noch keine Zeit mich mit der Analyse zu beschäftigen - aber ich kann mir derzeit keinen Grund vorstellen, warum man wirklich alle Newsmeldungen mit dem ganzen Overhead im Speicher halten muss. Die Sitemap beinhaltet doch nur die URLs - wozu müssen da Informationen über den Autor und die Teasertexte aus den News mit eingeladen werden? Und wenn sie für eventuelle Entscheidungen, ob die News "published" ist oder nicht, benötigt werden, dann sollte das entleeren des Speichers zwischendurch ermöglichen das eben nicht alle Daten im Speicher bleiben. Aber vielleicht denke ich auch gerade "zu einfach" - ich werde es aber noch herausfinden.
Vielen Dank jedenfalls an alle für die Tipps die mir den Start des Projektes erst einmal wieder ermöglicht haben. Ich hatte schon alle Felle davon schwimmen sehen...
Ich wünsche ein schönes Wochenende.
JBN