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.
|