Neu Überlastung des Servers durch Ihre Datenbank über Abfragen

Baltazar80

Gut bekanntes Mitglied
18. Januar 2014
217
16
Hallo,

heute haben wir eine E-Mail von All-Inkl. erhalten, dass unsere Datenbank durch zu lange Abfragenlaufzeiten (teil parallel) die Server überlastet werden, und dass die Leidtung der anderen Kunden beinflusst? Was können wir da machen, und wodurch wird das verursacht. Wir haben erst kürzlich von 4.05 auf JTL Shop 5.14 geupdatet.

Hier das Schreiben von All-Inkl:

wir mussten eine anhaltende Überlastung des Server, ausgelöst durch Ihre Datenbank ..... feststellen. Dabei laufen einige Abfragen teils über 60000 Sekunden und lasten dabei die CPU aus. Durch die lange Laufzeit werden die Abfragen teils mehrfach parallel ausgeführt.

Die Abfragen entsprechen alle dem selben Schema. Bitte optimieren Sie diese, reduzieren Sie die abzufragenden Daten oder verzichten Sie auf diese. Aktuell schränken Sie durch die abgeforderte Leistung die Accounts der anderen Kunden auf dem Server ein.

Es handelt sich um Abfragen nach folgendem Schema:
Bitte bestätigen Sie den Empfang dieser Mail und teilen Sie uns die getroffenen Maßnahmen mit.


