von Dominique Stender, 04.09.2007

Lösungen für eine bessere Performance in TYPO3 Version 4: TYPO3 ausreizen

Aus dem
t3n Magazin Nr. 9

An und für sich ist dagegen nichts einzuwenden, jedoch führt ein SQL-Statement à la „...WHERE pages.starttime<=$GLOBALS['SIM_EXEC_TIME'] ...“ dazu, dass der Query-Cache von MySQL im Sekundentakt ungültig wird. Hier sollte man sich die Frage stellen, ob zu Gunsten einer besseren Effizient des Query-Caches und damit einer insgesamt besseren Performance des Systems die Genauigkeit der Online- und Offline-Zustände wirklich bei einer Sekunde liegen muss. Eine Genauigkeit von zehn Minuten sollte ebenfalls ausreichen und erhöht zudem die Wirksamkeit des MySQL-Query-Caches.

Daher wurde die statische Methode „highPerformance::roundTime()“ in die Extension implementiert und relevante Stellen im TYPO3-Kern so umgeschrieben, dass „roundTime()“ zur Rundung von Timestamps verwendet wird. Die Methode verfügt über einen optionalen zweiten Parameter, über den der Rundungsfaktor von zehn Minuten in Einzelfällen angepasst werden kann.

REPLACE statt DELETE und INSERT

TYPO3 benutzt bei einigen Tabellen, insbesondere bei den hoch frequentierten Tabellen für die Caches und die Frontend-Sessions, eine Kombination aus einem DELETE- und einem anschließenden INSERT-Statement, um Inhalte zu aktualisieren. Im Falle des Frontend-Caches ist die Logik kurz gesagt diese: Wird eine Cache-fähige, aber noch nicht zwischengespeicherte Seite aufgerufen, legt TYPO3 zunächst einen temporären Eintrag in der Cache-Tabelle an. Ab jetzt sehen Besucher der Webseite die Meldung „Page is being generated“. Unterdessen läuft die unter Umständen zeitaufwändige Generierung des HTML-Codes ab. Anschließend wird der temporäre Eintrag in der Datenbank über DELETE gelöscht und das soeben generierte HTML mittels INSERT in die Tabelle geschrieben. Von jetzt an ist die Seite zwischengespeichert und zukünftige Besucher sehen den Inhalt, den TYPO3 soeben in die Datenbank geschrieben hat.

Das Problem dabei: Zwischen dem DELETE- und dem INSERT-Statement vergeht ein klein wenig Zeit. Auf großen Systemen kann das zu einer so genannten „Race-Condition“ führen, bei der sich parallel laufende Prozesse gegenseitig behindern. Die Folge: Es besteht eine hohe Wahrscheinlichkeit, dass die Seite „Page is being generated“ nicht mehr verschwindet.

Seite:  1 2 3 4 5 6 7 8 9 10

Empfohlene Artikel

Was erwartet uns in TYPO3 4.7?

Was erwartet uns in TYPO3 4.7?

Plangemäß ist inzwischen die zweite Alpha von TYPO3 4.7 erschienen – ein guter Zeitpunkt, um einen Blick auf die...