Login  Regeln Aktuelles Datum und Uhrzeit: 03.12.2008, 22:05  
Startseite
Registrieren
Profil
Suchen
Mitgliederliste
Verzeichnis
Impressum



Partner
kostenlose Homepage
Fussball
Kostenloses Forum
SMS kostenlos
Webhosting
Webmasterportal
Kostenlos
Kredit ohne Schufa
Esoterik-Forum
Selbsthilfeforum
Artikel Backlink
Datenrettung
Belastung / Performance von MySQL Datenbank testen

 
Neues Thema eröffnen   Neue Antwort erstellen    Webmaster Forum -> Serverseitige Websprachen
Vorheriges Thema anzeigen Nächstes Thema anzeigen 
Autor Nachricht
placido
Helfer [User]
Helfer



Anmeldung: 16.10.07
Beiträge: 194

BeitragVerfasst am: 16.09.2008, 10:35    Titel: Belastung / Performance von MySQL Datenbank testen Antworten mit Zitat

Hallo zusammen,

bin mit ein paar Kollegen gerade dabei ein Portal für Warhammer Online aufzubauen, genug Helfer sind vorhanden, von daher besteht da keine Schwierigkeit.

Meine Sorge ist, dass bei zu vielen Besuchern in der Datenbank, selbige zu langsam wird, um Abfragen noch schnell genug durchführen zu können.
Habe gestern ein kleines Script gebastelt, dass mir 10.000 user eingetragen hat. Ist nun meine Frage: Ist das genug für eine Belastung?
Abgesehen davon, dass im deutschsprachigen Raum wahrscheinlich sowieso keine 10.000 User angemeldet werden (da es vergleichabre Portale schon gibt), geht es bisher noch sehr schnell.
Meiner Meinung nach ist das einloggen der schwierigste Teil, da dort alle wichtigen Daten wie user id, nickname abgefragt werden und in sessions gespeichert werden.
Das einloggen ging mit 3 benutzern quasi sofort, nun mit ca 11.000 usern dauerts ca 1 sekunde.
Was sagt das nun über mein Script aus?
Sagt es überhaupt was aus?

Wenns wichtig ist poste ich die URL. Aber denke es geht erst mal nur um die Datenmenge und ab wann es schwierig wird.

Gibt es eine Seite, mit der ich den gleichzeitigen Zugriff und belastung des Login scripts testen kann?

Grüße
Dennis

_________________
Relativitätstheorie:
Wenn ich Dir einen Finger ins Auge stecke, haben wir beide einen Finger im Auge, aber ich bin relativ besser dran
Browserspiele


Nach oben
Private Nachricht senden
eforium
Bekannter [Mod]
Bekannter



Anmeldung: 20.01.06
Beiträge: 1349
Wohnort: Irgendwo i ...

BeitragVerfasst am: 16.09.2008, 17:10    Titel: Antworten mit Zitat

Dein Script sagt wenig aus.

Denn es loggen sich ja nicht 10000 Leute gleichzeitig ein, oder? Du solltest einen Mix aus Dateien aufrufen, zirka 10%, immer mit file_get_contents und für jedes die Ladezeit analysieren. Wenn du das mit einem PHP Skript direkt 1000 mal nacheinander machen würdest, würde Apache ziemlich gestresst werden.

Aber bei SharedHosting wäre ich als Hoster nicht scharf drauf, einen Kunden zu haben, der den Apache zum Abstürzen bringt.

Ausserdem:
- Zend Optimizer aktivieren und installieren (oder umgekehrt)
- eAccelerator installieren und aktivieren

_________________
Deihro Internet Programming - Ihre Webseite zu angenehmen Konditionen
Sie suchen eine TemplateEngine? Klicken Sie!


Nach oben
Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
placido
Helfer [User]
Helfer



Anmeldung: 16.10.07
Beiträge: 194

BeitragVerfasst am: 17.09.2008, 17:36    Titel: Antworten mit Zitat

Danke dir, probiere es gleich aus.

Dachte die Masse an Daten die SQL abfragen muss ist relevant.
Weiß zb , dass xtcommerce mit jedem artikel langsamer wird. glaub aber dass da die grenze, an der das system echt deutlich langsamer wird 3 millionen artikel sind. von daher bin ich noch sehr weit davon entfernt...

_________________
Relativitätstheorie:
Wenn ich Dir einen Finger ins Auge stecke, haben wir beide einen Finger im Auge, aber ich bin relativ besser dran
Browserspiele