Code:
SELECT MAX(ssMerkmal.fMax) AS fMax, MIN(ssMerkmal.fMin) AS fMin FROM (SELECT ROUND( LEAST( (tpreisdetail.fVKNetto * 1) * ((100 - GREATEST(IFNULL(tartikelkategorierabatt.fRabatt, 0), 0, 0, 0)) / 100), IFNULL(tsonderpreise.fNettoPreis, (tpreisdetail.fVKNetto * 1))) * ((100 + 19.00) / 100), 2) AS fMax, ROUND(LEAST((tpreisdetail.fVKNetto * 1) * ((100 - GREATEST(IFNULL(tartikelkategorierabatt.fRabatt, 0), 0, 0, 0)) / 100), IFNULL(tsonderpreise.fNettoPreis, (tpreisdetail.fVKNetto * 1))) * ((100 + 5.00) / 100), 2) AS fMin FROM tartikel #JOIN from JTL\Filter\States\BaseCategory::getSQLJoin JOIN tkategorieartikel ON tartikel.kArtikel = tkategorieartikel.kArtikel #join from JTL\Filter\Items\Characteristic::getSQLJoin JOIN tartikelmerkmal ON tartikel.kArtikel = tartikelmerkmal.kArtikel #join1 from JTL\Filter\Items\PriceRange::getSQLJoin JOIN (tpreis #subjoin for tpreis table JOIN tpreisdetail ON tpreisdetail.kPreis = tpreis.kPreis AND tpreisdetail.nAnzahlAb = 0) ON tartikel.kArtikel = tpreis.kA
 rtikel AND tpreis.kKundengruppe = 1 #join2 from JTL\Filter\Items\PriceRange::getSQLJoin LEFT JOIN tartikelkategorierabatt ON tartikelkategorierabatt.kKundengruppe = 1 AND tartikelkategorierabatt.kArtikel = tartikel.kArtikel #join3 from JTL\Filter\Items\PriceRange::getSQLJoin LEFT JOIN tartikelsonderpreis ON tartikelsonderpreis.kArtikel = tartikel.kArtikel AND tartikelsonderpreis.cAktiv = 'Y' AND tartikelsonderpreis.dStart <= NOW() AND (tartikelsonderpreis.dEnde IS NULL OR tartikelsonderpreis.dEnde >= CURDATE()) #join4 from JTL\Filter\Items\PriceRange::getSQLJoin LEFT JOIN tsonderpreise ON tartikelsonderpreis.kArtikelSonderpreis = tsonderpreise.kArtikelSonderpreis AND tsonderpreise.kKundengruppe = 1 #product visiblity join from getBaseQuery LEFT JOIN tartikelsichtbarkeit ON tartikel.kArtikel = tartikelsichtbarkeit.kArtikel AND tartikelsichtbarkeit.kKundengruppe = 1 WHERE tkategorieartikel.kKategorie IN ( SELECT tchild.kKategorie FROM tkategorie AS tparent JOIN tkategorie AS tchild ON
  tchild.lft BETWEEN tparent.lft AND tparent.rght WHERE tparent.kKategorie = 6) AND tartikelmerkmal.kArtikel IN (SELECT kArtikel FROM tartikelmerkmal WHERE kMerkmalWert IN (32)) #condition from JTL\Filter\Items\Characteristic::getSQLCondition GHS06: Totenkopf mit gekreuzten Knochen AND tartikelmerkmal.kArtikel IN (SELECT kArtikel FROM tartikelmerkmal WHERE kMerkmalWert IN (65)) #condition from JTL\Filter\Items\Characteristic::getSQLCondition H301 AND tartikelmerkmal.kArtikel IN (SELECT kArtikel FROM tartikelmerkmal WHERE kMerkmalWert IN (184)) #condition from JTL\Filter\Items\Characteristic::getSQLCondition P312 AND tartikelmerkmal.kArtikel IN (SELECT kArtikel FROM tartikelmerkmal WHERE kMerkmalWert IN (191)) #condition from JTL\Filter\Items\Characteristic::getSQLCondition P330 AND tartikelmerkmal.kArtikel IN (SELECT kArtikel FROM tartikelmerkmal WHERE kMerkmalWert IN (224)) #condition from JTL\Filter\Items\Characteristic::getSQLCondition P301 + P310 AND tartikelmerkmal.kArtikel IN (
 SELECT kArtikel FROM tartikelmerkmal WHERE kMerkmalWert IN (229)) #condition from JTL\Filter\Items\Characteristic::getSQLCondition P302 + P352 AND tartikelmerkmal.kArtikel IN (SELECT kArtikel FROM tartikelmerkmal WHERE kMerkmalWert IN (252)) #condition from JTL\Filter\Items\Characteristic::getSQLCondition P405 AND tartikelmerkmal.kArtikel IN (SELECT kArtikel FROM tartikelmerkmal WHERE kMerkmalWert IN (267)) #condition from JTL\Filter\Items\Characteristic::getSQLCondition P501 AND tartikelsichtbarkeit.kArtikel IS NULL AND tartikel.kVaterArtikel = 0 #default group by GROUP BY tartikel.kArtikel #limit sql ORDER BY tartikel.dErstellt DESC, tartikel.cName ) AS ssMerkmal
 

Baltazar80

Gut bekanntes Mitglied
18. Januar 2014
217
16
Seitens All-Inkl. brauchen wir schnellstens eine Lösung dafür. Leider kenne ich mich mit diesem Thema gar nicht aus, also welche Möglichkeiten hätten wir denn diese Abfragen zu stoppen oder die Zeiten zu reduzieren?
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
5.202
995
Berlin
Dazu müsste man zuerst wissen wer diese Abfrage auslöst.
Auf den ersten Blick sieht es nach einer Abfrage über die Merkmalfilter aus.

Habt Ihr soviele Merkmale?
JTL draufschauen lassen wäre die erste Wahl, wenn die nicht weiterkommen dann muss der Shop auseinander genommen werden.
 

Baltazar80

Gut bekanntes Mitglied
18. Januar 2014
217
16
Ehrlich gesagt, nutzen wir fast gar keine Merkmale. Wir hatten aber beim JTL Shop 4.05 testhalber mal das CLP Plugin instlliert, oder bzw. die Merkmale in JTL Wawi eingelesen. Das Plugin stammt sogar von euch oder?
Aber im neuen JTL Shop 5 haben wir das Plugin noch gar nicht installiert, wollten wir aber demnächst noch machen. Könnte es sein, dass es davon kommt, dass die Merkmale in JTL Wawi immer noch drin sind, aber kein passendes Plugin im Shop dazu vorhanden ist?
 

