Frage

Ich habe diese Zweifel, ich habe gesucht das web und die Antworten scheinen diversifiziert werden.Ist es besser zu verwenden mysql_pconnect über mysql_connect wenn eine Verbindung zu einer Datenbank über PHP?Ich habe gelesen, dass pconnect Waage viel besser, aber auf der anderen Seite, ist eine dauerhafte Verbindung...wir haben 10 000 verbindungen zur gleichen Zeit, alle persistenten, scheint nicht skalierbar zu mir.

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Persistent Verbindungen sollten für MySQL unnötig. In anderen Datenbanken (zB Oracle), eine Verbindung herzustellen, ist teuer und zeitaufwendig, so dass, wenn Sie eine Verbindung wiederverwenden kann es ein großer Gewinn ist. Aber diese Marken aus Datenbank bietet Connection Pooling, das das Problem in einer besseren Art und Weise löst.

Herstellen eine Verbindung zu einer MySQL-Datenbank ist schnell im Vergleich zu den anderen Marken, so persistente Verbindungen verwendet gibt proportional weniger Nutzen für MySQL als wäre es für eine andere Marke von Datenbank.

Persistent Verbindungen haben auch eine Kehrseite. Der Datenbankserver verteilt die Ressourcen für jede Verbindung, ob die Verbindungen benötigt werden oder nicht. Sie sehen also, eine Menge vergeudeter Ressourcen für keinen Zweck, wenn die Verbindungen im Leerlauf befinden. Ich weiß nicht, ob Sie 10.000 Verbindungen im Leerlauf erreicht werden, aber auch ein paar hundert ist teuer.

Verbindungen haben Zustand, und es wäre unangemessen für eine PHP-Anfrage von einer Sitzung zuvor von einer anderen PHP-Anforderung verwendet, um Informationen „erben“. Zum Beispiel werden temporäre Tabellen und Benutzervariablen normalerweise gereinigt als eine Verbindung geschlossen wird, aber nicht, wenn Sie persistente Verbindungen verwenden. Ebenso sitzungsbasierte Einstellungen wie Zeichensatz und Sortierung. Auch LAST_INSERT_ID() würde die ID berichtet zuletzt während der Sitzung erzeugt -. Auch wenn das bei einer früheren PHP-Anfrage war

Für MySQL zumindest die Kehrseite der persistenten Verbindungen wahrscheinlich schwerer wiegen als ihre Vorteile. Und es gibt andere, bessere Techniken hohe Skalierbarkeit zu erreichen.


Update März 2014:

MySQL Verbindungsgeschwindigkeit war immer niedrig im Vergleich zu anderen Marken von RDBMS, aber es wird immer noch besser.

Siehe http://mysqlserverteam.com/improving-connectdisconnect-performance/

  

In MySQL 5.6 begannen wir auf die Arbeit, den Code zu optimieren verbindet und trennt Handhabung. Und diese Arbeit hat in MySQL 5.7 beschleunigt. In dieser Blog-Post zeige ich zuerst die Ergebnisse, die wir erreicht haben, und dann beschreiben, was wir getan haben, um sie zu erhalten.

Lesen Sie den Blog, um weitere Informationen und Geschwindigkeitsvergleiche.

Andere Tipps

Im Grunde haben Sie zum Ausgleich der Kosten für die Erstellung von verbindungen gegen halten von verbindungen.Obwohl MySQL ist sehr schnell bei der Einrichtung einer neuen Verbindung, es kostet immer noch-in thread setup-Zeit, und in TCP/IP-setup-Zeit von Ihrem web-server.Dies ist deutlich auf einem high-genug traffic-Website.Leider ist PHP nicht alle Steuerelemente, die auf die Persistenz der verbindungen.Also die Antwort ist zu senken Sie die Leerlauf-timeout in MySQL ein langer Weg (wie unten zu 20 Sekunden dauern), und die thread-cache-Größe.Zusammen, diese Regel funktioniert bemerkenswert gut.

Auf der anderen Seite, Ihre Anwendung Bedürfnisse zu respektieren, die den Zustand der Verbindung.Es ist am besten, wenn es macht keine Annahmen über welchen Status der Sitzung.Wenn Sie die temporäre Tabellen verwenden, dann mit ERSTELLEN, WENN NICHT VORHANDEN ist und TRUNCATE TABELLE hilft eine Menge, wie die Benennung Sie eindeutig (wie auch als userid).Transaktionen sind problematischer;aber Ihr code kann immer tun ROLLBACK an der Spitze, nur in Fall.

Es ist sehr unwahrscheinlich, dass Sie 10.000 Verbindungen erreichen werden. gehen Wie auch immer, auf den offizielle Quelle . (Hervorhebung von mir).

  

Wenn persistente Verbindungen haben nicht   jede zusätzliche Funktionen, welche   sie gut?

     