Nach oben
Private Nachricht senden
eforium
Bekannter [Mod]
Bekannter



Anmeldung: 20.01.06
Beiträge: 1349
Wohnort: Irgendwo i ...

BeitragVerfasst am: 18.09.2008, 16:40    Titel: Antworten mit Zitat

Klar, ist die Masse auch entscheidend, aber du solltest ja vorwiegend die Tabellen testen, die auch benötigt werden. So z.B., wie du es hier im Forum machst, loggst du dich ein und öffnest dann bis du wieder gehts etwa 20 mal eine Forenseite und etwa 150 Themen, worauf du bei 5 eine Antwort gibst.

Wenn du jetzt sagst, du müsstest, um die Performance zu testen, 10000 mal jemanden einloggen lassen, kann auch ich nicht mehr helfen Winken

_________________
Deihro Internet Programming - Ihre Webseite zu angenehmen Konditionen
Sie suchen eine TemplateEngine? Klicken Sie!


Nach oben
Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
800XE
Bekannter [Mod]
Bekannter



Anmeldung: 24.10.04
Beiträge: 1409
Wohnort: Speyer

BeitragVerfasst am: 19.09.2008, 22:39    Titel: Re: Belastung / Performance von MySQL Datenbank testen Antworten mit Zitat

placido hat folgendes geschrieben:
Das einloggen ging mit 3 benutzern quasi sofort, nun mit ca 11.000 usern dauerts ca 1 sekunde.
Was sagt das nun über mein Script aus?
Sagt es überhaupt was aus?

hast du irgendwelche Indexe angelegt?
placido hat folgendes geschrieben:
Danke dir, probiere es gleich aus.

Dachte die Masse an Daten die SQL abfragen muss ist relevant.
Weiß zb , dass xtcommerce mit jedem artikel langsamer wird. glaub aber dass da die grenze, an der das system echt deutlich langsamer wird 3 millionen artikel sind. von daher bin ich noch sehr weit davon entfernt...

als ich auf shop800.de auf der Startseite nor die "neuen" Artikel anzeigt und nur ca 1.ooo.ooo hatte, dauerste es ca 20, 30, 40, ..... Sekunden

Index angelegt = 0.1 Sekunden

ohne Index = je Datenzeile eine Abfrage = 1 Datensatz mehr = 1 Abfrage mehr

mit index, braucht es etwa immer eine verdopplung der Datensätze das 1 Abfrage mehr gebraucht wird

also, ob 1.ooo.ooo oder 1.1oo.ooo oder 1.5oo.ooo ist nicht wirklich mehr Arbeit

1.ooo.ooo Datensätze
Abfragen um richtign zu finden
#1 : 5oo.ooo
#2 : 250.ooo
#3 : 125.ooo
#4 : 60.ooo
#5 : 30.ooo
#6 : 15.ooo
#7 8.ooo
#8 4.ooo
#9 2.ooo
#10 1.ooo
#11 500
#12 250
#13 125
#14 60
.... ähm geht vielelicht bis 20 oder so ....

wenn du jetzt von 1.ooo.ooo auf 1.1oo.ooo gehst, ändert sich quasie nichts
wenn du jetzt von 1.ooo.ooo auf 2.ooo.ooo gehst, ändert sich 20 Abfragen zu 21 Abfragen
wenn du jetzt von 1.ooo.ooo auf 4.ooo.ooo gehst, ändert sich 20 Abfragen zu 22 Abfragen
wenn du jetzt von 1.ooo.ooo auf 8.ooo.ooo gehst, ändert sich 20 Abfragen zu 23 Abfragen

_________________
Seien wir realistisch, versuchen wir das Unmögliche!
CMS800 :::::::::: Andy 800XE Zmuda :::::::::
ich bin nicht unhöflich, ich bin binär


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
jonatan_männchen
User [User]
User



Anmeldung: 12.10.08
Beiträge: 10
Wohnort: Winterthur ...

BeitragVerfasst am: 12.10.2008, 14:17    Titel: Benchmark Antworten mit Zitat

Ich würde einen Benchmark erstellen:

(etwa so)

Code:

<?php
class Benchmark{
   public $last_step_time = microtime(true);
   public $steps = array();
   $this->start();

   public function start(){
      $this->start_time = microtime(true);
      $this->last_step_time = $this->start_time;
      $this->step('Stop');
   }
   public function stop(){
      $this->stop_time = microtime(true);
      $this->step('Stop');
      echo $this->steps;
   }
   
