Vorab - da ich da in der Vergangenheit schon öfter mal falsch verstanden wurde - das hier ist ein Erfahrungsbericht und im Prinzip kein Hilfegesuch. Ich bin mir nicht sicher ob das eine Art Bug ist, daher gehe ich nicht hin und trage es direkt in den Bugtracker ein, sondern möchte erstmal ein paar Experten beurteilen lassen, ob es sein kann, dass ich hier richtig liege.
Also: Im betroffenen Shop hatten wir heute aufgrund einer Newsletteraktion deutlich mehr Zugriffe als sonst. Was dazu führte, dass der Shop langsam wurde und vor allem die Produktseiten ewig luden. Ich dachte zunächst es wäre mein Fehler und ich hätte eine schlechte query irgendwo eingebaut, die das verursacht.
Ein Blick in das slowquery log wies die function
getAlsoPurchased als Übeltäter aus. Daran hatte ich nicht rumgefummelt.
Abgesehen davon, dass ich irretiert war, weil der Proivider mir mitteilte, dass das Datenbankformat nicht für so viele Zugriffe ausgelegt wäre (er sprach von InnoDB womit ich an meine Grenzen stoße) hab ich dann in filenames.php kurzerhand die
also_purchased_products.php auskommentiert und der Spuk war vorbei.
Die function sieht so aus:
SELECT
".$this->default_select." FROM
".TABLE_ORDERS_PRODUCTS." op
JOIN ".TABLE_PRODUCTS." p
ON p
.products_id
= op
.products_id
AND p
.products_status
= '1' AND p
.products_id
!= '".(int)$pID."' JOIN ".TABLE_PRODUCTS_DESCRIPTION." pd
ON pd
.products_id
= p
.products_id
AND pd
.language_id
= '".(int) $_SESSION['languages_id
']."' AND
trim(pd
.products_name
) != '' WHERE op
.orders_id IN
(SELECT
* FROM
(SELECT orders_id
FROM
".TABLE_ORDERS_PRODUCTS." WHERE products_id
= '".(int)$pID."' GROUP BY orders_id
ORDER BY orders_id DESC
LIMIT
".MAX_DISPLAY_ALSO_PURCHASED_ORDERS." ) o
) ".PRODUCTS_CONDITIONS_P." GROUP BY p
.products_id
ORDER BY op
.orders_id DESC
LIMIT
".MAX_DISPLAY_ALSO_PURCHASED
Ich nutze das Ganze "Kunden kauften auch" sowieso nicht. Daher für mich erstmal verkraftbar.
Ich frage mich (euch) aber nun... kann es denn sein, dass die o.g. function tatsächlich ein Problem darstellt, wenn in der orders_products sagen wir mal... 300.000 Einträge liegen?
Wäre ein probates Mittel, bei einem Shop mit hohem Bestellaufkommenn z.B. Bestellungen nur aus 2,3 Vorjahren vorzuhalten?
Mich interessiert wie ihr das seht bzw. wie iher das evtl. macht.
Löscht ihr in diesem (oder einem anderen) Zusammenhang alte Bestellungen um g.g.F. die Performance zu verbessern?
Linkback: https://www.modified-shop.org/forum/index.php?topic=42271.0