SQL Langsame lokale MySQL datenbank

mrvalle

Cadet 2nd Year
Registriert
Aug. 2013
Beiträge
22
Hallo,
ich habe auf meinem PC mit XAMPP einen Apache Webserver inclusive MySQL datenbank am laufen. Wenn ich jetzt aus meinem PHP-Skript heraus die Datenbank anspreche (mit den mysqli funktionen im Prozeduralen Stil), dann braucht die Datenbank mindestens 30 sekunden, um die daten herauszugeben. Was kann ich dagegen tun? Änderungen in der my.ini?
 
uptime des SQL-Server? Cache Hit rate? datenbank engine? was für eine Festplatte? HDD geparkt oder am laufen?
 
uptime: wie lange läuft der Server-Dienst ohne unterbrechung?
Datenbank engine: Was steht bei deinen Tabellen (Myisam, InnoDb,...)?
Festplatte: 5200 od. 7200 rpm? Läuft die Festplatte wenn du die Abfragen startest (liegen die Datenbnakdateien auf deiner System-Platte?)
Cache hit rate kriegst du z.b. mit mysqltuner raus, das hilft allerdings wenig, wenn du deinen PC häufig an/aus schaltest...

ansosntne kansnt du in phpmyadmin mal unter Status schauen, da siehst du auch einige Probleme...
 
Wie komplex ist die Abfrage (Anzahl der verknüpften Tabellen in Abfrage)?
Welche Hardware?
Wenn du dich damit nicht auskennst, wird es Zeit, dass du dich damit beschäftigst.
 
Was sagt EXPLAIN? Ich könnte meine Hand dafür ins Feuer legen, dass es ein oder mehrere schlechte SQL Queries sind.
 
Eben. Poste doch mal die Tabellenstruktur, einen der langsamen Queries und ne grobe Anzahl der Datensätze innerhalb der Tabellen.

Aber mal ganz ehrlich: 30s+ waren so die Werte, die ich bei komplexen JOINs und ein paar "LIKE %...%" in einer DB mit >>1Mio Datensätzen hatte...
 
Hmm, also ich hab deswegen ne sau lahme DB gehabt. Der Verbindungsaufbau dauert dann immer genau eine Sekunde.
(Wobei es dann natürlich suboptimal ist, wenn man 30 Verbindungen aufbaut).
Windows 7 x64
Code:
$t1=microtime(true);
new PDO('mysql:localhost','root',);
$t2=microtime(true);
new PDO('mysql:127.0.0.1','root',);
$t3=microtime(true);
new PDO('mysql:::','root',);
$t4=microtime(true);
echo ($t2-$t1).'<br>'.($t3-$t2).'<br>'.($t4-$t3).'<br>';
Mit bind-address = localhost
Code:
1.0107800960541
1.000727891922
1.0091722011566
Mit bind-address = ::
Code:
	0.0015139579772949
0.0010199546813965
0.00098490715026855
 
Das sieht aber eher aus, als hättest du da in deiner Netzwerk-Config bzw. /etc/hosts was falsch eingetragen. Eine Auflösung nach Localhost, egal ob IPv4 oder v6, dauert keine Sekunde. Dein Server hat da deutlich andere Probleme
 
Microsoft... na sag das doch gleich.
Ich dachte, wir reden hier von einem anständigen Server-OS, so wie es in der Realität auch tatsächlich eingesetzt wird.

Microsoft... da hab ich dieses Wochenende also doch noch was zu lachen.
 
KeepXtreme schrieb:
Festplatte: 5200 od. 7200 rpm?

Stimmt, ein guter Hinweis! Das hatte ich auch mal mit meiner lokalen DB. Mit der 5200er Platte dauerte es 40 Sekunden, mit der 7200er dann die erwarteten 0,00001.
 
Das war wohl eher sarkastisch von ihm gemeint, die in Beitrag #2 genannten Gründe sind eher weniger von Relevanz (Festplatten-rpm, Hitrate Cache etc.) ;)
 
Selbst wenn du eine langsame Festplatte hättest mit 5400 U/min, wäre die Abfrage immernoch in einem Bruchteil einer Sekunden abgearbeitet. Entweder du hast eine sehr komplexe Abfrage die nicht optimal ist und überarbeitet werden müsste, oder aber es liegt ein anderer Grund vor, wie defekter RAM, defekte HDD.
 
Um die IPv6-Theroie zu testen: Was passiert, wenn du den Hostnamen in mysqli_connect durch 127.0.0.1 ersetzt?

Sicher, dass es an MySQL liegt? Wird
PHP:
<?php

phpinfo();
sofort ausgegeben?

Ansonsten, ja, ein EXPLAIN der Abfrage wäre interessant.
 
@SymA: defekter Ram wird die Ausführung aber nicht langsamer machen. Mit defektem Ram wird der MySQL-Server kaputte Daten liefern oder viel eher ganz abschmieren, da von den vielen C-Pointer irgendeiner nicht mehr auf eine korrekte Speicheradresse zeigen wird.
 
Euch is klar, dass der TE seit dem 19. nix mehr zur Sache beiträgt? Wahrscheinlich hat er entweder aufgegeben oder das Problem irgendwie gelöst...
 
Zurück
Oben