LVanselow
I'm new here

Performanceproblem beim Generieren von RSS-Feeds

Hallo zusammen,

in einem aktuellen Kunden Projekt haben wir ein doch recht massives Performance-Problem bei der Generierung von RSS Feeds.

Die Feeds basieren auf einem Datenmodell für News.

Jeder News-Datensatz ist via Fremdschlüsselbeziehung (n:1) mit einer Kategorie, einem Geschäftsbereich oder einem Standort oder einer region verbunden.

Die Anforderung ist nun, dass zu jeder Kategorie bzw. zu jeder Ausprägung jeweils ein RSS Feed a 5 News generiert werden soll.

Auf Basis einer Contentprojektion haben wir verschiedene Methoden ausprobiert, um die News abzufragen..via QUERY XML, contentSelect und Fremdschlüsselbeziehung (division.newsList) abzufragen. In jedem der 3 Fälle haben wir Generierungszeiten von 6-8 Sekunden für 5 News (~1,6 Sekunden pro News). Gibt es hier eine Empfehlung, wie man diese Anforderung umsetzen könnte bzw. eine Best-Practice ? Anbei das Template und Datenmodell.

Danke im Voraus und Gruß

0 Kudos
3 Replies
feddersen
Community Manager

Hallo Lars,

erst mal ein paar allgemeine Empfehlungen:

  • Query Logging in der Datenbank aktivieren. Bei MySQL gibt es auch sowas wie ein Slow-Query-Log. Dort kann man zum Beispiel alle Abfragen loggen, die länger als 1 Sekunde brauchen
  • EXPLAIN für die langsamen Abfragen ausführen, um zu schauen ob Indizes genutzt werden oder nicht
  • Ggf. passende Indizes in der Datenbank setzen

Oft bringt das schon erhebliche Geschwindigkeitsverbesserungen, besonders wenn Joins über mehrere Tabellen erfolgen, wie das auch hier der Fall ist.

Wie du schon gemerkt hast machen die unterschiedlichen Arten von Abfragedefinitionen kaum einen Unterschied, da die generierten SQL-Abfragen identisch sein sollten.

Sollten Indizes nicht zum gewünschten Erfolg führen, kann man noch versuchen die Zahl der notwendigen Joins zu reduzieren. Aber auch dazu müsste man sich zuerst mal die erzeugten SQL Statements und EXPLAIN Ausgaben anschauen.

Hallo Christoph,

zunächst vielen Dank für Deine Antwort.

Leider liegt es (offenbar) nicht an der SQL DB bzw. an den Statements, denn in meiner Beschreibung von oben hatte ich vergessen zu erwähnen, dass wir die SQL-Statements bereits schon mit CA Wily Introscope überprüft haben.

Die Ausführungszeit der Statements, im besonderen des Main-Statements (SELECT FIELDS FROM NEWS WHERE FS_ID IN(....) ) liegt bei ~ 20 -30ms (mit erweiterter Indizierung) bei ~ 30.000 Datensätzen.

Diese Zeiten konnten wir auch über eine Zeitmessung im Template nachvollziehen. Offenbar liegt der "Flaschenhals" irgendwo dazwischen..OR Mapper - Lazy-Load Problematik!?

Laut Wily vergeht auch eine geraume Zeit bis die Verbindung wieder geschlossen wird.

Folgende Dinge waren weiterhin auffällig :

- Das bisher undokumentierte QUERY Attribut "limit" wird nicht mit dem Native-Statement abgesetzt. Dies würde die Performance nocheinmal erheblich verbessen

- Wily verzeichnete eine Masse an ROLLBACK´s die auch gewisse Zeitspannen in Anspruch nahmen,

Testumgebung:

OracleXE11

FS Version 4.2.468.50982 (2 GB reserviert)

Hast Du vlt. noch eine Idee an was es liegen könnte?

Dank Dir und Gruß

0 Kudos

Habt ihr denn alle SQL-Abfragen betrachtet, die bei der Generierung der Seiten abgesetzt werden? Sofern es sich um eine Lazy-Loading Problematik handeln sollte würde sich das ja in einer entsprechenden Menge an SQL-Abfragen niederschlagen.

Wieviel Zeitunterschied gibt es denn zwischen der Gesamtsumme an Abfragenzeiten (SQL) und der Generierungszeit?

0 Kudos