it-swarm-eu.dev

Wie teuer ist das Öffnen und Schließen einer DB-Verbindung?

Wie CPU-intensiv ist das Öffnen und Schließen einer DB-Verbindung (für eine Web-App) in MySQL

  • ... wenn die DB-Software auf localhost ist?
  • ... wenn sich die DB-Software auf einem anderen Computer befindet?
15
ThinkingMonkey

Überlegen Sie, wie viel Speicher pro DB-Verbindung zugewiesen wird. Welche Dinge müssen zugewiesen werden? Gemäß MySQL 5.0 Certification Study Guide, Seite 357 :

Der Server verwaltet mehrere Puffer für jede Clientverbindung. Einer wird als Kommunikationspuffer für den Informationsaustausch mit dem Client verwendet. Pro Client werden andere Puffer zum Lesen von Tabellen und Ausführen von Verknüpfungs- und Sortiervorgängen verwaltet.

Welche Einstellungen regeln die Puffer pro Verbindung?

Das Zuweisen und Freigeben dieser Puffer dauert einige Zeit, wenn eine Verbindung hergestellt wird. Vergessen Sie nicht, die Summe dieser Werte mit max_connections zu multiplizieren. Als Randnotiz verwenden Sie bitte nicht mysql_pconnect as PHP und die dauerhaften Verbindungen von MySQL verstehen sich nicht gut. Hier sind zwei informative Links zu diesem Thema:

In einer Umgebung mit starkem Lese- und Schreibaufwand wie OLTP wäre dies im Hinblick auf die Verwendung von RAM und mögliche Hemmung aufgrund des Austauschs im Betriebssystem) teuer. Auf einer Website mit geringem Schreibaufwand und geringem Leseaufwand Ich würde mir nicht so viele Sorgen machen.

12
RolandoMySQLDBA

Ich bin mir nicht sicher, ob es darauf ankommt, "wie viel teurer es ist". Es ist sicherlich teurer als die Wiederverwendung derselben Verbindung. Was Sie beobachten werden, hängt davon ab, ob Sie das Verbindungspooling korrekt verwenden, wie gesättigt Ihr Pool ist, welche Ressourcen auf der Box verfügbar sind usw.

Wenn Sie eine Schleife ausführen, um eine Interaktion mit der Datenbank durchzuführen, ist es im Allgemeinen weit besser, dieselbe aktive Verbindung wiederzuverwenden, als innerhalb der Schleife zu öffnen und zu schließen (ein Anti- Muster, das ich ziemlich oft sehe).

10
Aaron Bertrand

Das Dilemma zwischen der Wiederverwendung eines Objekts und dem Abreißen und Wiederaufbauen eines Objekts (beide haben Vor- und Nachteile) kann häufig mit einem Kompromiss angegangen werden: Zwischenspeichern des Objekts, jedoch für eine begrenzte Zeit (d. H. Mit Ablauf). Wenn häufig auf das Objekt zugegriffen wird, wird es weiterhin verwendet. Wenn es jedoch einige Zeit nicht verwendet wird, wird es durch einen Ablaufmechanismus entsorgt, sodass es neu erstellt werden muss, wenn es erneut benötigt wird.

Ein System kann einen globalen Hook für diese Art von Caches haben, der aufgerufen wird, wenn der Arbeitsspeicher niedrig ist, wodurch alle von ihnen kürzlich nicht verwendete Objekte löschen.

4
Dude

MySQL speichert Verbindungen (oder Threads) mithilfe des Thread-Cache (thread_cache_size) zwischen. Der maximale Wert dafür ist 100. Wenn der Client die Verbindung schließt, wird sie an den Cache zurückgegeben. Wenn eine neue Verbindung geöffnet wird, wird der Thread-Cache überprüft. Auf einem sehr ausgelasteten System kann das Öffnen und Schließen der Verbindung teuer werden, insbesondere wenn Sie lange laufende Abfragen haben.

https://dev.mysql.com/doc/refman/5.6/en/connection-threads.html Wenn Sie sich MySQL Enterprise leisten können, können Sie das in MySQL 5.6 implementierte Thread-Pool-Plug-In verwenden .

2
greenlitmysql