MySQL Connection Pooling

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Raven280438
Establishment
Beiträge: 140
Registriert: 03.10.2010, 20:14

MySQL Connection Pooling

Beitrag von Raven280438 »

Hi,

ich habe einen Server (Konsolen-Programm, in .NET Core 3.1, C#) was immer mal wieder mit einer MySQL Datenbank kommuniziert. (MySql.Data.MySqlClient)
Je nach Auslastung erfolgen Querys aller paar Sekunden, oder einige male pro Sekunde.

Wie mach ich das am Besten mit den Verbindungen? Soll ich für jeden Query-Block (mehrere zusammengehörigen Querys) ne neue Verbindung aufmachen, oder kann man die Verbindungen auch irgendwie offen halten? zB mach ich das Logging komplett über die Datenbank.

Passiert das Connection-Pooling bei MySql.Data.MySqlClient automatisch, oder muss ich mich selber drum kümmern? Und wenn Ja, wie?



Gruß
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4254
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: MySQL Connection Pooling

Beitrag von Chromanoid »

Huhu :) die Dokumentation hier sieht ziemlich danach aus, dass Du Dich darum nicht kümmern musst. Vielleicht sollte man das Abrufen der Connection mit immer dem gleichen Connection-String abstrahieren.
https://dev.mysql.com/doc/connector-net ... oling.html

Ich würde mir ggf. auch mal anschauen, wie man die Connection (inkl. Request/Scope-gebundenes Transaktionsmanagement) injecten lassen kann. Ich habe mal schnell gegooglet, das sieht hier ganz brauchbar aus: https://medium.com/agilix/asp-net-core- ... ab72b41e91
Benutzeravatar
Lord Delvin
Establishment
Beiträge: 574
Registriert: 05.07.2003, 11:17

Re: MySQL Connection Pooling

Beitrag von Lord Delvin »

Hast du mal gemessen, wie viel Zeit da vergeht? Also ist das wirklich ein Problem, bei dem es sich lohn darüber nachzudenken?
Und kannst du in deinem API irgendwie konfigurieren, ob die Verbindung offen bleibt?

Ich kenne Leute, die für Berechnungen eine neue Datenbank anlegen und sie am Ende wieder wegwerfen :-/
XML/JSON/EMF in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: MySQL Connection Pooling

Beitrag von Schrompf »

Ich hätte da irgendnen Auto-Pooling erwartet, aber im Detail kann Dir das nur die Doku verraten.

Connection Pooling im Allgemeinen: wenn Du nicht hunderte solcher Clients parallel auf der selben Datenbank hast, tut es erstmal nicht weh, jedesmal ne neue Connection aufzumachen. Ist halt ein kleiner Overhead, vielleicht ein paar Millisekunden, mit Auth ein paar mehr. Auf dem DB-Server brätst Du damit halt durch die Open Ports, aber das macht wie gesagt erst Schmerzen ab 4000 Connections in 2min (Default-Einstellungen eines Linux-Kernels)
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4254
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: MySQL Connection Pooling

Beitrag von Chromanoid »

Also je nach Datenbank kann das Aufbauen einer Connection echt lange dauern: https://vladmihalcea.com/the-anatomy-of ... n-pooling/ 100ms merkt man schon.
Antworten