Artikel erstellen

Gesperrt
derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Artikel erstellen

Beitrag von derju » Fr 3. Okt 2014, 08:47

Hallo

Wenn ein Artikel erstellt wird, in welche Datenbank-Tabellen wird ein Eintrag gemacht.

Für was ist die con_meta_tag zuständig wird hier auch was erstellt?

Danke für Eure Hilfe.

LG - derJu
Contenido 4.8.20 | Contenido 4.9.12

derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Re: Artikel erstellen

Beitrag von derju » Fr 3. Okt 2014, 11:24

Die con_meta_tag hat bei mir in der DB 135 MB.

Das speichern von Artikeln dauern sehr lange (Minuten), kann das einen Zusammenhang haben?

LG - derJu
Contenido 4.8.20 | Contenido 4.9.12

derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Re: Artikel erstellen

Beitrag von derju » Fr 3. Okt 2014, 13:20

Wenn ich ein Artikel erstelle erscheint er auch in der con_meta_tag.

Wenn ich diesen Artikel lösche bleibt er trotzdem in der con_meta_tag warum?

Wie kann ich die Einträge aus der con_meta_tag löschen welche keinen Artikel mehr haben diese Daten sind ja dann überflüssig?

LG - derJu
Contenido 4.8.20 | Contenido 4.9.12

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Artikel erstellen

Beitrag von Faar » Mo 6. Okt 2014, 11:34

Die _meta_tag Tabelle speichert die Meta-Tags die man in den Einstellungen der Seite eintragen kann (index.follow, author, expired, usw.).
Die interne Contenido Architektur ist nicht auf große Datenbank-Tabelle ausgerichtet, die Abfragen sind teils komplex verschachtelt und insgesamt abstrakt designed.
135 MB erscheinen nicht groß, aber da es sich um eine einzige Tabelle mit wenigen Spalten handelt und nur eine davon größere Inhalte fassen kann (text), sind 135 MB doch wieder groß.
Die Einträge sind seriell, das heißt, eine Seite hat mehrere Einträge in der Spalte, die liegen nicht parallel in einer Zeile (Row).
Das ist eine Architektur, die noch aus Zeiten kleiner und schwacher Datenbank-Server stammt. Inzwischen macht man genau das Gegenteil, möglichst viel Info in eine Zeile packen, auch redundante Daten um Querabfragen zu vermeiden.
Contenido ist ein strukturiertes CMS und benützt oft Joins und ähnliches, mit Sortierungen, das zwingt die Datenbank dazu, mehrere Tabelle in den Cache zu laden, um sie zu sortieren oder Ergebnisse zwischenzulagern.

Bei kleinen Tabellen ist das meistens kein Problem, aber bei Servern deren RAM dürftig ist (oft bei shared Hosting mit beschnittenem Datenbank-RAM), hat die Datenbank wenig RAM zur Verfügung und muss bei größeren Abfragen auf die Festplatte auslagern, und ab dann kann man einen Kaffee trinken gehen.
Manchmal bringt es, die Konfiguration der Datenbank anzupassen, sofern Ressourcen verfügbar wären. Ansonsten hilft, den Datenbank-Server mit RAM aufrüsten.
Ich hatte mal mit 15 GB großen Tabellen zu tun und das lief super wegen kurzer Abfragen und 25 GB RAM auf dem 12-Kern Datenbank Server.
Aber dafür ist Contenido nicht gemacht worden.

Falls die Tabelle also so groß geworden ist, gibt es entweder unzählig viele Seiten mit Meta-Einträgen oder ein SEO-Plugin das wüst Datenmüll verteilt oder aber es gibt viele Änderungen und Löschungen ohne dass diese Tabelle beim Löschen berücksichtigt wurde. Richtig Löschen ist eine Kunst, ganz besonders bei verschachtelten und komplexen Datenbank-Strukturen.

Ich guck mal ob ich dir eine Abfrage machen kann, die dir alle Einträge deiner con_meta_tag erstellt, die keinen Eintrag in der con_art_lang haben. Das wäre vermutlich dann der Datenmüll.
Das einfach zu löschen ist ein gewisses Risiko, weil nur der Geist von Contenido weiß, welche Abhängigkeiten da noch vorhanden sind.
... gelöscht ist schneller als einem manchmal lieb ist. :twisted:
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Bug: Datenmüll in con_meta_tag

Beitrag von Faar » Mo 6. Okt 2014, 12:37

Probier das mal aus:

Code: Alles auswählen

SELECT con_meta_tag.idartlang FROM con_meta_tag WHERE con_meta_tag.idartlang NOT IN (SELECT con_art_lang.idartlang FROM con_art_lang)
Das liefert bei mir einige Werte von idartlang die nicht mehr in der con_art_lang Tabelle sind.
Das könnte man weiter spinnen und suchen, ob es die Artikel überhaupt noch gibt.
Falls nicht vorhanden, wird nicht ausreichend in allen Tabellen gelöscht beim "Löschen". :wink:

So, hab nachgeschaut:
Bei mir sind die Artikel, zu denen mal die idartlang in con_art_lang gehörten, nicht mehr vorhanden.
Da ich kein eventuell wild gewordenes SEO Plugin benütze, wird folglich beim Löschen eines Artikels nicht auch in der con_meta_tag Tabelle gelöscht.
Das wäre dann ein Bug. 8)
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Gesperrt