   public function step($description){
      $this->steps[] = $description=>($microtime(true) - $this->last_step_time);
      $this->last_step_time = microtime(true);
   }
}
?>


Daran kannst du ablesen wie lange jeder Step hatte.

ANWENDUNG:
Code:

<?php
$benchmark = new Benchmark();
##Abfrage1##
$benchmark->step('Abfrage1');
##Abfrage2##
$benchmark->step('Abfrage2');
##usw...##
$benchmark->stop();
?>


Ich hoffe das Hilft.


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen MSN Messenger
eforium
Bekannter [Mod]
Bekannter



Anmeldung: 20.01.06
Beiträge: 1349
Wohnort: Irgendwo i ...

BeitragVerfasst am: 13.10.2008, 18:46    Titel: Antworten mit Zitat

Ja, das wird dir helfen, nur, wenn der Server schon ein wenig gefordert ist und PHP auch, wird das Skript total nur noch mehr verlangsamert. Dann hilft es wiederum nichts mehr.
_________________
Deihro Internet Programming - Ihre Webseite zu angenehmen Konditionen
Sie suchen eine TemplateEngine? Klicken Sie!


Nach oben
Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
jonatan_männchen
User [User]
User



Anmeldung: 12.10.08
Beiträge: 10
Wohnort: Winterthur ...

BeitragVerfasst am: 28.10.2008, 22:00    Titel: Benchmark Antworten mit Zitat

eforium hat folgendes geschrieben:
Ja, das wird dir helfen, nur, wenn der Server schon ein wenig gefordert ist und PHP auch, wird das Skript total nur noch mehr verlangsamert. Dann hilft es wiederum nichts mehr.


Nein!

1.
Dieser Code ist gedacht um Queries und solche Sachen zu testen. Wenn du meinst es seie ja noch nicht genug ausgelastet Idee => laste es aus... (Erstelle eine Testdb und ertselle automatisch einfach 5 Mio Einträge, mal sehen was nicht aus gelastet ist Sehr glücklich )

DB erstellcode:
Code:

<?php
    mysql_connect("dbbenutzer-xy.mein-hoster.de", "username","passwort");
    mysql_select_db("dbname");
   
    for($i = 1; $i <= 5000000; $i++){
        $sql = "INSERT INTO tabellenname SET feld1='".md5(uniqid())."', usw...";
        mysql_query($sql):
    }
?>


Jetzt ist alles ausgelastet...

2.
Schau mal mit einem leeren Benchmarkstep wie lange er hat... du wirst einfach nur Nullen ablsesen können.

Ausserdem, ich würde ihn eh nur zum testen benutzen und nicht live.
Eine Idee wäre diesen Code auf einem Repository (Dev-Server) so einzurichten, dass er aufgerufen wird, wenn du "?bench" an die URL anhängst.


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen MSN Messenger
eforium
Bekannter [Mod]
Bekannter



Anmeldung: 20.01.06
Beiträge: 1349
Wohnort: Irgendwo i ...

BeitragVerfasst am: 29.10.2008, 17:32    Titel: Antworten mit Zitat

Ich denke, wenn ich einen leeren Benchmark aufrufe, werde ich nicht nur nullen ablesen können... Ohne das zu testen, weiss ich, dass eine Millisekunde einer tausendstel Sekunde entspricht... Diese Zeit ist messbar, und die wird wohl gerade dazu verbraucht, die Zeit überhaupt irgendwo mal durch den RAM zu jagen...

Ausserdem bringt das 5 Mio Einträge erstellen nichts... Wenn du das schon mal ausprobiert hast, wirst du zwei Sachen merken:
- 1. Wird sich der Server wohl früher oder später aufhängen = Mehr Schaden als Nutzen
- 2. Werden niemals 5 Mio Einträge in so kurzer Zeit erstellt werden, dass das relevant wäre.
- 3. Geht es bei einem Browsergame vor allem um auslesen und teilweise, das heisst geringerer Anteil, ums speichern. Beim Speichern wird allerdings nichts im RAM gelagert, nur hindurch gejagt. MySQL ist aber so einstellbar, dass Datenbanken im RAM gelagert werden können, d.h. es wird schneller ausgelesen. Dass kannst du mit 5 Mio Einträgen nicht machen, oder?
Idee: Es soll jemand einen SQL Server programmieren, der INSERT's zwischenlagert, bevor sie gesendet bzw. erstellt wurden Winken

