Abstrakt Dnes budem hovoriť o databázových pripojeniach. Úprimne, povedal som, že kačacia hruška je veľmi veľká. Pretože spojovacie pooly sú relatívne ťažké pochopiť v porovnaní s inými kapitolami. Chcem vám to vysvetliť najpopulárnejšími vetami, ale nie je to jednoduchá úloha. Avšak spojovacie pooly sú tiež veľmi dôležitým znalostným bodom, najmä pri nasadzovaní programov pre viacerých používateľov. Preto musím nielen hovoriť, ale aj dôkladne hovoriť. V tomto článku pochopíte základy poolovania pripojení a ako sa už využíva na zlepšenie výkonu vašej aplikácie.
Obsah Čo je to connection pool? Ako funguje connection pool Poďme sa porozprávať o niekoľkých veľmi dôležitých vlastnostiach spojovacích bazénov Výnimky spojovacích poolov a spôsoby spracovania Spôsob, ako sledovať stav vášho pripojenia Základné princípy efektívneho využívania spojovacích poolov 1. Čo je to spojovací pool? V predchádzajúcom článku "ADO.NET You Must Know (4) Taste Connection Objects" som zdôraznil, že nadviazanie databázového pripojenia je veľmi časovo náročná (časovo náročná) a pracovne náročná (náročná na zdroje). Je to preto, že pripojenie k databázovému serveru zahŕňa niekoľko zdĺhavých procesov: vytvorenie fyzického kanála (napríklad socketu alebo pomenovaného pipeline), vytvorenie počiatočného handshake so serverom, analýzu informácií o spojovacom reťazci, autentifikáciu spojenia serverom, vykonanie kontroly registrácie v aktuálnej transakcii a podobne. Bez ohľadu na to, prečo takýto mechanizmus existuje, vždy existuje dôvod existencie. Keďže vytvorenie nového spojenia je také bolestivé, prečo nepoužiť existujúce?
V skutočnosti nám už ADO.NET poskytuje optimalizačnú metódu nazývanú pool spojení. Connection pool je jeden z takýchto kontajnerov: obsahuje určitý počet fyzických pripojení k databázovému serveru. Preto, keď sa potrebujeme pripojiť k databázovému serveru, stačí len odstrániť voľné pripojenie z poolu (kontajnera) namiesto vytvárania nového. To výrazne znižuje režijné náklady spojené s pripojením k databáze, čo zlepšuje výkon aplikácie.
PS:本来做了2张图片来描述连接池的,无奈公司装有监控软件,不能上传,所以只能等下次有时间上传了。
2. Ako funguje connection pool 2.1 Vytvorenie spojovacieho poolu Treba poznamenať, že spojovacie pooly sú citlivé na triedu. To znamená, že tá istá aplikačná doména môže mať viacero rôznych typov spojovacích poolov súčasne. Takže, ako sa identifikujú spojovacie pooly? Detailne sa rozlišuje podľa podpisu, ktorý tvorí proces, aplikačnej domény, spojovacieho reťazca a Windows identity (pri použití integrovanej bezpečnosti). Avšak pre tú istú aplikačnú doménu je zvyčajne identifikovaný iba pomocou spojovacieho reťazca. Keď sa pripojenie otvorí, vytvorí sa nový spojovací pool, ak typový podpis strip spojenia nezodpovedá typu existujúceho spojovacieho poolu. inak sa nevytvorí žiadny nový spojovací pool.
Typický príklad vytvorenia spojenia:
V uvedenom prípade som vytvoril tri objekty SqlConnection, ale na ich správu stačia len dva pooly pripojenia. Opatrne, priatelia, možno ste už zistili, že conn1 a conn3 majú rovnaký spojovací reťazec, takže môžu zdieľať spojovací pool, zatiaľ čo conn2 a conn1 sú odlišné od conn3, takže musíte vytvoriť nový connection pool.
2.2 Prideľovanie nečinných spojení Keď používateľ vytvorí požiadavku na spojenie alebo zavolá objekt Open of a Connection, správca connection poolu najprv musí nájsť pool spojenia zodpovedajúceho typu na základe podpisu typu požiadavky na spojenie a potom sa pokúsiť alokovať voľné spojenie. Podrobnosti sú nasledovné:
Ak je v poole dostupné pripojenie, vráťte spojenie. Ak sú všetky spojenia v bazéne vyčerpané, vytvorte nové pripojenie, ktoré sa pridá do bazéna. Ak je dosiahnutý maximálny počet spojení v poole, požiadavka vstupuje do čakacej fronty, kým nie sú k dispozícii voľné pripojenia. 2.3 Odstránenie neplatných spojení Neplatné pripojenia, teda pripojenia, ktoré sa nepripájajú správne k databázovému serveru. Pre spojovacie pooly je počet spojení uložených na databázovom serveri obmedzený. Preto, ak neplatné spojenia nie sú včas odstránené, priestor v zásobníku spojení sa stratí. V skutočnosti sa nemusíte obávať, správca connection poolu sa o tieto problémy postaral veľmi dobre. Ak je spojenie nečinné dlhší čas, alebo ak zistí, že spojenie so serverom je odpojené, správca spojovacieho fondu toto spojenie z poolu odstráni.
2.4 Recyklačné pripojenia Keď ukončíme používanie pripojenia, mali by sme ho včas zatvoriť alebo uvoľniť, aby sa pripojenie mohlo vrátiť do poolu na opätovné použitie. Spojenie môžeme uzavrieť metódou Close or Dispose objektu Connection alebo príkazom using v C#.
3. Povedzte mi o niekoľkých veľmi dôležitých vlastnostiach Správanie spojovacieho bazéna možno riadiť spojovými reťazcami a zahŕňa najmä štyri dôležité vlastnosti:
Časový limit pripojenia: Čas, počas ktorého žiadosť o spojenie čaká na časový limit. Predvolená hodnota je 15 sekúnd v sekundách. Maximálna veľkosť poolu: Maximálny počet pripojení v poole. Predvolená hodnota je 100. Minimálna veľkosť poolu: Minimálny počet pripojení v poole. Predvolená hodnota je 0.
Pooling: 是否启用连接池。ADO.NET默认是启用连接池的,因此,你需要手动设置Pooling=false来禁用连接池。 Pozrime sa na príklad, aby sme pochopili vlastnosti spojovacieho bazéna. Kód je nasledovný:
4. Výnimky a metódy spracovania spojovacích skupín Keď používateľ otvorí spojenie bez správneho alebo včasného uzavretia, často to vyvolá problém s "únikom spojenia". Uniknuté spojenie zostáva otvorené, kým nie je vyvolaná metóda Dispose a Garbage Collector (GC) pripojenie uzavrie a uvoľní. Na rozdiel od ADO ADO.NET potrebné manuálne uzatvárať použité pripojenia. Dôležitým mýtom je, že spojenie je uzavreté, keď je pripojený objekt mimo lokálneho rozsahu. V skutočnosti, keď je mimo rozsahu, uvoľní sa len objekt spojenia, nie zdroj spojenia. Pozrime sa najprv na príklad.
Aby boli výsledky zreteľnejšie, špeciálne som nastavil maximálny počet pripojení na 5 a časový limit je 1 sekunda. Po behu sa rýchlo získajú nasledujúce výsledky.
Z vyššie uvedených výsledkov je zrejmé, že v spojení existuje určitá abnormalita. Už vieme, že maximálny počet spojení v zásobníku pripojení je 5, a keď sa vytvorí šieste pripojenie, je potrebné počkať, kým vyprší čas, pretože maximálny počet spojení v zásobníku dosiahol maximálny počet a nie sú žiadne voľné spojenia. Keď je čas vypršania prekročený, objaví sa vyššie uvedená výnimka spojenia. Preto musím ešte raz zdôrazniť, že použité pripojenia by mali byť čo najskôr správne uzavreté a uvoľnené.
5. Metódy monitorovania stavu pripojení SQL Server (1) Prostredníctvom monitora aktivity Krok 1: Otvorte MSSMS Manager a kliknite na ikonu "Monitor aktivity".
Krok 2: V zobrazení Open Activity Monitor kliknite na záložku Procesy.
Krok 3: Spustite príklad v #4 Výnimky a metódy spracovania spojení, môžete vidieť 5 otvorených pripojení, ako je znázornené na obrázku nižšie.
(2) Použitie T-SQL príkazov Rovnako, spustením systémovej uloženej procedúry sp_who môžeme tiež monitorovať stav spojenia.
6. Základné princípy efektívneho využívania spojovacích bazénov Dobré využitie connection poolu výrazne zlepší výkon vašej aplikácie. Naopak, ak sa použije nesprávne, neublíži. Vo všeobecnosti by sa mali dodržiavať nasledujúce princípy:
Požiadajte o spojenie najneskôr, uvoľnite ho čo najskôr. Keď ukončíte spojenie, najskôr ukončite príslušnú používateľsky definovanú transakciu. Zabezpečte a udržiavajte aspoň jedno otvorené spojenie v poole pripojenia. Snažte sa vyhnúť odpadom z bazéna. To zahŕňa najmä fragmentáciu poolu generovanú integrovanou bezpečnosťou a fragmentáciu poolu generovanú používaním mnohých databáz. Tip: Fragmentácia poolu je bežný problém v mnohých webových aplikáciách a aplikácie môžu vytvárať veľké množstvo poolov, ktoré nie sú uvoľnené, kým proces neskončí. Týmto spôsobom sa otvorí veľké množstvo spojení, čo zaberá veľa pamäte a vedie k zníženiu výkonu.
|