Frage

Ich bin daran interessiert zu wissen, wie Datenbanken umgehen Verbindungen, die vom Unternehmen nicht explizit geschlossen werden, die die Verbindung initiiert hat.

  1. ich habe eine Datenbank, die nur 2 gleichzeitige Verbindungen zu einer Zeit annehmen kann. Ich habe ein Stück Code, der eine Verbindung öffnet und nie schließt es. Dieses Stück Code läuft immer, aber es nutzt die Verbindung nur einmal es Lebensdauer ist aber die Verbindung Objekt geht nie aus dem Umfang, so ist es nicht Müll gesammelt. Sagen wir, ich 2 Instanzen dieser Code ausführen. Bedeutet es, dass, bis das Programm beendet wird oder die Verbindung unterbrochen wird (aufgrund von Inaktivität) die Datenbank keine weiteren Anschlüsse mehr akzeptieren können?

  2. Im obigen Szenario, wenn das Verbindungsobjekt wird Müll gesammelt, dann ist die Verbindung automatisch beendet oder auf dem Datenbanktreiber abhängig ist, die ich verwende, oder die Verbindung wird überhaupt nicht beendet, bis ich es ausdrücklich in der Nähe?

  3. Wenn ich eine Verbindung in Stück Code öffnen und ich schließe die Verbindung nicht explizit, aber das Programm endet dann wie funktioniert die Datenbank, die Verbindung zurückzugewinnen?

War es hilfreich?

Lösung

Das zugrunde liegende Protokoll für Datenbankverbindungen ist in der Regel TCP / IP basiert. Die Verbindung kann in einer von mehreren Arten beendet werden:

  1. Der Server schließt sie elegant und empfängt eine Bestätigung von dem Client;
  2. schließt der Client ist elegant und empfängt eine Bestätigung von dem Server;
  3. Die Verbindungszeiten aus. Der Client und Server beide separat erzählt von ihren jeweiligen Betriebssystemen, die die Verbindung geschlossen wurde;
  4. Die Verbindung mit Nachdruck von beiden Seiten geschlossen ist.

Im Fall von (3), TCP-Verbindungen durch das Senden Dummy-Nachrichten jeder so oft am Leben gehalten werden muss, ein Timeout zu vermeiden. Ihre Verbindung Timeout kann, weil keine der beiden Seiten dies tun (und für eine Datenbankverbindung ist es nicht etwas, das man normalerweise tun will).

Es ist durchaus möglich, dass eine Zeit für eine Seite, die Verbindung zu denken, ist geschlossen und hte andere Seite immer noch glaubt, dass es offen ist. Meldungen können in diesen Fällen gesendet werden (und in der Regel verworfen).

Für jede Verbindung ( „socket“) verwendet ein Betriebssystem Ressource eine Dateideskriptors genannt (in UNIX Sprachgebrauch, kann Ihr OS nennen es etwas anderes), die eine Verbindung zu einer I / O-Ressource ist und dasselbe für eine offene Datei verwendet (auch hier kann OSs variieren).

Die Grenze für Verbindungen auf Ihrer Datenbank wird die niedrigste von:

  • Die konfigurierte Grenze für die OS;
  • die maximale Datei Deskriptoren für diesen Prozess erlaubt (abzüglich für I / O-Aktivität verwendet wird); und
  • (möglicherweise) Systemeinstellungen oder Richtlinien auf Verbindungslimits.

Wenn die Verbindung TCP basiert nicht (zB ein Dateisystem Sockel so oft mit MySQL auf UNIX-Systemen verwendet wird) die Grundsätze sind in der Tat sehr simlar.

Wie auch immer, die Moral der Geschichte von dieser zu nehmen ist, dass eine Datenbankverbindung - unabhängig von ihrer Form - ein Betriebssystem Ressource irgendeine Art verbunden ist. Ihr Programm hsa direkt oder indirekt für die Ressource gefragt. Wenn das Programm stirbt, wird das Betriebssystem zurückfordern (vielleicht nicht sofort, aber irgendwann). Wenn die Verbindung Müll gesammelt wird, dann wird die Ressource in der gleichen Art und Weise gelöst werden, als ob es mit Gewalt geschlossen worden war.

Sein dass externe Ressource (und nicht der Code Ihr Client verwendet), der die Verbindung geöffnet und treibt alle Grenzen hält.

Andere Tipps

Um Ihre Fragen zu beantworten, um:

  1. Ja, wahrscheinlich. Sofern nicht durch „gleichzeitige Verbindungen“ Sie bedeutet eigentlich „gleichzeitige Abfragen“. Wenn yo're die Datenbankverbindung offen zu halten, es ist offen.

  2. Die Garbage-Collection kann oder auch nicht die Verbindung aufzuräumen. Abhängig von der Sprache und dem Datenbanktreiber verwendet. (Garbage Collection auf Rückforderung Speicher begrenzt werden kann, nicht Ressourcen wie TCP-Verbindungen.)

  3. Wenn Ihr Programm beendet, in der Regel das Betriebssystem ist verantwortlich für alle Ressourcen Reinigung es verwendet. Dazu gehören Schließen TCP usw. Verbindungen. Also, für die meisten Verbindungstypen, wird die Datenbank darüber informiert, dass die andere Seite die Verbindung geschlossen.

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