Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 20385|Svare: 0

[Kilde] ADO.NET Veiledning (5) Forklar databasetilkoblingspoolen i detalj

[Kopier lenke]
Publisert på 17.09.2016 15:41:28 | | | |
Sammendrag
I dag skal jeg snakke om databasetilkoblingspooler. For å være ærlig sa jeg at andepæren er veldig stor. Fordi tilkoblingspooler er relativt vanskelige å forstå sammenlignet med andre kapitler. Jeg vil forklare det for deg i de mest populære setningene, men det er ikke en enkel oppgave. Tilkoblingspooler er imidlertid også et svært viktig kunnskapspunkt, spesielt når man distribuerer flerbrukerprogrammer. Derfor må jeg ikke bare snakke, men også snakke grundig. Gjennom denne artikkelen vil du forstå det grunnleggende om tilkoblingspooling og hvordan dette allerede brukes for å forbedre ytelsen til applikasjonen din.

Innholdsforlovelse
Hva er en tilkoblingspool?
Hvordan tilkoblingspoolen fungerer
La oss snakke om noen svært viktige egenskaper ved tilkoblingspooler
Unntak og håndteringsmetoder for tilkoblingspoolen
En måte å overvåke statusen på tilkoblingen din
Grunnleggende prinsipper for effektiv bruk av tilkoblingspooler
1. Hva er en tilkoblingspool?
      I forrige artikkel, "ADO.NET You Must Know (4) Taste Connection Objects", har jeg understreket at etablering av en databasetilkobling er en svært tidkrevende (tidkrevende) og arbeidskrevende (ressurskrevende) prosess. Dette skyldes at tilkobling til en databaseserver innebærer flere langvarige prosesser: etablering av en fysisk kanal (som en socket eller navngitt pipeline), å gjøre et innledende håndtrykk med serveren, analysere informasjon om tilkoblingsstrengen, la serveren autentisere forbindelsen, kjøre en sjekk for å registrere seg i den nåværende transaksjonen, og så videre. Uansett hvorfor det finnes en slik mekanisme, finnes det alltid en grunn til eksistens. Siden det er så smertefullt å lage en ny forbindelse, hvorfor ikke gjenbruke en eksisterende?

      Faktisk gir ADO.NET oss allerede en optimaliseringsmetode kalt connection pooling. En tilkoblingspool er en slik beholder: den huser et visst antall fysiske tilkoblinger til databaseserveren. Derfor, når vi trenger å koble til databaseserveren, trenger vi bare å fjerne en ledig tilkobling fra poolen (containeren) i stedet for å opprette en ny. Dette reduserer overheaden ved tilkobling til databasen betydelig, noe som forbedrer applikasjonens ytelse.

PS:本来做了2张图片来描述连接池的,无奈公司装有监控软件,不能上传,所以只能等下次有时间上传了。



2. Hvordan tilkoblingspoolen fungerer
2.1 Opprett en tilkoblingspool
      Det bør bemerkes at tilkoblingspooler er klassesensitive. Det vil si at samme applikasjonsdomene kan ha flere forskjellige typer tilkoblingspooler samtidig. Så, hvordan identifiseres tilkoblingspooler? I detalj skilles den ut ved signaturen som utgjør prosessen, applikasjonsdomenet, tilkoblingsstrengen og Windows-identiteten (ved bruk av integrert sikkerhet). For samme applikasjonsdomene identifiseres den imidlertid vanligvis kun av forbindelsesstrengen. Når en tilkobling åpnes, opprettes en ny tilkoblingspool hvis typesignaturen til stripeforbindelsen ikke samsvarer med typen til den eksisterende tilkoblingspoolen. ellers opprettes ingen ny tilkoblingspool.

      Et typisk eksempel på å skape en forbindelse:


I tilfellet ovenfor opprettet jeg tre SqlConnection-objekter, men bare to tilkoblingspooler var nødvendige for å administrere dem. Forsiktige venner, dere har kanskje allerede funnet ut at conn1 og conn3 har samme tilkoblingsstreng, så de kan dele en tilkoblingspool, mens conn2 og conn1 er forskjellige fra conn3, så du må opprette en ny tilkoblingspool.

2.2 Allokering av ledige forbindelser
      Når en bruker oppretter en tilkoblingsforespørsel eller kaller Open of a Connection-objektet, må tilkoblingspoolforvalteren først finne en tilkoblingspool av matchende type basert på typesignaturen til tilkoblingsforespørselen, og deretter prøve å tildele en ledig tilkobling. Detaljene er som følger:

Hvis det er en tilgjengelig tilkobling i poolen, returner forbindelsen.
Hvis alle tilkoblinger i bassenget er oppbrukt, lag en ny tilkobling for å legge til i bassenget.
Hvis det maksimale antallet tilkoblinger i poolen er nådd, går forespørselen inn i ventekøen til det er ledige tilkoblinger tilgjengelige.
2.3 Fjern ugyldige tilkoblinger
      Ugyldige tilkoblinger, det vil si tilkoblinger som ikke kobler korrekt til databaseserveren. For tilkoblingspooler er antallet tilkoblinger lagret til databaseserveren begrenset. Derfor, hvis ugyldige tilkoblinger ikke fjernes i tide, vil plass i tilkoblingspoolen gå til spille. Faktisk trenger du ikke å bekymre deg, forbindelsespoolansvarlig har tatt seg av disse problemene for oss veldig godt. Hvis en tilkobling er inaktiv over lengre tid, eller hvis den oppdager at tilkoblingen til serveren er koblet fra, fjerner tilkoblingspoolbehandleren forbindelsen fra poolen.