Baltazar80

Gut bekanntes Mitglied
18. Januar 2014
217
16
ich kenne kein CLP Plugin. Nein dann muss das anhand des Querys geprüft werden. So kann das ja nicht bleiben. Von außen ist hier keine Analyse möglich.
Ich meine folgendes Plugin:

https://css-umsetzung.de/shop/CSS-Gefahrenklasse

Also die Gefahrenklasse Plugin, könnte es was damit zu tun haben, den hatten wir testhalber in Shop 4.05 installiert, aber im neuen Shop 5 noch nicht, kann es da Datenrückstände oder sowas geben?
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
5.202
995
Berlin
Nein, meine Plugins legen für sich eigene Tabellen an, die werden nur durch mein Plugin ausgelesen,
selbst wenn die da noch in der Datenbank rumliegen würde weil das Plugin nicht komplett deinstalliert wurde, dann würde diese nichts bewirken und einfach nur sinnlos drin rumliegen.
 

Baltazar80

Gut bekanntes Mitglied
18. Januar 2014
217
16
Wir haben jetzt nochmal einen Nachricht erhalten, dass All-Inkl jetzt unsere Daten auf einen anderen Server umziehen wird, damit der Server nicht für die anderen Kunden ausgelastet wird.

Also ich verstehe das nicht, bitte einer JTL soll sich das mal anschauen, ich habe ja einen Beispielcode im ersten Post gepostet, für einen Erfahrenen muss es doch da ersichtlich sein, was das für Abfragen sind, und warum diese ausgeführt werden, und wie man das unterbinden kann.
 

Baltazar80

Gut bekanntes Mitglied
18. Januar 2014
217
16
Nein, meine Plugins legen für sich eigene Tabellen an, die werden nur durch mein Plugin ausgelesen,
selbst wenn die da noch in der Datenbank rumliegen würde weil das Plugin nicht komplett deinstalliert wurde, dann würde diese nichts bewirken und einfach nur sinnlos drin rumliegen.
Ich habe mal den Code angeschaut, und da kommt folgendes vor:


Code:
#condition from JTL\Filter\Items\Characteristic::getSQLCondition GHS06: Totenkopf mit gekreuzten Knochen

Soweit ich weiß, muss ja das GHS06: Totenkopf irgendwas mit dem Gefahrenklasse Plugin zu tun haben oder?
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
5.202
995
Berlin
Soweit ich weiß, muss ja das GHS06: Totenkopf irgendwas mit dem Gefahrenklasse Plugin zu tun haben oder?
Nein, das ist ein Merkmal und wird vom Shop verwaltet.
Von meinem Plugin werden die Merkmale nicht ausgelesen, die werden vom Shop ausgelesen und dann im Template zur Verfügung gestellt.

Mein Plugin macht nichts anderes als aus den Merkmalen, die der Shop im Template zur Verfügung stellt,
die für die GS anzeige zuständigen Merkmale aus der Variable zu extrahieren. Hierfür ist keine Datenbankabfrage erforderlich.

Und ganz ehrlich, niemand der SP hier setzt sich hin und formatiert ungefragt deinen SQL Query mit dem er nichts anfangen kann weil die zugehörige Datenbank fehlt.
Tatsache ist, das es scheint als ob da jemand im Artikellisting nach Merkmalen filtert und die Datenbank das dann wohl nicht packt.

Aber ohne die zugehörige Datenbank oder auch dem Shop und das zugehörige Log wird hier niemand etwas dazu sagen können.
Das ist im Grunde ein Fall für den kostenlosen Support von JTL, wenn das ein SP prüft kann das recht teuer werden.

