Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 20385|Válasz: 0

[Forrás] ADO.NET Útmutató (5) Részletesen magyarázza el az adatbázis-kapcsolati poolt

[Linket másol]
Közzétéve 2016. 09. 17. 15:41:28 | | | |
Kivonat
Ma az adatbázis-kapcsolati poolokról fogok beszélni. Őszintén szólva, azt mondtam, hogy a kacsakörte nagyon nagy. Mert a kapcsolati poolok viszonylag nehezen érthetők más fejezetekhez képest. A legnépszerűbb mondatokban szeretném elmagyarázni, de nem könnyű feladat. Ugyanakkor a kapcsolati poolok is nagyon fontos tudáspontot jelentenek, különösen többfelhasználós programok telepítésekor. Ezért nemcsak beszélnem kell, hanem alaposan is beszélnem. Ebben a cikkben megérted a kapcsolati pooling alapjait, és azt, hogyan használják ki már az alkalmazásod teljesítményének javítására.

Tartalomjegyzék
Mi az a kapcsolati medencé?
Hogyan működik a kapcsolati pool
Beszéljünk néhány nagyon fontos tulajdonságról a kapcsolati medencék számára
Kapcsolati pool kivételek és kezelési módszerek
Egy módja annak, hogy nyomon kövesd a kapcsolatod állapotát
A kapcsolati poolok hatékony használatának alapelvei
1. Mi az a kapcsolati medencé?
      Az előző cikkben, "ADO.NET Tudnod kell (4) Ízlelési Kapcsolati Objektumokat", hangsúlyoztam, hogy az adatbázis-kapcsolat létrehozása nagyon időigényes (időigényes) és munkaigényes (erőforrás-igényes) dolog. Ennek oka, hogy az adatbázis-szerverhez való csatlakozás több hosszú folyamatot igényel: egy fizikai csatorna létrehozását (például socketet vagy nevet tartalmazó csővezetéket), kezdeti kézfogást a szerverrel, a kapcsolati string információinak elemzését, a szerver hitelesítését kéri, ellenőrzést futtat a jelenlegi tranzakcióban való regisztrációhoz, és így tovább. Függetlenül attól, miért létezik ilyen mechanizmus, mindig van oka a létezésnek. Mivel új kapcsolat létrehozása annyira fájdalmas, miért ne használnánk újra egy meglévő kapcsolatot?

      Valójában ADO.NET már egy optimalizálási módszert, amit kapcsolati poolingnek hívnak. A kapcsolati pool az egyik ilyen konténer: bizonyos számú fizikai kapcsolatot tárol az adatbázis szerveréhez. Ezért, amikor csatlakoznunk kell az adatbázis szerverhez, csak szabad kapcsolatot kell kihúznunk a poolból (konténerből), ahelyett, hogy újat hoznánk létre. Ez jelentősen csökkenti az adatbázishoz való csatlakozás többletterhelését, ami javítja az alkalmazás teljesítményét.

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



2. Hogyan működik a kapcsolati pool
2.1 Létrehoz egy kapcsolati poolt
      Fontos megjegyezni, hogy a kapcsolati poolok osztályérzékenyek. Vagyis ugyanazon alkalmazástartományban egyszerre több különböző típusú kapcsolati pool is található. Hogyan azonosítják a kapcsolati poolokat? Részletesen megkülönbözteti a folyamatot alkotó aláírás, az alkalmazástartomány, a kapcsolati lánc és a Windows identitás (integrált biztonság esetén). Ugyanezen alkalmazástartomány esetén azonban általában csak a kapcsolati lánc alapján azonosítják. Amikor egy kapcsolatot megnyitnak, akkor jön létre egy új kapcsolati pool, ha a szalagos kapcsolat típus-aláírása nem egyezik meg a meglévő kapcsolati pool típusával. egyébként nem jön létre új kapcsolati pool.

      Egy tipikus példa a kapcsolat létrehozására:


A fenti esetben három SqlConnection objektumot hoztam létre, de ezek kezeléséhez csak két kapcsolati pool kellett szükséges. Óvatos barátok, lehet, hogy már tapasztaltátok, hogy a conn1 és conn3 ugyanazt a kapcsolati láncot használjuk, így megoszthatnak egy csatlakozási poolt, míg a conn2 és conn1 eltér a conn3-tól, ezért új kapcsolati poolt kell létrehoznod.

2.2 Alaplati kapcsolatok kiosztása
      Amikor egy felhasználó kapcsolatkérést hoz létre vagy a Kapcsolat objektum megnyitását hívja, a kapcsolat poolkezelőjének először meg kell találnia egy egyező típusú kapcsolati poolot a hivatkozási kérelem típus aláírása alapján, majd megpróbálnia szabad kapcsolatot kijelölni. A részletek a következők:

Ha van elérhető kapcsolat a poolban, visszaadd a kapcsolatot.
Ha az összes csatlakozás kimerül a medencében, hozz létre egy új kapcsolatot, amit hozzáadhatsz a medencéhez.
Ha elérték a pool maximális csatlakozásszámát, a kérés a várakozó sorba kerül, amíg ingyenes kapcsolatok nem lesznek.
2.3 Eltávolítani az érvénytelen kapcsolatokat
      Érvénytelen kapcsolatok, vagyis olyan kapcsolatok, amelyek nem kapcsolódnak helyesen az adatbázis szerverhez. A kapcsolati medencék esetében az adatbázis-szerveren tárolt kapcsolatok száma korlátozott. Ezért, ha az érvénytelen kapcsolatokat nem távolítják el időben, a kapcsolati medencében lévő hely elpazarolódik. Valójában nem kell aggódnia, a kapcsolati medencének menedzsere nagyon jól kezelte ezeket a problémákat. Ha egy kapcsolat hosszabb ideig tétlen, vagy ha észleli, hogy a szerverhez való kapcsolat megszakadt, a kapcsolati pool menedzser eltávolítja a kapcsolatot a poolból.

