Dela via


OLE DB-, ODBC- och Oracle-anslutningspooler

När du har poolanslutningar kan du avsevärt förbättra programmets prestanda och skalbarhet. I den här artikeln beskrivs anslutningspooler för .NET Framework-dataprovidrar för OLE DB, ODBC och Oracle.

OleDb

.NET Framework-dataprovidern för OLE DB poolar automatiskt anslutningar med hjälp av OLE DB-sessionspooler. Anslutningssträngsargument kan användas för att aktivera eller inaktivera OLE DB-tjänster, inklusive poolning. Följande anslutningssträng inaktiverar till exempel OLE DB-sessionspooler och automatisk transaktionsregistrering.

Provider=SQLOLEDB;OLE DB Services=-4;Data Source=localhost;Integrated Security=SSPI;

Viktigt!

Microsoft rekommenderar att du använder det säkraste tillgängliga autentiseringsflödet. Om du ansluter till Azure SQL är hanterade identiteter för Azure-resurser den rekommenderade autentiseringsmetoden.

Vi rekommenderar att du alltid stänger eller tar bort en anslutning när du är klar med den för att returnera anslutningen till poolen. Anslutningar som inte är uttryckligen stängda kanske inte returneras till poolen. En anslutning som har gått utanför omfånget men som inte uttryckligen har stängts returneras till anslutningspoolen om den maximala poolstorleken nås och anslutningen fortfarande är giltig.

Mer information om OLE DB-session eller resurspooler samt hur du inaktiverar poolning genom att åsidosätta standardvärden för OLE DB-providertjänster finns i GUIDEN för OLE DB-programmeraren.

ODBC

Anslutningspooler för .NET Framework-dataprovidern för ODBC hanteras av ODBC Driver Manager som används för anslutningen och påverkas inte av .NET Framework-dataprovidern för ODBC.

Om du vill aktivera eller inaktivera anslutningspooler öppnar du ODBC-datakälladministratören i mappen Administrationsverktyg i Kontrollpanelen. På fliken Anslutningspool kan du ange parametrar för anslutningspooler för varje INSTALLERAD ODBC-drivrutin. Ändringar i anslutningspoolen för en specifik ODBC-drivrutin påverkar alla program som använder ODBC-drivrutinen.

OracleClient

.NET Framework-dataprovidern för Oracle tillhandahåller anslutningspooler automatiskt för ditt ADO.NET klientprogram. Du kan också ange flera anslutningssträng modifierare för att styra beteendet för anslutningspooler (se Kontrollera anslutningspooler med nyckelord för anslutningssträngar senare i den här artikeln).

Skapa och tilldela pooler

När en anslutning öppnas skapas en anslutningspool baserat på en exakt matchande algoritm som associerar poolen med anslutningssträng i anslutningen. Varje anslutningspool är associerad med en distinkt anslutningssträng. När en ny anslutning öppnas skapas en ny pool om anslutningssträng inte är en exakt matchning mot en befintlig pool.

När anslutningspoolerna har skapats förstörs de inte förrän den aktiva processen avslutas. Att underhålla inaktiva eller tomma pooler använder mycket få systemresurser.

Tillägg av anslutning

En anslutningspool skapas för varje unik anslutningssträng. När en pool skapas skapas flera anslutningsobjekt och läggs till i poolen så att minimikravet för poolstorlek uppfylls. Anslutningar läggs till i poolen efter behov, upp till den maximala poolstorleken.

När ett OracleConnection objekt begärs hämtas det från poolen om en användbar anslutning är tillgänglig. För att kunna användas måste anslutningen för närvarande vara oanvänd, ha en matchande transaktionskontext eller inte associeras med någon transaktionskontext och ha en giltig länk till servern.

Om den maximala poolstorleken har nåtts och ingen användbar anslutning är tillgänglig placeras begäran i kö. Anslutningspoolen uppfyller dessa begäranden genom att omplacera anslutningar när de släpps tillbaka till poolen. Anslutningar släpps tillbaka till poolen när de stängs eller tas bort.

Borttagning av anslutning

Anslutningspoolen tar bort en anslutning från poolen efter att den har varit inaktiv under en längre tid eller om poolhanteraren upptäcker att anslutningen till servern har avbrutits. Detta kan bara identifieras när du har försökt kommunicera med servern. Om en anslutning hittas som inte längre är ansluten till servern markeras den som ogiltig. Anslutningspooleraren söker regelbundet igenom anslutningspooler och letar efter objekt som har släppts till poolen och har markerats som ogiltiga. Dessa anslutningar tas sedan bort permanent.

Om det finns en anslutning till en server som har försvunnit kan den här anslutningen hämtas från poolen om anslutningspoolen inte har identifierat den avhuggna anslutningen och markerat den som ogiltig. När detta inträffar genereras ett undantag. Du måste dock fortfarande stänga anslutningen för att kunna frigöra den i poolen igen.

Anropa Close inte eller Dispose på ett Connection, ett DataReader, eller något annat hanterat objekt i -metoden för Finalize din klass. I en finalizer släpper du bara ohanterade resurser som klassen äger direkt. Om klassen inte äger några ohanterade resurser ska du inte inkludera någon Finalize metod i din klassdefinition. Mer information finns i Skräpinsamling.

Transaktionsstöd

Anslutningar hämtas från poolen och tilldelas baserat på transaktionskontext. Kontexten för den begärande tråden och den tilldelade anslutningen måste matcha. Därför delas varje anslutningspool in i anslutningar utan associerad transaktionskontext och i N-underavdelningar som var och en innehåller anslutningar med en viss transaktionskontext.

När en anslutning stängs släpps den tillbaka till poolen och till lämplig underindelning baserat på dess transaktionskontext. Därför kan du stänga anslutningen utan att generera ett fel, även om en distribuerad transaktion fortfarande väntar. På så sätt kan du checka in eller avbryta den distribuerade transaktionen vid ett senare tillfälle.

Kontrollera anslutningspooler med nyckelord för anslutningssträng

Egenskapen ConnectionString för OracleConnection objektet stöder anslutningssträng nyckel/värde-par som kan användas för att justera beteendet för anslutningspoollogik.

I följande tabell beskrivs de ConnectionString värden som du kan använda för att justera beteendet för anslutningspooler.

Name Standardvärde beskrivning
Connection Lifetime 0 När en anslutning returneras till poolen jämförs dess skapandetid med den aktuella tiden och anslutningen förstörs om tidsintervallet (i sekunder) överskrider det värde som anges av Connection Lifetime. Detta är användbart i klustrade konfigurationer för att framtvinga belastningsutjämning mellan en server som körs och en server som just har tagits online.

Ett värde på noll (0) gör att poolanslutningar har maximal tidsgräns.
Enlist "sant" När trueregistrerar pooler automatiskt anslutningen i den aktuella transaktionskontexten för skapandetråden om det finns en transaktionskontext.
Max Pool Size 100 Det maximala antalet anslutningar som tillåts i poolen.
Min Pool Size 0 Det minsta antalet anslutningar som underhålls i poolen.
Pooling "sant" När true, hämtas anslutningen från lämplig pool, eller vid behov, skapas och läggs till i lämplig pool.

Se även