2.4 Resirkulerer brukte tilkoblinger
      Når vi er ferdige med å bruke en tilkobling, bør vi lukke eller frigjøre den i tide slik at forbindelsen kan returneres til bassenget for gjenbruk. Vi kan lukke forbindelsen gjennom Close or Dispose-metoden til Connection-objektet, eller gjennom using statement i C#.



3. Fortell meg om noen svært viktige egenskaper
Oppførselen til tilkoblingspoolen kan styres av tilkoblingsstrenger og inkluderer hovedsakelig fire viktige egenskaper:

Tilkoblingstimeout: Tiden for tilkoblingsforespørselen til å vente på timeout. Standard er 15 sekunder i sekunder.
Maksimal poolstørrelse: Maksimalt antall tilkoblinger i tilkoblingspoolen. Standard er 100.
Minusstørrelse på poolen: Minimum antall tilkoblinger i tilkoblingspoolen. Standard er 0.
Pooling: 是否启用连接池。ADO.NET默认是启用连接池的,因此,你需要手动设置Pooling=false来禁用连接池。
La oss ta et eksempel for å forstå egenskapene til tilkoblingspoolen. Koden er som følger:

4. Unntak og håndteringsmetoder for tilkoblingspoolen
      Når en bruker åpner en tilkobling uten å lukke den korrekt eller i tide, utløser det ofte problemet med "tilkoblingslekkasje". Den lekkede tilkoblingen forblir åpen til Dispose-metoden kalles, og Garbage Collector (GC) lukker og frigjør forbindelsen. I motsetning til ADO må ADO.NET manuelt lukke brukte tilkoblinger. En viktig myte er at forbindelsen er lukket når det sammenkoblede objektet er utenfor det lokale omfanget. Faktisk, når det er utenfor omfang, frigjøres kun tilkoblingsobjektet, ikke tilkoblingsressursen. Vel, la oss se på et eksempel først.

For å gjøre resultatene mer tydelige, satte jeg spesielt maks antall tilkoblinger til 5, og timeout-tiden er 1 sekund. Etter løp oppnås følgende resultater raskt.


Ut fra resultatene ovenfor er det tydelig at det er en unormalitet i sammenhengen. Vi vet allerede at det maksimale antallet tilkoblinger i tilkoblingspoolen er 5, og når den 6. tilkoblingen opprettes, er det nødvendig å vente på tilkoblingen til den går ut fordi det maksimale antallet forbindelser i tilkoblingspoolen har nådd maksimumsantallet og det ikke finnes noen ledige tilkoblinger. Når timeout-tiden overskrides, vil tilkoblingsunntaket nevnt ovenfor vises. Derfor må jeg nok en gang understreke at brukte tilkoblinger bør lukkes og frigjøres på riktig måte så snart som mulig.



5. Metoder for å overvåke statusen til SQL Server-tilkoblinger
(1) Gjennom aktivitetsmonitoren
Trinn 1: Åpne MSSMS Manager og klikk på ikonet "Aktivitetsmonitor".



Trinn 2: Klikk på fanen Prosesser i åpen aktivitetsovervåker.



Trinn 3: Kjør eksempelet i #4 Connection Pool Exceptions and Handling Methods, du kan se de 5 åpne tilkoblingene som vist i figuren nedenfor.



(2) Bruk T-SQL-setninger
På samme måte, ved å utføre systemlagret prosedyre sp_who kan vi også overvåke tilstanden til forbindelsen.






6. Grunnleggende prinsipper for effektiv bruk av tilkoblingspooler
      God bruk av tilkoblingspoolen vil forbedre ytelsen til applikasjonen din betydelig. Tvert imot, hvis det brukes feil, vil det ikke skade. Generelt bør følgende prinsipper følges:

Be om en forbindelse så snart som mulig, og slipp forbindelsen så snart som mulig.
Når du lukker tilkoblingen, lukk først den relevante brukerdefinerte transaksjonen.
Sørg for og oppretthold minst én åpen tilkobling i tilkoblingspoolen.
Prøv å unngå bassengavfall. Dette inkluderer hovedsakelig poolfragmentering generert av integrert sikkerhet og poolfragmentering generert ved bruk av mange databaser.
Tips: Pool-fragmentering er et vanlig problem i mange webapplikasjoner, og applikasjoner kan lage et stort antall pooler som ikke frigjøres før prosessen avsluttes. På denne måten åpnes et stort antall tilkoblinger, noe som tar opp mye minne og resulterer i redusert ytelse.





Foregående:.net/c# genererer tilfeldige tall, tilpassede bokstav- og talltall
Neste:Hvordan setter jeg HttpOnly for informasjonskapsler? Hva brukes HttpOnly til?
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com