Halli hallo,
also hab die letzte Zeit Problem mit meinem Shop System gehabt und deswegen mehrere Sachen in betracht gezogen:
1. Hardware aufrüsten -> MYSQL Server auslagern
(wurde mir vorerst von mehreren Leute -> Webhoster abgeraten)
2. daraufhin hab ich mich an die Datenbank Optimierung gemacht und das eigentlich auch ganz gut hinbekommen.
Worum es mir geht ist es, da ja einige Profis hier im Forum sind die bestimmt auch gute Erfahrungswerte haben, und ich nicht erst wieder REAGIEREN will wenn es bereits auf dem Server brennt -> load average von 20 und größer
Hier das was ist:
Hardware:
DETECTED SERVER
2x XEON DUAL CORE
4x 1GB RAM
RAID 1 SCSI Platte soviel ich weiss
kurz um is schon ne ordentliche Maschine leuft aber alles drauf sprich:
Apache,Mysql und Mail Server
Zum Shopsystem Allgemein:
Dynamische Navi, dynamische banner, dynamische Artikelansicht(bestand), halb intelligente Suche in Echtzeit das is so grob das meiste was von MySQL verlangt wird
Hier nun die wichtigsten Tabellen mit Ihren größen(MyISAM):
tbl_artikel = 5.000
tbl_bilder = 14.000
tbl_zuweisungen = 5.200 (Wo der Artikel ist auch mehrfach Kategorien)
tbl_groessen = 55.000 (groessen jedes artikels wegen Warenwirtschaft externe daten)
tbl_kunden = 72.000
das sind mal die wichtigsten das ihr auch abschätzen könnt womit es der MySql zu tun hat.
Hier jetzt mal noch eines der hungrigsten Queries inkl. Explain:
bei Null Last auf dem Server
Hab meine ganzen Queries überarbeitet und auch einige Indexierungen
vorgenommen und auch einen großen Erfolg erzielen können von der Perfomance(50-70%)
mit EXPLAIN schauen die meisten Reports auch so aus und hab gelesen
das wenn ref oder eq_ref ausgegeben wird und auch kein ALL etc. eigentlich schon alles gut optimiert ist .
Im Moment leuft der Shop bei ca. 100 gleichzeitigen Besucher so bei Load
Average 2-3 ganz gut, aber denke halt bei 150 is schon kritisch dann und 200 Ende.
Klar weiss ich das ihr das natürlich jetzt schwer an den wenigen Daten
abschätzen könnt aber hoffe halt einfach Erfahrungswerte von Euch zu
bekommen stoß halt grad erst so richtig in die Mysql Welt vor hab eher mich auf PHP konzentriert und ging BIS JETZT auch gut nur irgendwann
muss man halt beides gut beherrschen.
Ich hoffe Ihr könnt mir eure Erfahrung mitteilen ob jetzt das "normal" ist
und nach optimierungen und und und einfach auch Hardware aufrüsten muss irgendwann oder einfach meine Datenbank anscheinend nicht gut aufgebaut ist und ich das was dran machen muss.
also hab die letzte Zeit Problem mit meinem Shop System gehabt und deswegen mehrere Sachen in betracht gezogen:
1. Hardware aufrüsten -> MYSQL Server auslagern
(wurde mir vorerst von mehreren Leute -> Webhoster abgeraten)
2. daraufhin hab ich mich an die Datenbank Optimierung gemacht und das eigentlich auch ganz gut hinbekommen.
Worum es mir geht ist es, da ja einige Profis hier im Forum sind die bestimmt auch gute Erfahrungswerte haben, und ich nicht erst wieder REAGIEREN will wenn es bereits auf dem Server brennt -> load average von 20 und größer
Hier das was ist:
Hardware:
DETECTED SERVER
2x XEON DUAL CORE
4x 1GB RAM
RAID 1 SCSI Platte soviel ich weiss
kurz um is schon ne ordentliche Maschine leuft aber alles drauf sprich:
Apache,Mysql und Mail Server
Zum Shopsystem Allgemein:
Dynamische Navi, dynamische banner, dynamische Artikelansicht(bestand), halb intelligente Suche in Echtzeit das is so grob das meiste was von MySQL verlangt wird
Hier nun die wichtigsten Tabellen mit Ihren größen(MyISAM):
tbl_artikel = 5.000
tbl_bilder = 14.000
tbl_zuweisungen = 5.200 (Wo der Artikel ist auch mehrfach Kategorien)
tbl_groessen = 55.000 (groessen jedes artikels wegen Warenwirtschaft externe daten)
tbl_kunden = 72.000
das sind mal die wichtigsten das ihr auch abschätzen könnt womit es der MySql zu tun hat.
Hier jetzt mal noch eines der hungrigsten Queries inkl. Explain:
bei Null Last auf dem Server
PHP-Code:
(12 insgesamt, die Abfrage dauerte 0.0426 sek.)
SELECT *,t1.id_artikel as id_artikel FROM s_artikel as t1 WHERE t1.aktiv_gr = 1 AND t1.aktiv = 1
AND EXISTS ( SELECT * FROM s_zuweisung as t2 WHERE t1.id_artikel = t2.id_artikel AND t2.id_verwendung = 1
AND EXISTS ( SELECT * FROM s_bild as t3 WHERE t1.id_artikel = t3.id_artikel ) )
AND t1.id_geschlecht != '' ORDER BY t1.einstell_datum DESC,t1.views DESC,t1.last_update_steps DESC LIMIT 0, 12
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ref aktiv,aktiv_gr,id_geschlecht aktiv_gr 4 const 2687 Using where; Using filesort
2 DEPENDENT SUBQUERY t2 ref idx_id_artikel idx_id_artikel 8 usr_web1_1.t1.id_artikel 1 Using where
3 DEPENDENT SUBQUERY t3 ref idx_id_artikel idx_id_artikel 8 usr_web1_1.t1.id_artikel 4 Using index
vorgenommen und auch einen großen Erfolg erzielen können von der Perfomance(50-70%)
mit EXPLAIN schauen die meisten Reports auch so aus und hab gelesen
das wenn ref oder eq_ref ausgegeben wird und auch kein ALL etc. eigentlich schon alles gut optimiert ist .
Im Moment leuft der Shop bei ca. 100 gleichzeitigen Besucher so bei Load
Average 2-3 ganz gut, aber denke halt bei 150 is schon kritisch dann und 200 Ende.
Klar weiss ich das ihr das natürlich jetzt schwer an den wenigen Daten
abschätzen könnt aber hoffe halt einfach Erfahrungswerte von Euch zu
bekommen stoß halt grad erst so richtig in die Mysql Welt vor hab eher mich auf PHP konzentriert und ging BIS JETZT auch gut nur irgendwann
muss man halt beides gut beherrschen.
Ich hoffe Ihr könnt mir eure Erfahrung mitteilen ob jetzt das "normal" ist
und nach optimierungen und und und einfach auch Hardware aufrüsten muss irgendwann oder einfach meine Datenbank anscheinend nicht gut aufgebaut ist und ich das was dran machen muss.
Kommentar