SQL Wie “zu viele Verbindungen„ Fehler in MySQL zu vermeiden

Jeremias Veil

Newbie
Registriert
März 2015
Beiträge
1
Es kommt immer wieder vor, dass beim Versuch die Daten aus der Datenbank herunterladen, ich bekomme immer eine Ausnahme "Zu viele Verbindungen".
Ich weiß nicht die internen Funktionen der Datenbankoperationen, so dass ich nicht verstehe, was als eine Verbindung sein, wann eine Trennung passiert usw. : Freak2
Zum Beispiel: ich arbeite mit 3 TableAdapter. Einer für die regelmäßige Datenaktualisierung über die Benutzer. Die zweite konstant (2-3 mal pro Sekunde) prüft neuen Einträgen in der Tabelle "Chat" und die dritte, so oft überprüft eine Onlinebenutzer Tabelle.
So, manchmal einen Bedingungen auftreten, wenn gibt es nicht viel Kopien des Programms läuft, aber der Fehler "Zu viele Verbindungen" ist immer noch da. Ich möchte verstehen - es ist das Ergebnis meiner Leichtsinnsprogrammierung oder ist das Problem auf dem Server? : Freak
 
Also du kannst standardmäßig 100 Verbindungen zu MySQL aufbauen.
Kann es sein, dass du TableAdapter spamst, welche dann zu langsam wieder freigegeben werden? Nutzt doch z.B. phpmyadmin um zu schauen, wie viele Verbindungen du hast. Sinds mehr als 10, machste was falsch, sinds nur <=5, ist der Server nicht gut konfiguriert.
 
Kurz und knapp: Du musst bestehende Verbindungen auch irgendwann beenden, außer dein Datenbanksystem beherrscht die Wiederverwendung bestehender Verbindungen (aka. persistente Verbindungen).
Der Nachteil an persistenten Verbindungen: Wenn du innerhalb einer Verbindung einen Fehler hast, z.B. eine Transaktion startest, aber durch einen Fehler nicht beendest, dann "krepiert" diese Verbindung. Sie wird eine Art Zombie, der einen Slot der maximal möglichen Verbindungen belegt, aber keinerlei brauchbare Daten liefern kann.

Fazit: Mach deine Verbindungen auch wieder zu, wenn du fertig bist. Das gehört genauso zum gute Ton, wie einen Destructor für nicht mehr benötigte Objekte aufzurufen.
 
wie viele gleichzeitige Verbindungen zum Server erlaubt? Vielleicht sollten Sie diesen Wert erhöhen?

Stellen Sie außerdem sicher, dass das Problem nicht mit einem zyklischen Verfahren wie TableAdapter.Fill zB verbunden. Es kann sich öffnet und schließt eine Verbindung zu schnell für den Server. Vielleicht hält das Server nicht Schritt und hält die Verbindung zu öffnen ein wenig länger.

Utilities können helfen, es gibt kostenlose aber ich kann empfehlen diese Recovery Toolbox for MySQL https://mysql.recoverytoolbox.com/de/

Anstatt TableAdapter können Sie Daten in ein DataSet mit DataAdapters zu laden. Dann können Sie offene Verbindung zum SelectCommand.Connection angeben.

Viele Grüße
 
Zurück
Oben