|
|
Publicerad på 2016-09-17 15:41:28
|
|
|
|

Sammanfattning Idag ska jag prata om databasanslutningspooler. Ärligt talat sa jag att ankpäronet är väldigt stort. För att kopplingspooler är relativt svåra att förstå jämfört med andra kapitel. Jag vill förklara det för dig i de mest populära meningarna, men det är ingen lätt uppgift. Anslutningspooler är dock också en mycket viktig kunskapspunkt, särskilt vid distribution av fleranvändarprogram. Därför måste jag inte bara tala utan också tala ordentligt. Genom denna artikel kommer du att förstå grunderna i anslutningspooling och hur det redan används för att förbättra prestandan i din applikation.
Innehållsförteckning Vad är en anslutningspool? Hur anslutningspoolen fungerar Låt oss prata om några mycket viktiga egenskaper hos kopplingspooler Undantag och hanteringsmetoder för anslutningspooler Ett sätt att övervaka statusen på din anslutning Grundläggande principer för effektiv användning av anslutningspooler 1. Vad är en anslutningspool? I den föregående artikeln, "ADO.NET du måste känna till (4) Taste Connection Objects", har jag betonat att etablera en databasanslutning är mycket tidskrävande (tidskrävande) och arbetskrävande (resurskrävande). Detta beror på att anslutning till en databasserver involverar flera långa processer: att etablera en fysisk kanal (såsom en socket eller namngiven pipeline), göra ett initialt handslag med servern, analysera anslutningssträngsinformationen, låta servern autentisera anslutningen, köra en kontroll för att registrera sig i den aktuella transaktionen, och så vidare. Oavsett varför det finns en sådan mekanism, finns det alltid en anledning till existens. Eftersom det är så smärtsamt att skapa en ny koppling, varför inte återanvända en befintlig?
Faktum är att ADO.NET redan ger oss en optimeringsmetod som kallas connection pooling. En anslutningspool är en sådan container: den rymmer ett visst antal fysiska anslutningar till databasservern. Därför, när vi behöver ansluta till databasservern, behöver vi bara ta bort en ledig anslutning från poolen (containern) istället för att skapa en ny. Detta minskar avsevärt överhuvudet för att ansluta till databasen, vilket förbättrar applikationens prestanda.
PS:本来做了2张图片来描述连接池的,无奈公司装有监控软件,不能上传,所以只能等下次有时间上传了。
2. Hur anslutningspoolen fungerar 2.1 Skapa en anslutningspool Det bör noteras att anslutningspooler är klasskänsliga. Det vill säga, samma applikationsdomän kan ha flera olika typer av anslutningspooler samtidigt. Så, hur identifieras anslutningspooler? I detalj skiljs den åt av signaturen som utgör processen, applikationsdomänen, anslutningssträngen och Windows-identiteten (vid användning av integrerad säkerhet). För samma applikationsdomän identifieras den dock vanligtvis endast av anslutningssträngen. När en anslutning öppnas skapas en ny anslutningspool om typsignaturen för stripanslutningen inte matchar typen på den befintliga anslutningspoolen. annars skapas ingen ny anslutningspool.
Ett typiskt exempel på att skapa en koppling:
I ovanstående fall skapade jag tre SqlConnection-objekt, men endast två anslutningspooler behövdes för att hantera dem. Försiktiga vänner, ni kanske redan har upptäckt att conn1 och conn3 har samma anslutningssträng, så de kan dela en anslutningspool, medan conn2 och conn1 skiljer sig från conn3, så du behöver skapa en ny anslutningspool.
2.2 Allokering av vilo-anslutningar När en användare skapar en anslutningsförfrågan eller anropar Open of a Connection-objektet måste anslutningspoolhanteraren först hitta en anslutningspool av matchande typ baserat på typsignaturen för anslutningsförfrågan, och sedan försöka allokera en ledig anslutning. Detaljerna är följande:
Om det finns en tillgänglig anslutning i poolen, returnera anslutningen. Om alla anslutningar i poolen är uttömda, skapa en ny anslutning att lägga till i poolen. Om det maximala antalet anslutningar i poolen har uppnåtts, går förfrågan in i väntekön tills lediga anslutningar finns tillgängliga. 2.3 Ta bort ogiltiga anslutningar Ogiltiga anslutningar, det vill säga anslutningar som inte ansluter korrekt till databasservern. För anslutningspooler är antalet anslutningar som lagras till databasservern begränsat. Därför, om ogiltiga anslutningar inte tas bort i tid, kommer utrymme i anslutningspoolen att slösas bort. Faktum är att du inte behöver oroa dig, anslutningspoolchefen har tagit hand om dessa problem mycket väl åt oss. Om en anslutning är inaktiv under en längre tid, eller om den upptäcker att anslutningen till servern är frånkopplad, tar anslutningspoolhanteraren bort anslutningen från poolen.
2.4 Återvinna använda anslutningar När vi är klara med att använda en anslutning bör vi stänga eller släppa den i tid så att anslutningen kan återföras till poolen för återanvändning. Vi kan stänga kopplingen via Close or Disposo-metoden i Connection-objektet, eller genom using statement i C#.
3. Berätta om några mycket viktiga egenskaper Beteendet hos anslutningspoolen kan styras av anslutningssträngar och omfattar huvudsakligen fyra viktiga egenskaper:
Anslutningstimeout: Tiden för anslutningsbegäran att vänta på timeout. Standardvärdet är 15 sekunder i sekunder. Max poolstorlek: Det maximala antalet anslutningar i anslutningspoolen. Standard är 100. Minutpoolstorlek: Det minsta antalet anslutningar i anslutningspoolen. Standardvärdet är 0.
Pooling: 是否启用连接池。ADO.NET默认是启用连接池的,因此,你需要手动设置Pooling=false来禁用连接池。 Låt oss ta ett exempel för att förstå egenskaperna hos kopplingspoolen. Koden är följande:
4. Undantag och hanteringsmetoder för anslutningspoolen När en användare öppnar en anslutning utan att stänga den korrekt eller i tid, utlöser det ofta problemet med "anslutningsläckan". Den läckta anslutningen förblir öppen tills Dispose-metoden anropas, och Garbage Collector (GC) stänger och släpper anslutningen. Till skillnad från ADO behöver ADO.NET stänga använda anslutningar manuellt. En viktig myt är att kopplingen är sluten när det sammanlänkade objektet ligger utanför det lokala området. Faktum är att när den är utanför räckvidd släpps endast anslutningsobjektet, inte anslutningsresursen. Låt oss först titta på ett exempel.
För att göra resultaten tydligare satte jag särskilt det maximala antalet anslutningar till 5 och timeout-tiden är 1 sekund. Efter att ha kört får man snabbt följande resultat.
Av ovanstående resultat framgår det tydligt att det finns en avvikelse i kopplingen. Vi vet redan att det maximala antalet anslutningar i anslutningspoolen är 5, och när den sjätte anslutningen skapas måste man vänta på anslutningen tills den går ut eftersom det maximala antalet anslutningar i anslutningspoolen har nått det maximala antalet och det inte finns några lediga anslutningar. När timeout-tiden passerar kommer anslutningsundantaget som nämnts ovan att visas. Därför måste jag återigen betona att använda anslutningar bör stängas ordentligt och släppas så snart som möjligt.
5. Metoder för att övervaka statusen för SQL Server-anslutningar (1) Genom aktivitetsmonitorn Steg 1: Öppna MSSMS Manager och klicka på ikonen "Activity Monitor".
Steg 2: Klicka på fliken Processer, klicka på fliken Processer.
Steg 3: Kör exemplet i #4 Connection Pool Exceptions and Handling Methods, du kan se de 5 öppna anslutningarna som visas i figuren nedan.
(2) Använd T-SQL-satser På samma sätt, genom att köra systemlagrad procedur sp_who kan vi också övervaka anslutningens tillstånd.
6. Grundläggande principer för effektiv användning av anslutningspooler Att använda anslutningspoolen väl kommer att förbättra prestandan i din applikation avsevärt. Tvärtom, om det används felaktigt gör det ingen skada. Generellt bör följande principer följas:
Begär en anslutning så snart som möjligt, släpp anslutningen så snart som möjligt. När du stänger anslutningen, stäng först den relevanta användardefinierade transaktionen. Säkerställ och underhåll minst en öppen anslutning i anslutningspoolen. Försök undvika poolskräp. Detta inkluderar främst poolfragmentering genererad av integrerad säkerhet och poolfragmentering som genereras genom användning av många databaser. Tips: Poolfragmentering är ett vanligt problem i många webbapplikationer, och applikationer kan skapa ett stort antal pooler som inte släpps förrän processen avslutas. På detta sätt öppnas ett stort antal anslutningar, vilket tar upp mycket minne och resulterar i minskad prestanda.
|
Föregående:.net/c# genererar slumpmässiga siffror, anpassade bokstavs- och sifferräkningarNästa:Hur ställer jag in HttpOnly för cookies? Vad används HttpOnly till?
|