Hey ihr Lieben
ich bin hier im Moment am
Bei mir spinnt seit dem Server-Umzug meine Datenbank und dadurch läuft mysql die ganze zeit mit 100% durch. Nun bin ich zurzeit wieder mal dabei alles zu Optimieren. Nur bin ich bei meiner Gästebuchdatenbank langsam am Ende. Vielleicht könnt Ihr mir da ja noch ein paar Tips geben. Ich komme sonst hier echt nicht mehr mit dem Optimieren weiter.
Also mal zur Erklärung:
Meine Tabellenstruktur vom Gästebuch sieht so aus:
id = mediumint(8) NOT NULL auto_increment und hier liegt auch der PRIMARY Key drauf
fromuser = varchar(255) NOT NULL
touser = varchar(255) NOT NULL Liegt ein INDEX drauf.
massage = mediumtext NOT NULL
unread tinyint(1) NOT NULL Standart = 0 Liegt auch ein INDEX drauf
intime int(11) NOT NULL Standart = 0
rekoment mediumtext NOT NULL
privat int(1) NOT NULL Standart = 0
Ob die Tabellenstruktur jetzt für so eine riesen Datenbank wirklich die beste Auswahl ist, weiß ich nicht so genau, aber auf dem anderen Server lief es ja damit Super.
Nur hat diese Datenbank im Moment 5,5 Mio Einträge und wächst natürlich ständig weiter und kommt damit wohl langsam an seine Grenzen und die Select abfragen werden immer und immer langsamer. Darum wollte ich da jetzt auch noch mal ein wenig was dran ändern. Nur hab ich noch keine Idee, wo man hier am besten Optimieren kann.
Eine der häufigsten Abfragen auf meiner Seite ist, ob man neue GB Einträge hat. Das bremst aber jetzt langsam den Server so übel, dass ich da unbedingt was ändern muss.
Darum hab ich auch so 2 oder 3 Fragen
Beim Abfragen der neuen GB Einträge benutze ich folgenden Code:
Diese Abfrage bremst aber den ganzen Server so übel, dass ich mich jetzt frage, was ist eigentlich schneller und nimmt den Server nicht ganz so viel Performance?
SELECT count(unread) oder mysql_num_rows (Ich hab schon 1000 Beiträge im Netz gelesen, aber mich interessiert hier einfach mal eure Erfahrung und Meinung dazu)? Und habe ich für diese Selectabfrage die INDEX auf meine Spalten richtig gesetzt? Und könnte ich das vielleicht mit einer order by desc Klausel noch ein bisschen beschleunigen? Also order by id desc passt hier glaube ich nicht, da er ja schon 1 Mio neue eintrage bis zum aufrufen haben kann. Und order by unread finde ich auch blödsin, da er ja nur 0 und 1 bei unread drin zu stehen hat und damit ja nicht wirklich ordnen müsste. Also order by touser könnte ich mir z.B. ganz gut vorstellen, nur weiß ich nicht ob das wirklich was bringen würde? Und als letzte Frage zu diesem Problem, im phpMyAdmin gibt es unter jeder Tabelle immer die Funktion: Tabellenstruktur analysieren... Kann ich dieser Funktion bei einer ständig wachsenden Tabelle auch vertrauen und damit meine Datenbank vielleicht noch mal ein bisschen Optimieren? Ich bin mir da nicht so sicher, da er ja in der Tabelle nach den kleinsten und den größten Eintrag sucht und diesen dann als Optimal anbietet. Doch kann sich doch an dem max. im laufe der Zeit auch was ändern. Sollte man dann da doch lieber ein bisschen großzügiger verteilen, oder?
So, das zum Optimieren meiner GB Datenbank, doch was würde das bringen, wenn man nicht auch die richtigen Einstellungen auf dem Server hat?
Darum hier mal ein paar Daten zu meinem Server und auch hier wieder die Große Frage, wo könnte ich nochmal ein wenig was an geschwindigkeit raus holen?
Also mein Server hat folgende Hardware:
2 x Intel Xeon - E5504 = 2 x 4 x 2,0 GHz
8GB DDR3 Ram
2 x 1.000 GB SATA II
PHP Version: 5.2.6-1+lenny9
MySQL Version: 5.0.51a
Mehr ist ja jetzt zum Optimieren vom Server nicht nötig, oder?
So und hier mal meine Einstellungen:
Meine Apache2.conf:
Meine my.conf:
An der php.ini hab ich eigentlich nichts geändert. Vielleicht hat aber auch hier der eine oder andere einen vorschlag, was man an der php.ini noch machen sollte, um den Server noch ein wenig zu beschleunigen?
- Ich bin für jeden Tip und jede Antwort wirklich sehr sehr dankbar und bedanke mich schon mal, dass du dir die Zeit genommen hast, meine Frage zu lesen.
- Liebe Grüße,
Sniky
ich bin hier im Moment am
Bei mir spinnt seit dem Server-Umzug meine Datenbank und dadurch läuft mysql die ganze zeit mit 100% durch. Nun bin ich zurzeit wieder mal dabei alles zu Optimieren. Nur bin ich bei meiner Gästebuchdatenbank langsam am Ende. Vielleicht könnt Ihr mir da ja noch ein paar Tips geben. Ich komme sonst hier echt nicht mehr mit dem Optimieren weiter.
Also mal zur Erklärung:
Meine Tabellenstruktur vom Gästebuch sieht so aus:
id = mediumint(8) NOT NULL auto_increment und hier liegt auch der PRIMARY Key drauf
fromuser = varchar(255) NOT NULL
touser = varchar(255) NOT NULL Liegt ein INDEX drauf.
massage = mediumtext NOT NULL
unread tinyint(1) NOT NULL Standart = 0 Liegt auch ein INDEX drauf
intime int(11) NOT NULL Standart = 0
rekoment mediumtext NOT NULL
privat int(1) NOT NULL Standart = 0
Ob die Tabellenstruktur jetzt für so eine riesen Datenbank wirklich die beste Auswahl ist, weiß ich nicht so genau, aber auf dem anderen Server lief es ja damit Super.
Nur hat diese Datenbank im Moment 5,5 Mio Einträge und wächst natürlich ständig weiter und kommt damit wohl langsam an seine Grenzen und die Select abfragen werden immer und immer langsamer. Darum wollte ich da jetzt auch noch mal ein wenig was dran ändern. Nur hab ich noch keine Idee, wo man hier am besten Optimieren kann.
Eine der häufigsten Abfragen auf meiner Seite ist, ob man neue GB Einträge hat. Das bremst aber jetzt langsam den Server so übel, dass ich da unbedingt was ändern muss.
Darum hab ich auch so 2 oder 3 Fragen
Beim Abfragen der neuen GB Einträge benutze ich folgenden Code:
PHP-Code:
$resultcountergb = mysql_query("SELECT unread FROM `spop_gbook` where touser='".$comu."' AND `unread` = '0'");
$resultgb = mysql_num_rows($resultcountergb);
SELECT count(unread) oder mysql_num_rows (Ich hab schon 1000 Beiträge im Netz gelesen, aber mich interessiert hier einfach mal eure Erfahrung und Meinung dazu)? Und habe ich für diese Selectabfrage die INDEX auf meine Spalten richtig gesetzt? Und könnte ich das vielleicht mit einer order by desc Klausel noch ein bisschen beschleunigen? Also order by id desc passt hier glaube ich nicht, da er ja schon 1 Mio neue eintrage bis zum aufrufen haben kann. Und order by unread finde ich auch blödsin, da er ja nur 0 und 1 bei unread drin zu stehen hat und damit ja nicht wirklich ordnen müsste. Also order by touser könnte ich mir z.B. ganz gut vorstellen, nur weiß ich nicht ob das wirklich was bringen würde? Und als letzte Frage zu diesem Problem, im phpMyAdmin gibt es unter jeder Tabelle immer die Funktion: Tabellenstruktur analysieren... Kann ich dieser Funktion bei einer ständig wachsenden Tabelle auch vertrauen und damit meine Datenbank vielleicht noch mal ein bisschen Optimieren? Ich bin mir da nicht so sicher, da er ja in der Tabelle nach den kleinsten und den größten Eintrag sucht und diesen dann als Optimal anbietet. Doch kann sich doch an dem max. im laufe der Zeit auch was ändern. Sollte man dann da doch lieber ein bisschen großzügiger verteilen, oder?
So, das zum Optimieren meiner GB Datenbank, doch was würde das bringen, wenn man nicht auch die richtigen Einstellungen auf dem Server hat?
Darum hier mal ein paar Daten zu meinem Server und auch hier wieder die Große Frage, wo könnte ich nochmal ein wenig was an geschwindigkeit raus holen?
Also mein Server hat folgende Hardware:
2 x Intel Xeon - E5504 = 2 x 4 x 2,0 GHz
8GB DDR3 Ram
2 x 1.000 GB SATA II
PHP Version: 5.2.6-1+lenny9
MySQL Version: 5.0.51a
Mehr ist ja jetzt zum Optimieren vom Server nicht nötig, oder?
So und hier mal meine Einstellungen:
Meine Apache2.conf:
Code:
Timeout 150 KeepAlive On MaxKeepAliveRequests 10 KeepAliveTimeout 2 <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 30 MaxSpareServers 50 MaxClients 256 MaxRequestsPerChild 4000 </IfModule> <IfModule mpm_worker_module> StartServers 5 MaxClients 256 MinSpareThreads 30 MaxSpareThreads 75 ThreadsPerChild 50 MaxRequestsPerChild 4000 </IfModule> HostnameLookups Off
Code:
key_buffer = 128M net_buffer_length = 8K sort_buffer_size = 128K myisam_sort_buffer_size = 30M read_buffer_size = 64K read_rnd_buffer_size = 64K join_buffer_size = 4M query_cache_size = 64M thread_cache = 128 thread_concurrency = 4 table_cache = 2048 max_allowed_packet = 10M max_connections = 1500 low_priority_updates = 1 #long_query_time = 2 connect_timeout = 30 wait_timeout = 1800 thread_stack = 128K thread_cache_size = 8 #thread_concurrency = 10 # # * Query Cache Configuration # query_cache_limit = 1M
- Ich bin für jeden Tip und jede Antwort wirklich sehr sehr dankbar und bedanke mich schon mal, dass du dir die Zeit genommen hast, meine Frage zu lesen.
- Liebe Grüße,
Sniky
Kommentar