Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 20385|Răspunde: 0

[Sursă] ADO.NET Tutorial (5) Explică în detaliu pool-ul de conexiuni la baza de date

[Copiază linkul]
Postat pe 17.09.2016 15:41:28 | | | |
Rezumat
Astăzi voi vorbi despre pool-urile de conexiuni la baze de date. Sincer, am spus că pera de rață este foarte mare. Pentru că pool-urile de conexiuni sunt relativ greu de înțeles comparativ cu alte capitole. Vreau să ți-o explic în cele mai populare propoziții, dar nu este o sarcină ușoară. Totuși, pool-urile de conexiuni sunt și ele un punct de cunoaștere foarte important, mai ales atunci când se implementează programe multi-utilizator. Prin urmare, nu doar că trebuie să vorbesc, ci și să vorbesc pe larg. Prin acest articol, vei înțelege elementele fundamentale ale pooling-ului de conexiuni și modul în care acesta este deja valorificat pentru a îmbunătăți performanța aplicației tale.

Cuprins
Ce este un pool de conexiuni?
Cum funcționează pool-ul de conexiuni
Să vorbim despre câteva proprietăți foarte importante ale pool-urilor de conexiuni
Excepții pentru pool-ul de conexiuni și metode de gestionare
O modalitate de a monitoriza starea conexiunii tale
Principii de bază pentru utilizarea eficientă a piscinelor de conexiuni
1. Ce este un pool de conexiuni?
      În articolul anterior, "ADO.NET trebuie să știi (4) obiecte de conexiune gustătoare", am subliniat că stabilirea unei conexiuni la o bază de date este un lucru foarte consumator de timp (consumator de timp) și laborios (consumator de resurse). Acest lucru se datorează faptului că conectarea la un server de baze de date implică mai multe procese îndelungate: stabilirea unui canal fizic (cum ar fi un socket sau o conductă denumită), realizarea unei strângeri de mână inițiale cu serverul, analizarea informațiilor despre șirurile de conexiune, autentificarea conexiunii de către server, efectuarea unei verificări pentru înregistrarea în tranzacția curentă și așa mai departe. Indiferent de motivul pentru care există un astfel de mecanism, există întotdeauna un motiv pentru existență. Deoarece crearea unei noi conexiuni este atât de dureroasă, de ce să nu refolosești una existentă?

      De fapt, ADO.NET ne oferă deja o metodă de optimizare numită pooling de conexiuni. Un pool de conexiuni este unul dintre aceste containere: găzduiește un anumit număr de conexiuni fizice către serverul de baze de date. Prin urmare, când trebuie să ne conectăm la serverul de baze de date, trebuie doar să eliminăm o conexiune liberă din pool (container) în loc să creăm una nouă. Acest lucru reduce semnificativ costul suplimentar al conectării la baza de date, îmbunătățind performanța aplicației.

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



2. Cum funcționează pool-ul de conexiuni
2.1 Crearea unui pool de conexiuni
      Trebuie menționat că pool-urile de conexiuni sunt sensibile la clase. Adică, același domeniu de aplicație poate avea mai multe tipuri diferite de pool-uri de conexiuni în același timp. Deci, cum sunt identificate pool-urile de conexiuni? În detaliu, se distinge prin semnătura care formează procesul, domeniul aplicației, șirul de conexiune și identitatea Windows (atunci când se folosește securitate integrată). Totuși, pentru același domeniu de aplicație, este în general identificat doar prin șirul de conexiune. Când o conexiune este deschisă, se creează un nou pool de conexiuni dacă semnătura de tip a conexiunii strip nu corespunde tipului pool-ului existent. altfel, nu se creează niciun nou pool de conexiuni.

      Un exemplu tipic de creare a unei conexiuni:


În cazul de mai sus, am creat trei obiecte SqlConnection, dar au fost necesare doar două pool-uri de conexiuni pentru a le gestiona. Aveți grijă, prieteni, s-ar putea să fi descoperit deja că conn1 și conn3 au același șir de conexiuni, deci pot partaja un pool de conexiuni, în timp ce conn2 și conn1 sunt diferite de conn3, deci trebuie să creezi un nou pool de conexiuni.

2.2 Alocarea conexiunilor inactive
      Când un utilizator creează o cerere de conexiune sau apelează Open of a Connection Object, managerul pool-ului de conexiuni trebuie mai întâi să găsească un pool de conexiune de tipul potrivit bazat pe semnătura tipului cererii de conexiune, apoi să încerce să aloce o conexiune liberă. Detaliile sunt următoarele:

Dacă există o conexiune disponibilă în pool, returnează conexiunea.
Dacă toate conexiunile din piscină sunt epuizate, creează o nouă conexiune pentru a o adăuga în piscină.
Dacă s-a atins numărul maxim de conexiuni din pool, cererea intră în coada de așteptare până când există conexiuni libere disponibile.
2.3 Eliminarea conexiunilor invalide
      Conexiuni invalide, adică conexiuni care nu se conectează corect la serverul de baze de date. Pentru pool-urile de conexiuni, numărul de conexiuni stocate la serverul de baze de date este limitat. Prin urmare, dacă conexiunile invalide nu sunt eliminate în timp, spațiul din pool-ul de conexiuni va fi irosit. De fapt, nu trebuie să-ți faci griji, managerul pool-ului de conexiuni s-a ocupat foarte bine de aceste probleme pentru noi. Dacă o conexiune este inactivă pentru o perioadă îndelungată de timp sau dacă detectează că conexiunea către server este deconectată, managerul pool-ului de conexiuni elimină conexiunea din pool.