Die Antwort ist sehr einfach -   Effizienz. Persistente Verbindungen sind   gut, wenn der Kopf einen Link zu erstellen   zum SQL-Server ist hoch. Ob oder   dieser Aufwand nicht wirklich hoch   hängt von vielen Faktoren ab. Wie, was   Art von Datenbank ist es, ob   nicht sitzt sie auf dem gleichen Computer auf   das Ihr Web-Server sitzt, wie   der SQL-Server geladen, um die Maschine sitzt   eingeschaltet ist und so weiter. Das Endergebnis   wenn viele Verbindungen ist, dass ist   hohe, dauerhafte Verbindungen helfen Ihnen   deutlich . Sie verursachen das Kind   Prozess zu verbinden, um einfach nur einmal   für die gesamte Lebensdauer, statt   jedesmal, wenn es verarbeitet eine Seite,   erfordert auf den SQL-Server zu verbinden.   Dies bedeutet, dass für jedes Kind, das   geöffnet wird eine dauerhafte Verbindung   haben ihre eigene offene persistent   Verbindung zum Server. Zum Beispiel,   wenn Sie hatte 20 verschiedene Kind   Prozesse, die ein Skript ausführen, die gemacht   eine persistente Verbindung zum SQL   Server, würden Sie 20 verschiedene haben   Verbindungen mit dem SQL-Server, ein   von jedem Kind.

     

Beachten Sie jedoch, dass dies haben einige   Nachteile, wenn Sie eine Datenbank verwenden   mit Verbindungslimits, die   durch anhaltendes Kind überschritt   Verbindungen. Wenn Ihre Datenbank hat ein   Grenze von 16 gleichzeitigen Verbindungen,   und im Laufe eines ausgelasteten Server   Sitzung, 17 Kind Threads versuchen,   verbinden, man wird nicht möglich sein. Wenn   gibt es Fehler in Ihrer Skripts des   nicht erlauben, die Verbindungen zu schließen   nach unten (wie Endlosschleifen), der   Datenbank mit nur 16 Verbindungen können   werden schnell überschwemmt. Überprüfe dein   Datenbank-Dokumentation für Informationen   bei der Handhabung verlassen oder im Leerlauf   Verbindungen.

mysql_connect() und mysql_pconnect() beide arbeiten für die Datenbankverbindung, aber mit wenig Unterschied. In mysql_pconnect(), p steht für persistance Verbindung.

Wenn wir verwenden mysql_connect() Funktion, jedes Mal wird das Öffnen und Schließen der Datenbankverbindung, je nach Anforderung.

Aber im Fall von mysql_pconnect() Funktion:

  • Zuerst beim Anschließen würde die Funktion versuchen, eine (persistente) Verbindung zu finden, die mit den gleichen Host, Benutzername und Passwort bereits geöffnet ist. Wenn einer gefunden wird, wird eine Kennung für sie statt zur Eröffnung eine neue Verbindung zurückgegeben werden.

  • Zweitens wird die Verbindung mit dem SQL Server nicht geschlossen werden, wenn die Ausführung des Skripts beendet. Stattdessen wird die Verbindung offen bleibt für die zukünftige Verwendung (mysql_close() nicht enge Verbindung von mysql_pconnect() etabliert).

mysql_pconncet() ist nützlich, wenn Sie eine Menge traffice auf Ihrer Website haben. Zu dieser Zeit für jede Anforderung wird es keine Verbindung öffnen, aber es wird aus dem Pool nehmen. Dadurch wird die Effizienz Ihrer Website erhöhen. Aber für den allgemeinen Gebrauch mysql_connect () ist am besten.

mysql_connect ()

1.mysql_connect verwendet werden kann, die connection.Every Zeit zu schließen es öffnet und die Datenbankverbindung zu schließen, je nach Anforderung.

2.Here Datenbank wird jedes Mal geöffnet, wenn die Seite in MYSQL geladen verbinden

3. Wenn die Seite geladen wird, wird die Datenbank geladen, jedes Mal

4.It wird verwendet, um die Verbindung zu schließen

Beispiel:

<?php $conn = mysql_connect(‘host’, ‘mysql_user’, ‘mysql_password’); if(!$conn){ die(‘Could not connect: ‘ . mysql_error()); } echo ‘Connected successfully’; mysql_close($conn); ?>

Beschreibung:

host: Gibt einen Hostnamen oder eine IP-Adresse wie localhost

.

mysql_user: Gibt die MySQL-Benutzername

mysql_password: Gibt das MySQL Passwort

mysql_pconnect ()

1. Sie verwenden die mysql_pconncet (), versucht es zunächst eine offene persistente Verbindung zu finden.

2. mysql_pconncet () öffnet persistente Verbindung

3.Die mysql_pconnect () unterstützt nicht die enge Verbindung

4.mysql_pconnect () kann nicht die Verbindung schließen. Hier öffnen Sie eine persistente Verbindung zur Datenbank

5.Here Datenbank muss nicht jedes Mal angeschlossen werden.

6.Die Datenbank muss nicht jedes Mal in mysql_pconncet angeschlossen werden ().

Weitere Informationen: http://prittytimes.com/difference-between-mysql_connect- and-mysql_pconnect /

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top