2.4 Használt kapcsolatok újrahasznosítása
      Amikor befejezzük a kapcsolat használatát, időben be kell zárnunk vagy kiengednünk, hogy a kapcsolatot vissza tudja téríteni a medencébe újrahasználatra. A kapcsolatot a Connection objektum Close or Dispose módszerével, vagy a using utasítással C# nyelven zárhatjuk le.



3. Mesélj néhány nagyon fontos tulajdonságról
A kapcsolati pool viselkedése kapcsolódási láncok által vezérelhető, és főként négy fontos tulajdonságot tartalmaz:

Kapcsolati időkorlát: Az idő, amikor a csatlakozási kérés időkorlátra vár. Az alapértelmezett 15 másodperc másodpercekben.
Maximális pool méret: A csatlakozási pool maximális számú kapcsolata. Az alapértelmezett érték 100.
Minimál medence méret: A csatlakozási pool minimális számú kapcsolata. Az alapértelmezett 0.
Pooling: 是否启用连接池。ADO.NET默认是启用连接池的,因此,你需要手动设置Pooling=false来禁用连接池。
Vegyünk egy példát, hogy megértsük a kapcsolati pool tulajdonságait. A kódex a következő:

4. Kapcsolati pool kivételek és kezelési módszerek
      Ha egy felhasználó anélkül, hogy helyesen vagy időben zárná be a kapcsolatot, az gyakran kiváltja a "kapcsolat szivárgás" problémáját. A kiszivárgott kapcsolat nyitva marad, amíg az Ártalanítási módszert be nem hívják, és a Szemétgyűjtő (GC) bezárja és kiengedi a kapcsolatot. Az ADO-val ellentétben ADO.NET manuálisan kell lezárni a használt kapcsolatokat. Egy fontos mítosz, hogy a kapcsolat akkor zárt, amikor a csatlakoztatott objektum kívül van a helyi távcán. Valójában, ha kívül esik a hatókörből, csak a kapcsolati objektum szabadul fel, nem a kapcsolati erőforrás. Először nézzünk meg egy példát.

Hogy az eredmények egyértelműbbek legyenek, külön beállítottam a maximális kapcsolatok számát 5-re, és az időkorlát 1 másodperc. Futás után gyorsan megkapjuk a következő eredményeket.


A fenti eredményekből egyértelmű, hogy a kapcsolatban rendellenesség van. Már tudjuk, hogy a kapcsolati pool maximális kapcsolatszáma 5, és amikor létrejön a 6. kapcsolat, várni kell a kapcsolatra, amíg időlejár, mert a kapcsolat maximális száma elérte a maximális számot, és nincs szabad kapcsolat. Ha az időkorlát ideje túllép, megjelenik a fent említett kapcsolati kivétel. Ezért ismét hangsúlyoznom kell, hogy a használt kapcsolatokat a lehető leghamarabb megfelelően le kell zárni és szabadon engedni.



5. Az SQL Server kapcsolatok állapotának monitorozásának módszerei
(1) Az aktivitásmérőn keresztül
1. lépés: Nyissa meg az MSSMS Managert, és kattints a "Activity Monitor" ikonra.



2. lépés: Az Open Activity Monitor nézetben kattints a Folyamatok fülre.



3. lépés: Futtatd a példát a #4 Connection Pool Exceptions and Handling Methods részben, ahol látható az alábbi ábrán látható 5 nyitott kapcsolat.



(2) T-SQL utasítások használata
Hasonlóképpen, a rendszer által tárolt eljárás végrehajtásával sp_who a kapcsolat állapotát is nyomon tudjuk figyelni.






6. A csatlakozási medencék hatékony használatának alapelvei
      A kapcsolati pool megfelelő kihasználása jelentősen javítja az alkalmazásod teljesítményét. Épp ellenkezőleg, ha rosszul használják, nem árt. Általánosságban a következő elveket kell követni:

Legkésőbb kérj kapcsolatot, és a kapcsolatot leghamarabb oldd fel.
Amikor lezárod a kapcsolatot, először zárd le a releváns felhasználó által definiált tranzakciót.
Biztosítsd és tartsd fenn legalább egy nyitva lévő kapcsolatot a csatlakozási medencében.
Próbáld elkerülni a medencetörmeletet. Ez főként magában foglalja az integrált biztonság által generált pool fragmentációt és a sok adatbázis használatával generált pool fragmentációt.
Tipp: A pool fragmentáció gyakori probléma sok webalkalmazásban, és az alkalmazások sok halványt hozhatnak létre, amelyeket csak a folyamat kizárása után szabadítanak ki. Így sok kapcsolat nyílik meg, ami sok memóriát foglal el, ami csökkent teljesítményt eredményez.





Előző:A .net/c# véletlenszerű számokat, egyedi betű- és számszámokat generál
Következő:Hogyan állítsam be a HttpOnly kódot sütikhez? Mire használják a HttpOnly-t?
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com