2.4 Reciclarea conexiunilor folosite
      Când terminăm de folosit o conexiune, ar trebui să o închidem sau să o eliberăm la timp, astfel încât conexiunea să poată fi returnată în piscină pentru reutilizare. Putem închide conexiunea prin metoda Close sau Dispose a obiectului Connection sau prin instrucțiunea using din C#.



3. Povestește-mi despre câteva calități foarte importante
Comportamentul pool-ului de conexiuni poate fi controlat de șiruri de conexiune și include în principal patru proprietăți importante:

Timeout de conexiune: Timpul în care cererea de conexiune trebuie să aștepte un timeout. Implicit este 15 secunde în secunde.
Dimensiunea maximă a pool-ului: Numărul maxim de conexiuni în pool-ul de conexiuni. Valoarea implicită este 100.
Dimensiunea minimă a pool-ului: Numărul minim de conexiuni în pool-ul. Implicit este 0.
Pooling: 是否启用连接池。ADO.NET默认是启用连接池的,因此,你需要手动设置Pooling=false来禁用连接池。
Să luăm un exemplu pentru a înțelege proprietățile pool-ului de conexiuni. Codul este următorul:

4. Excepții pentru pool-ul de conexiuni și metode de gestionare
      Când un utilizator deschide o conexiune fără să o închidă corect sau la timp, adesea declanșează problema "scurgerii de conexiune". Conexiunea scursă rămâne deschisă până când metoda Dispose este apelată, iar colectorul de gunoi (GC) închide și eliberează conexiunea. Spre deosebire de ADO, ADO.NET trebuie să închizi manual conexiunile folosite. Un mit important este că conexiunea este închisă atunci când obiectul conectat este în afara domeniului local. De fapt, când este în afara domeniului de aplicare, doar obiectul de conexiune este eliberat, nu și resursa de conexiune. Ei bine, să vedem mai întâi un exemplu.

Pentru a face rezultatele mai evidente, am setat special numărul maxim de conexiuni la 5, iar timpul de timeout este de 1 secundă. După alergare, următoarele rezultate sunt obținute rapid.


Din rezultatele de mai sus, este clar că există o anomalie în această conexiune. Știm deja că numărul maxim de conexiuni din pool-ul de conexiuni este 5, iar când a șasea conexiune este creată, este necesar să așteptăm până când expiră timpul, deoarece numărul maxim de conexiuni din pool-ul a atins numărul maxim și nu mai există conexiuni libere. Când timpul de timeout este depășit, va apărea excepția de conexiune menționată mai sus. Prin urmare, trebuie să subliniez încă o dată că conexiunile folosite trebuie închise și eliberate corespunzător cât mai curând posibil.



5. Metode pentru monitorizarea stadiului conexiunilor SQL Server
(1) Prin monitorul de activitate
Pasul 1: Deschide Managerul MSSMS și apasă pe pictograma "Monitor de activitate".



Pasul 2: În vizualizarea Open Activity Monitor, faceți clic pe fila Procese.



Pasul 3: Rulați exemplul din #4 Excepții și metode de manipulare a pool-ului de conexiuni, puteți vedea cele 5 conexiuni deschise, așa cum este arătat în figura de mai jos.



(2) Utilizarea instrucțiunilor T-SQL
De asemenea, prin executarea procedurii stocate de sistem sp_who putem monitoriza și starea conexiunii.






6. Principii de bază pentru utilizarea eficientă a piscinelor de conexiuni
      Folosirea bună a pool-ului de conexiuni va îmbunătăți semnificativ performanța aplicației tale. Dimpotrivă, dacă este folosită greșit, nu va face niciun rău. În general, următoarele principii trebuie urmate:

Solicitați o conexiune în cel mai scurt moment, eliberați conexiunea cât mai curând posibil.
Când închizi conexiunea, închide mai întâi tranzacția relevantă definită de utilizator.
Asigurați-vă și mențineți cel puțin o conexiune deschisă în pool-ul de conexiuni.
Încearcă să eviți resturile din piscină. Aceasta include în principal fragmentarea pool-ului generată de securitatea integrată și fragmentarea pool-ului generată prin utilizarea mai multor baze de date.
Sfat: Fragmentarea pool-ului este o problemă comună în multe aplicații web, iar aplicațiile pot crea un număr mare de pool-uri care nu sunt lansate până la încheierea procesului. Astfel, un număr mare de conexiuni vor fi deschise, ocupând multă memorie și rezultând performanțe reduse.





Precedent:.net/c# generează numere aleatorii, numărătoare personalizate de litere și numere
Următor:Cum setez HttpOnly pentru cookie-uri? La ce folosește Httponly?
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com