Wenn die Merkmale gar nicht genutzt werden, dann würde ich sie löschen.

-> das hier ist nur der Hinweis nach was für einem Merkmal gefiltert wird, auch das hat mit meinem Plugin nichts zu tun, das könnte auch jedes andere Merkmal sein:
#condition from JTL\Filter\Items\Characteristic::getSQLCondition GHS06: Totenkopf mit gekreuzten Knochen

so sieht der Query einigermaßen formatiert aus, da sieht man das diese Filterung unter anderem etwas mit der Preisfilterung zu tun hat, es könnte also auch an der Menge der Artikel liegen, das ist aber alles nur Rätselraten und macht keinen Sinn ohne im System zu sein.

SQL:
SELECT
    MAX(ssMerkmal.fMax) AS fMax,
    MIN(ssMerkmal.fMin) AS fMin
FROM
    (
    SELECT
        ROUND(
            LEAST(
                (tpreisdetail.fVKNetto * 1) *(
                    (
                        100 - GREATEST(
                            IFNULL(
                                tartikelkategorierabatt.fRabatt,
                                0
                            ),
                            0,
                            0,
                            0
                        )
                    ) / 100
                ),
                IFNULL(
                    tsonderpreise.fNettoPreis,
                    (tpreisdetail.fVKNetto * 1)
                )
            ) *((100 + 19.00) / 100),
            2
        ) AS fMax,
        ROUND(
            LEAST(
                (tpreisdetail.fVKNetto * 1) *(
                    (
                        100 - GREATEST(
                            IFNULL(
                                tartikelkategorierabatt.fRabatt,
                                0
                            ),
                            0,
                            0,
                            0
                        )
                    ) / 100
                ),
                IFNULL(
                    tsonderpreise.fNettoPreis,
                    (tpreisdetail.fVKNetto * 1)
                )
            ) *((100 + 5.00) / 100),
            2
        ) AS fMin
    FROM
        tartikel #JOIN from JTL\Filter\States\BaseCategory::getSQLJoin JOIN tkategorieartikel ON tartikel.kArtikel = tkategorieartikel.kArtikel #join from JTL\Filter\Items\Characteristic::getSQLJoin JOIN tartikelmerkmal ON tartikel.kArtikel = tartikelmerkmal.kArtikel #join1 from JTL\Filter\Items\PriceRange::getSQLJoin JOIN (tpreis #subjoin for tpreis table JOIN tpreisdetail ON tpreisdetail.kPreis = tpreis.kPreis AND tpreisdetail.nAnzahlAb = 0) ON tartikel.kArtikel = tpreis.kA
        rtikel AND tpreis.kKundengruppe = 1 #join2 from JTL\Filter\Items\PriceRange::getSQLJoin LEFT JOIN tartikelkategorierabatt ON tartikelkategorierabatt.kKundengruppe = 1 AND tartikelkategorierabatt.kArtikel = tartikel.kArtikel #join3 from JTL\Filter\Items\PriceRange::getSQLJoin LEFT JOIN tartikelsonderpreis ON tartikelsonderpreis.kArtikel = tartikel.kArtikel AND tartikelsonderpreis.cAktiv = 'Y' AND tartikelsonderpreis.dStart <= NOW() AND (tartikelsonderpreis.dEnde IS NULL OR tartikelsonderpreis.dEnde >= CURDATE()) #join4 from JTL\Filter\Items\PriceRange::getSQLJoin LEFT JOIN tsonderpreise ON tartikelsonderpreis.kArtikelSonderpreis = tsonderpreise.kArtikelSonderpreis AND tsonderpreise.kKundengruppe = 1 #product visiblity join from getBaseQuery LEFT JOIN tartikelsichtbarkeit ON tartikel.kArtikel = tartikelsichtbarkeit.kArtikel AND tartikelsichtbarkeit.kKundengruppe = 1 WHERE tkategorieartikel.kKategorie IN ( SELECT tchild.kKategorie FROM tkategorie AS tparent JOIN tkategorie AS tchild ON
        tchild.lft BETWEEN tparent.lft AND tparent.rght
    WHERE
        tparent.kKategorie = 6
) AND tartikelmerkmal.kArtikel IN(
    SELECT
        kArtikel
    FROM
        tartikelmerkmal
    WHERE
        kMerkmalWert IN(32)
) #condition from JTL\Filter\Items\Characteristic::getSQLCondition GHS06: Totenkopf mit gekreuzten Knochen AND tartikelmerkmal.kArtikel IN (SELECT kArtikel FROM tartikelmerkmal WHERE kMerkmalWert IN (65)) #condition from JTL\Filter\Items\Characteristic::getSQLCondition H301 AND tartikelmerkmal.kArtikel IN (SELECT kArtikel FROM tartikelmerkmal WHERE kMerkmalWert IN (184)) #condition from JTL\Filter\Items\Characteristic::getSQLCondition P312 AND tartikelmerkmal.kArtikel IN (SELECT kArtikel FROM tartikelmerkmal WHERE kMerkmalWert IN (191)) #condition from JTL\Filter\Items\Characteristic::getSQLCondition P330 AND tartikelmerkmal.kArtikel IN (SELECT kArtikel FROM tartikelmerkmal WHERE kMerkmalWert IN (224)) #condition from JTL\Filter\Items\Characteristic::getSQLCondition P301 + P310 AND tartikelmerkmal.kArtikel IN (
SELECT
    kArtikel
