Laden...

MSSQL Pooling funktioniert nicht bei 10 aufeinanderfolgenden Anfragen

Erstellt von Thron vor 4 Jahren Letzter Beitrag vor 4 Jahren 871 Views
T
Thron Themenstarter:in
63 Beiträge seit 2017
vor 4 Jahren
MSSQL Pooling funktioniert nicht bei 10 aufeinanderfolgenden Anfragen

verwendetes Datenbanksystem: MSSQL Express

Hallo habe eine Frage und komme nicht weiter. Soweit ich weiß, wird bei SQL Pooling standardmäßig verwendet, was auch bei dem Test hier im SQL Server Profiler zu sehen ist:


            SqlConnection con = new SqlConnection(@"Data Source=127.0.0.1,1433;Network Library=DBMSSOCN;Initial Catalog=db1;User=server;Password=12345;");

            // Verbindung 10-mal öffnen und schließen                  


            for (int i = 0; i < 10; i++)
            {
                con.Open();

                con.Close();

                Thread.Sleep(100);
            }
            

            Console.WriteLine("Feritg!!");
            Console.ReadLine();

Wen ich nun aber z.B. 10 Abfragen hintereinader mache um das Pooling zu testen, öffnet er mir jedesmal eine Verbindung und schließt Diese danach auch wieder (10 mal). Wie wenn es keine Pool gäbe!?


            SqlConnection con = new SqlConnection(@"Data Source=127.0.0.1,1433;Network Library=DBMSSOCN;Initial Catalog=db1;User=server;Password=1234;");

            // Verbindung 10-mal öffnen und schließen
            SqlCommand command = new SqlCommand("Select * from Benutzer", con);


            for (int i = 0; i < 10; i++)
            {
                con.Open();
                SqlDataReader dataReader = command.ExecuteReader();

                while (dataReader.Read())
                {
                    Console.WriteLine(dataReader.GetValue(1));
                }

                con.Close();
                Thread.Sleep(100);
            }

            Console.WriteLine("Feritg!!");
            Console.ReadLine();

Irgednwie kappiere ich das nicht. Dachte das Pooling genau für solche Fälle da ist!?

Viele Grüße und danke schon im Voraus für die Mühe...

thron

16.807 Beiträge seit 2008
vor 4 Jahren

Dafür ist prinzipiell nicht unbedingt nur der MSSQL verantwortlich, sondern ADO.NET.
ADO.NET empfiehlt hier auch immer eine neue SqlConnection Instanz zu erzeugen, und nicht das gleiche Objekt wieder zu verwenden.
Der Key für den Pool ist nur der Connection String.

Meine Vermutung:

  • Im Audit übersiehst Du "Nonpooled" und "Pooled" Eigenschaften der Verbindungen
  • Du disposed nirgends SqlDataReader, sodass hier vermutlich noch nen Handle offen ist (allgemein hast Du nirgends ein Dispose). Close() hat noch nie für das Freigeben gereicht; weder bei Readern noch bei Connections.
  • Dein Code läuft viel schneller durch als der Connection Pool die Verbindungen verwalten kann
  • Irgendein anderer Seiteneffekt