Seite 1 von 1
mySQL Verbindung von extern sehr langsam
Verfasst: 10.06.2010, 22:06
von tojas
Hallo Leute,
vermutlich kennt sich hier der ein oder andere besser mit mysql aus als ich und kann mir einen Tipp geben...
Ich habe einen mysql Server, auf den ich auch von ausserhalb (=anderen Domains) zugreife. Soweit klappt das auch, jedoch ist der Zugriff von den externen Domains sehr langsam (mysql_connect benötigt ein paar Sekunden).
skip-name-resolve habe ich schon probiert, daran liegt es offensichtlich nicht.
Hat jemand eine Idee wie ich das beschleunigen kann?
Danke + sG
tojas
Verfasst: 11.06.2010, 00:54
von net(t)worker
warum immer wieder eine neue connection aufbauen? versuchs mal mit einer persistenten Verbindung... macht natürlich nur Sinn wenn die externen scripte regelmäßig auf die db zugreifen...
https://php.net/manual/de/function.mysql-pconnect.php
https://www.php.net/manual/de/features. ... ctions.php
Verfasst: 11.06.2010, 09:04
von kostaki
Stehen die Server im gleichen Rechenzentrum?
Verfasst: 11.06.2010, 09:21
von tojas
Danke erstmal für eure Antworten.
warum immer wieder eine neue connection aufbauen? versuchs mal mit einer persistenten Verbindung...
Die Frage ist, wie sich der (mysql)Server dann unter Last verhält. Ich vermute mal, das ich dann die max_connections auch erhöhen müsste. Aber ich teste das mal.
Stehen die Server im gleichen Rechenzentrum?
Nein.
sG
tojas
Verfasst: 11.06.2010, 10:21
von tojas
Persistente Verbind habe ich jetzt getestet. Bringt auch was, aber ich müsste dazu whr. die Seiten zu sehr umstricken. Außerdem erhöht es die gleichzeitigen connections ungemein -> also nur Notlösung...
Hier mal die aktuelle Zeitmessung für eine DB Verbindung und select_db:
Dauer gesamt: 3.833962 Sekunden
Dauer connection: 3.825246 Sekunden
Dauer select_db: 0.008716 Sekunden
Ich wäre für weitere Ideen dankbar
***EDIT***
Weiß jemand, wie ich testen kann ob skip-name-resolve wirklich aktiv ist?
sG
tojas
Verfasst: 11.06.2010, 10:46
von Synonym
zeig doch mal Deine my.cnf für den Server. Ich persönlich würde aber schon auf "--skip-name-resolve" tippen.
Nachtrag:
Weiß jemand, wie ich testen kann ob skip-name-resolve wirklich aktiv ist?
Ganz einfach, wenn "skip-name-resolve" aktiv ist, dann kannst Du Dich nur per IP mit dem MySQL-Server verbinden, per Host geht dann nicht.
Wie sind denn Deine Freigaben eingetragen? Also das "GRANT ... ON mysql.user TO 'user_name'@'host_name';" Ist "host_name" eine IP oder ein Host?
Wie verbindest Du Dich mit dem Server - als IP oder per Host?
Kurz gesagt, mysql_connect('mysql-server.de', 'user', 'pass') geht nicht, wenn skip-name-resolve aktiv.
Verfasst: 11.06.2010, 10:59
von SloMo
Mal ganz dumm nachgefragt, beim skip-name-resolve geht es um DNS, richtig? Welcher DNS braucht denn über 3 Sekunden, um eine Namensauflösung zu erledigen, die andauernd gemacht wird? Den DNS sollte man mal untersuchen. Außerdem mal HOST_CACHE_SIZE prüfen, denn eigentlich sollte MySQL die Host-Auflösung cachen... nur falls sehr viele Hosts drauf zugreifen, wird wieder der DNS-Fallback benutzt.
@Synonym: In der Mysql-Doku steht "You can disable DNS host name lookups by starting mysqld with the --skip-name-resolve option. However, in this case, you can use only IP numbers in the MySQL grant tables."
Es geht dabei also um die Grant-Tables (Zugriffsberechtigung), nicht um den PHP-seitigen Verbindungsaufbau via mysql_connect(). PHPs mysql_connect() wird trotzdem den Namen auflösen können.
Verfasst: 11.06.2010, 11:19
von Synonym
@SloMo.
Es geht dabei also um die Grant-Tables (Zugriffsberechtigung), nicht um den PHP-seitigen Verbindungsaufbau via mysql_connect(). PHPs mysql_connect() wird trotzdem den Namen auflösen können.
Gut, stimmt, falsch ausgedrückt. Meine Server machen alle keinen Lookup, also geht das bei mir dann nur nicht. Dann kann es aber auch gut an den DNS-Einträgen selbst liegen. Irgend ein Sever / Dienst muss den Namen dann auflösen (gethostbyname) und wenn dann die Einträge nicht passen, dann gibt es eine Schleife, bis zum Timeout.
Welcher DNS braucht denn über 3 Sekunden, um eine Namensauflösung zu erledigen, die andauernd gemacht wird?
Viele selbst zusammengeschüsterte.
Verfasst: 11.06.2010, 11:46
von net(t)worker
tojas hat geschrieben:Danke erstmal für eure Antworten.
warum immer wieder eine neue connection aufbauen? versuchs mal mit einer persistenten Verbindung...
Die Frage ist, wie sich der (mysql)Server dann unter Last verhält. Ich vermute mal, das ich dann die max_connections auch erhöhen müsste. Aber ich teste das mal.
nunja... es wird halt eine Verbindung hergestellt und die bleibt bestehen... aber auf die Anzahl der connections kann es sich auch positiv auswirken... wenn du mehrere instanzen eines scriptes auf dem selben server gleichzeitig am laufen hast nutzen die alle diese eine persistente Verbindung anstatt jeweils eine eigene aufzubauen... könnte so also die Anzahl der gleichzeitigen Verbindungen verringern....
Verfasst: 11.06.2010, 12:09
von kostaki
Wie weit stehen die Server den auseinander? Einer in China der andere in den USA? Webserver und DB Server sollten wenn möglich im gleichen Netz stehen, besonders wenn es um Userwebseiten geht!
Verfasst: 11.06.2010, 12:55
von tojas
Hi Leute,
ich habe das Problem gefunden, es liegt an der Firewall auf dem Server, wo die mysql DB läuft.
Komischerweise hatte ich das aber so konfiguriert, das port 3306/tcp offen ist??
@Marco:
Die Server stehen alle hier in DE
Meine Firewallregeln seht ihr hier:
https://www.imagebam.com/image/64f1b684069736
Danke+schöne Grüße
tojas