FROM
    tartikelmerkmal
WHERE
    kMerkmalWert IN(229)) #condition from JTL\Filter\Items\Characteristic::getSQLCondition P302 + P352 AND tartikelmerkmal.kArtikel IN (SELECT kArtikel FROM tartikelmerkmal WHERE kMerkmalWert IN (252)) #condition from JTL\Filter\Items\Characteristic::getSQLCondition P405 AND tartikelmerkmal.kArtikel IN (SELECT kArtikel FROM tartikelmerkmal WHERE kMerkmalWert IN (267)) #condition from JTL\Filter\Items\Characteristic::getSQLCondition P501 AND tartikelsichtbarkeit.kArtikel IS NULL AND tartikel.kVaterArtikel = 0 #default group by GROUP BY tartikel.kArtikel #limit sql ORDER BY tartikel.dErstellt DESC, tartikel.cName ) AS ssMerkmal
 

NewBuy

Sehr aktives Mitglied
29. August 2016
1.847
273
Wir hatten dieses Problem auch mal in Verbindung mit Unicorn2 die hatten aus irgendeinen Grund eine Abfrage zum Shop
 

Clearcanvas

Aktives Mitglied
10. Juni 2015
9
0
Hallo Baltazar80,
wir hatten das Problem ebenfalls bei einem Kunden. Am Ende stellte sich heraus, dass über Suchmaschinen die mehrfach gefilterten Kategorien gecrawlt wurden. Diese sehr lange laufenden Abfragen fallen dann irgendwann in einen Sleep Mode und laufen quasi unendlich.

Wir haben uns mit mehren Mitteln geholfen.

1. Wir haben in der robots.txt verboten, dass gefilterte Listen von Suchmaschinen gecrawlt werden:
Code:
User-agent: *
Disallow: *__*