_________________
Deihro Internet Programming - Ihre Webseite zu angenehmen Konditionen
Sie suchen eine TemplateEngine? Klicken Sie!


Nach oben
Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
800XE
Bekannter [Mod]
Bekannter



Anmeldung: 24.10.04
Beiträge: 1409
Wohnort: Speyer

BeitragVerfasst am: 30.10.2008, 04:50    Titel: Antworten mit Zitat

eforium hat folgendes geschrieben:
Es soll jemand einen SQL Server programmieren, der INSERT's zwischenlagert, bevor sie gesendet bzw. erstellt wurden Winken

im SQL Handbuch
http://andyzmuda.de/Apache/
http://dev.mysql.com/doc/refman/5.1/de/
hab ich schon öffer was gelesen von
"Querys gehen in Pipeline" ....
... und werden erst "wenn Zeit übrig ist" wirklich ausgeführt

muß glaub etra per Befehl angegeben werden ...
... weil dadurch ja die "aktuellen daten dann veraltet sind"
also
ich mache einen UPDATE .... danach einen SELECT .... und sehe noch das alte, weil der UPDATE noch (vielleicht lange) in der Pipeline liegt

_________________
Seien wir realistisch, versuchen wir das Unmögliche!
CMS800 :::::::::: Andy 800XE Zmuda :::::::::
ich bin nicht unhöflich, ich bin binär


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
hlag
User [User]
User



Anmeldung: 29.10.08
Beiträge: 10
Wohnort: Bonn

BeitragVerfasst am: 28.11.2008, 18:52    Titel: Antworten mit Zitat

Hi,

die Anzahl einträge in einer Datenbank sind meistens eher unkritisch.
Leg wie 800XE sagte über alle Felder, nach denen Du abfragst einen index an und es geht rasant schneller.

Wenn Du Abfragen mit AND verknüpfst, klickst Du im phpMyAdmin in der Strukturansicht beide Felder an und legst auf die kombinierten Felder einen Index.

Das bringt rasant viel.

Wenn Deine Seite auf einem CMS beruht, sieh zu, dass Du alles an inhalt, was Du cachen kannst, als File cached und die Datenbank in Ruhe lässt.

Wenn das jetzt immer noch zu langsam ist: dickerer Server.

viele Grüße,

hlag

_________________
Klaus Blömeke

avaris | godot.de

SiteAlert - Websiteüberwachung


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
hlag
User [User]
User



Anmeldung: 29.10.08
Beiträge: 10
Wohnort: Bonn

BeitragVerfasst am: 28.11.2008, 18:57    Titel: Antworten mit Zitat

Nebenbei:

Wenn Du die Responszeiten überwachen willst, kannst Du das mit unserem Tool tun.

Sobald der Server echt nicht mehr will, wird er erst langsam, danach schreit er um Hilfe:


Warning: mysql_connect() [function.mysql-connect]: Too many connections in /pfad/zum/script/script.php on line X

Unser Tool erkennt sowohl den String, als auch Änderungen auf der Seite die durch fehlende inhalte verursacht werden (falls Du die Ausgabe von Fehlern unterdrückst)

Viele Grüße,

Klaus

_________________
Klaus Blömeke

avaris | godot.de

SiteAlert - Websiteüberwachung


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

Gehe zu:  

Ähnliche Beiträge
Thema Autor Forum Antworten Verfasst am
Keine neuen Beiträge Zugreifen auf einzelne Datensätze aus... xxcool25xx Serverseitige Websprachen 8 28.11.2008, 10:08 Letzten Beitrag anzeigen
Keine neuen Beiträge Mysql update funktioniert nicht powerup Serverseitige Websprachen 3 22.10.2008, 18:01 Letzten Beitrag anzeigen
Keine neuen Beiträge Php skript im MYSQL einbinden sunnyboy881 Serverseitige Websprachen 1 24.09.2008, 07:37 Letzten Beitrag anzeigen
Keine neuen Beiträge Wie funktioniert MYSQL und PHP sunnyboy881 Serverseitige Websprachen 1 13.09.2008, 14:47 Letzten Beitrag anzeigen
Keine neuen Beiträge MySQL Feldinhalte aufteilen placido Serverseitige Websprachen 11 11.09.2008, 13:39 Letzten Beitrag anzeigen
Threadübersicht