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ß
MySQL Connection Pooling
-
- Establishment
- Beiträge: 140
- Registriert: 03.10.2010, 20:14
- Chromanoid
- Moderator
- Beiträge: 4285
- Registriert: 16.10.2002, 19:39
- Echter Name: Christian Kulenkampff
- Wohnort: Lüneburg
Re: MySQL Connection Pooling
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
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
- Lord Delvin
- Establishment
- Beiträge: 598
- Registriert: 05.07.2003, 11:17
Re: MySQL Connection Pooling
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 :-/
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 :-/
- Schrompf
- Moderator
- Beiträge: 5146
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas
- Wohnort: Dresden
- Kontaktdaten:
Re: MySQL Connection Pooling
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)
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.
- Chromanoid
- Moderator
- Beiträge: 4285
- Registriert: 16.10.2002, 19:39
- Echter Name: Christian Kulenkampff
- Wohnort: Lüneburg
Re: MySQL Connection Pooling
Also je nach Datenbank kann das Aufbauen einer Connection echt lange dauern: https://vladmihalcea.com/the-anatomy-of ... n-pooling/ 100ms merkt man schon.