2. Lassen wir regelmäßig schlafende MySQL Queries nach einer bestimmten Zeit killen. Du kannst ja mal mit
Code:
SHOW PROCESSLIST;
gucken ob entsprechende Queries vorliegen.
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu Weiterentwicklung des Connectors ist gesichert Modified eCommerce-Connector 3
WRONG TYPE - Der Typ des Attributes erlaubt die Eingabe von Dezimalzahlen. Otto.de - Anbindung (SCX) 0
Neu DHL Shipping Keine Hausnummer-Prob./Verbasteln des Straßennamens vermeidbar? JTL-ShippingLabels - Fehler und Bugs 2
Neu Berechnung des Datumsunterschieds in der SQL-Abfrage User helfen Usern 2
Neu Amazon Multi-Channel-Versand überschreibt ext. Auftragsnummer des Onlineshops Amazon-Anbindung - Fehler und Bugs 0
Issue angelegt JTL 1.6 Aufträge zusammenfassen, Versandpositionen immer am Ende des neuen Auftrags JTL-Wawi 1.6 3
Neu Pickliste -> Abdruck des Felds "vorauss. Lieferdatum" User helfen Usern - Fragen zu JTL-Wawi 1
Neu UPS im Versandarchiv des UPS-Portals wird nur ein "." bei dem Empfängernamen angezeigt. JTL-ShippingLabels - Fehler und Bugs 0
Neu Artikel friert nach Anlage und erfassen des Bestandes ein. JTL-Wawi 1.6 4
Neu Artikel doppelt nach einspielen des Wawi Backup Shopify-Connector 1
Neu Änderung der Kategorie-URLs des ebay shops eBay-Designvorlagen - Fehler und Bugs 3
Neu Die Beschreibung des Merkmalwert wird nicht gespeichert User helfen Usern - Fragen zu JTL-Wawi 2
Neu Artikelbild erstellen bei Erfassung des Artikels Arbeitsabläufe in JTL-Wawi 3
In Diskussion Mehrere URLs in Tabs des Standardbrowsers öffnen JTL-Workflows - Fehler und Bugs 1
Neu WICHTIG: Ausfall des FCC-Connectors durch Deutsche Fiskal JTL-POS - Fehler und Bugs 2
Neu Probleme bei All-Inkl. - zu viele Anfragen des Workers führen zu Limitierung der IP / Sauberer Abgleich unmöglich Betrieb / Pflege von JTL-Shop 4
Kundengruppenstaffelpreise automatische Berechnung anhand des Individuellen? JTL-Wawi 1.6 7
Neu Wichtiger Hinweis: Ende des Kauf auf Rechnung in PayPal PLUS, ab Anfang Oktober dann in PayPal Checkout verfügbar Installation / Updates von JTL-Shop 0
Beantwortet nach Update von 1.55.5.2 zu 1.6.40.0 kein Scannen des "#Verpacken" mehr möglich JTL-WMS / JTL-Packtisch+ - Fehler und Bugs 2
Neu GELÖST - Worker 2.0 bricht den Ableich des Shops mit Fehler ab JTL-Wawi - Fehler und Bugs 2
Neu Stabilität des Worker/MSSQL User helfen Usern - Fragen zu JTL-Wawi 3
Beantwortet Inhalt des eigenen Feldes in Auftrag Anmerkungen schreiben JTL-Workflows - Ideen, Lob und Kritik 7
Neu Name des Kunden in Picklistenübersicht Individuelle Listenansichten in der JTL-Wawi 4
Neu Nove-Template: Schattensaum des Headers entfernen Templates für JTL-Shop 2
Neu SKU des übergeordneten Products User helfen Usern - Fragen zu JTL-Wawi 1
Neu Wir brauchen professionelle Hilfe bei der Einrichtung / Gestaltung des JTL Shops Starten mit JTL: Projektabwicklung & Migration 0
Auftrag / Rechnung Positon des Fensters JTL-Wawi 1.6 4
Neu Geburtstagsdatum des Kunden importieren WooCommerce-Connector 0
Neu Variationswerte des Variationsartikels ausgeben Allgemeine Fragen zu JTL-Shop 0
Neu Lohnt wechsel des Server - Specs Vergleich Installation von JTL-Wawi 5
Neu Warengruppe des Artikel in der Positionsliste in neuen Druckvorlagen Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 0

Ähnliche Themen