OLE DB-, ODBC- en Oracle-verbindingspooling
Wanneer u verbindingen groepeert, kunt u de prestaties en schaalbaarheid van uw toepassing aanzienlijk verbeteren. In dit artikel worden groepsgewijze verbindingen besproken voor de .NET Framework-gegevensproviders voor OLE DB, ODBC en Oracle.
OleDb
De .NET Framework-gegevensprovider voor OLE DB groepeert automatisch verbindingen met OLE DB-sessiepooling. Argumenten voor verbindingsreeksen kunnen worden gebruikt om OLE DB-services, waaronder pooling, in of uit te schakelen. Met de volgende verbindingsreeks bijvoorbeeld het groeperen van OLE DB-sessies en automatische opname van transacties wordt uitgeschakeld.
Provider=SQLOLEDB;OLE DB Services=-4;Data Source=localhost;Integrated Security=SSPI;
Belangrijk
Microsoft raadt u aan de veiligste verificatiestroom te gebruiken die beschikbaar is. Als u verbinding maakt met Azure SQL, is Managed Identities voor Azure-resources de aanbevolen verificatiemethode.
U wordt aangeraden een verbinding altijd te sluiten of te verwijderen wanneer u klaar bent met het gebruik ervan om de verbinding met de pool te retourneren. Verbindingen die niet expliciet zijn gesloten, worden mogelijk niet geretourneerd naar de pool. Een verbinding die buiten het bereik is gegaan, maar die niet expliciet is gesloten, wordt bijvoorbeeld alleen geretourneerd naar de verbindingsgroep als de maximale groepsgrootte is bereikt en de verbinding nog steeds geldig is.
Zie de handleiding voor OLE DB-programmeurs voor meer informatie over OLE DB-sessie of resourcegroepering en het uitschakelen van pooling door de standaardinstellingen voor OLE DB-providers te overschrijven.
ODBC
Groepsgewijze verbindingen voor de .NET Framework-gegevensprovider voor ODBC worden beheerd door het ODBC-stuurprogrammabeheer dat wordt gebruikt voor de verbinding en wordt niet beïnvloed door de .NET Framework-gegevensprovider voor ODBC.
Als u groepsgewijze verbindingen wilt in- of uitschakelen, opent u ODBC-gegevensbronbeheerder in de map Systeembeheer van Configuratiescherm. Op het tabblad Groepsgewijze verbinding kunt u parameters voor groepsgewijze verbindingen opgeven voor elk ODBC-stuurprogramma dat is geïnstalleerd. Wijzigingen in groepsgewijze verbindingen voor een specifiek ODBC-stuurprogramma zijn van invloed op alle toepassingen die gebruikmaken van dat ODBC-stuurprogramma.
OracleClient
De .NET Framework-gegevensprovider voor Oracle biedt automatisch groepsgewijze verbindingen voor uw ADO.NET-clienttoepassing. U kunt ook verschillende verbindingsreeks modifiers opgeven om het gedrag van groepsgewijze verbindingen te beheren (zie 'Verbindingspooling beheren met trefwoorden voor verbindingsreeksen', verderop in dit artikel).
Pools maken en toewijzen
Wanneer een verbinding wordt geopend, wordt er een verbindingsgroep gemaakt op basis van een exact overeenkomend algoritme dat de pool koppelt aan de verbindingsreeks in de verbinding. Elke verbindingsgroep is gekoppeld aan een afzonderlijke verbindingsreeks. Wanneer er een nieuwe verbinding wordt geopend, wordt er een nieuwe pool gemaakt als de verbindingsreeks niet exact overeenkomt met een bestaande pool.
Zodra het is gemaakt, worden verbindingsgroepen pas vernietigd nadat het actieve proces is beëindigd. Het onderhouden van inactieve of lege pools maakt gebruik van zeer weinig systeembronnen.
Toevoeging van verbinding
Er wordt een verbindingsgroep gemaakt voor elke unieke verbindingsreeks. Wanneer een pool wordt gemaakt, worden er meerdere verbindingsobjecten gemaakt en toegevoegd aan de pool, zodat aan de minimale grootte van de pool wordt voldaan. Verbindingen worden indien nodig aan de pool toegevoegd, tot de maximale poolgrootte.
Wanneer een OracleConnection object wordt aangevraagd, wordt het verkregen uit de pool als er een bruikbare verbinding beschikbaar is. Om bruikbaar te zijn, moet de verbinding momenteel ongebruikt zijn, een overeenkomende transactiecontext hebben of niet zijn gekoppeld aan een transactiecontext en een geldige koppeling naar de server hebben.
Als de maximale poolgrootte is bereikt en er geen bruikbare verbinding beschikbaar is, wordt de aanvraag in de wachtrij geplaatst. De verbindingspooler voldoet aan deze aanvragen door verbindingen opnieuw te verplaatsen wanneer ze weer in de pool worden vrijgegeven. Verbindingen worden weer in de pool vrijgegeven wanneer ze worden gesloten of verwijderd.
Verwijderen van verbinding
De verbindingspooler verwijdert een verbinding uit de pool nadat deze gedurende langere tijd inactief is geweest of als de pooler detecteert dat de verbinding met de server is verbroken. Dit kan alleen worden gedetecteerd nadat u hebt geprobeerd met de server te communiceren. Als er een verbinding wordt gevonden die niet meer is verbonden met de server, wordt deze gemarkeerd als ongeldig. De verbindingspooler scant periodiek verbindingsgroepen op zoek naar objecten die zijn vrijgegeven aan de pool en zijn gemarkeerd als ongeldig. Deze verbindingen worden vervolgens definitief verwijderd.
Als er een verbinding bestaat met een server die is verdwenen, kan deze verbinding worden getrokken uit de pool als de verbindingspooler de verbroken verbinding niet heeft gedetecteerd en deze als ongeldig heeft gemarkeerd. Wanneer dit gebeurt, wordt er een uitzondering gegenereerd. U moet de verbinding echter nog steeds sluiten om deze weer in de pool te kunnen vrijgeven.
Roep een of ander beheerd object niet aan of Dispose
op een Connection
DataReader
ander beheerd object in de Finalize
methode van uw Close
klasse. In een finalizer kunt u alleen onbeheerde resources vrijgeven die rechtstreeks eigendom zijn van uw klasse. Als uw klasse geen onbeheerde resources bezit, neemt u Finalize
geen methode op in uw klassedefinitie. Zie Garbagecollection voor meer informatie.
Transactieondersteuning
Verbindingen worden opgehaald uit de pool en toegewezen op basis van transactiecontext. De context van de aanvraagthread en de toegewezen verbinding moeten overeenkomen. Daarom wordt elke verbindingsgroep onderverdeeld in verbindingen zonder gekoppelde transactiecontext en in N-onderverdelingen die elk verbindingen met een bepaalde transactiecontext bevatten.
Wanneer een verbinding wordt gesloten, wordt deze weer in de pool en in de juiste onderverdeling vrijgegeven op basis van de transactiecontext. Daarom kunt u de verbinding sluiten zonder een fout te genereren, ook al is een gedistribueerde transactie nog in behandeling. Hierdoor kunt u de gedistribueerde transactie op een later tijdstip doorvoeren of afbreken.
Groepsgewijze verbindingen beheren met verbindingsreeks trefwoorden
De ConnectionString eigenschap van het OracleConnection object ondersteunt verbindingsreeks sleutel-/waardeparen die kunnen worden gebruikt om het gedrag van de verbindingsgroeplogica aan te passen.
In de volgende tabel worden de ConnectionString waarden beschreven die u kunt gebruiken om het gedrag van groepsgewijze verbindingen aan te passen.
Naam | Default | Beschrijving |
---|---|---|
Connection Lifetime |
0 | Wanneer een verbinding wordt geretourneerd naar de pool, wordt de aanmaaktijd vergeleken met de huidige tijd en wordt de verbinding vernietigd als die tijdsduur (in seconden) de waarde overschrijdt die is opgegeven door Connection Lifetime . Dit is handig in geclusterde configuraties om taakverdeling af te dwingen tussen een actieve server en een server die zojuist online is gebracht.Een waarde van nul (0) zorgt ervoor dat gegroepeerde verbindingen de maximale time-out hebben. |
Enlist |
'waar' | Wanneer true de pooler automatisch de verbinding in de huidige transactiecontext van de aanmaakthread inschrijft als er een transactiecontext bestaat. |
Max Pool Size |
100 | Het maximum aantal verbindingen dat is toegestaan in de groep. |
Min Pool Size |
0 | Het minimale aantal verbindingen dat in de groep wordt onderhouden. |
Pooling |
'waar' | Wanneer true , de verbinding wordt getrokken uit de juiste pool, of indien nodig, gemaakt en toegevoegd aan de juiste groep. |
Zie ook
- Groepsgewijze verbinding
- Performance Counters (Prestatiemeteritems)
- overzicht van ADO.NET