Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 20385|Atsakyti: 0

[Šaltinis] ADO.NET pamoka (5) Išsamiai paaiškinkite duomenų bazės ryšio telkinį

[Kopijuoti nuorodą]
Paskelbta 2016-09-17 15:41:28 | | | |
Anotacija
Šiandien kalbėsiu apie duomenų bazių ryšio telkinius. Tiesą sakant, sakiau, kad ančių kriaušė yra labai didelė. Nes ryšių telkiniai yra gana sunkiai suprantami, palyginti su kitais skyriais. Noriu jums tai paaiškinti populiariausiais sakiniais, tačiau tai nėra lengva užduotis. Tačiau ryšių telkiniai taip pat yra labai svarbus žinių taškas, ypač diegiant kelių vartotojų programas. Todėl turiu ne tik kalbėti, bet ir kalbėti nuodugniai. Šiame straipsnyje suprasite ryšių telkimo pagrindus ir kaip jis jau naudojamas siekiant pagerinti jūsų programos našumą.

Turinys
Kas yra ryšių telkinys?
Kaip veikia ryšių telkinys
Pakalbėkime apie keletą labai svarbių jungiamųjų baseinų savybių
Ryšių telkinio išimtys ir tvarkymo metodai
Būdas stebėti ryšio būseną
Pagrindiniai efektyvaus ryšių telkinių naudojimo principai
1. Kas yra ryšių telkinys?
      Ankstesniame straipsnyje "ADO.NET turite žinoti (4) paragaukite ryšio objektų" pabrėžiau, kad duomenų bazės ryšio užmezgimas yra labai daug laiko reikalaujantis (daug laiko) ir daug darbo reikalaujantis (išteklius reikalaujantis) dalykas. Taip yra todėl, kad prisijungimas prie duomenų bazės serverio apima kelis ilgus procesus: fizinio kanalo (pvz., lizdo ar įvardyto vamzdyno) sukūrimą, pradinį rankos paspaudimą su serveriu, ryšio eilutės informacijos analizę, serverio autentifikavimą ryšį, patikrinimą, kad būtų galima užsiregistruoti dabartinėje operacijoje ir pan. Nepriklausomai nuo to, kodėl yra toks mechanizmas, visada yra egzistavimo priežastis. Kadangi sukurti naują ryšį yra taip skausminga, kodėl gi nepanaudojus esamo?

      Tiesą sakant, ADO.NET jau pateikia optimizavimo metodą, vadinamą ryšio telkimu. Ryšių telkinys yra vienas iš tokių konteinerių: jame yra tam tikras fizinių ryšių su duomenų bazės serveriu skaičius. Todėl, kai mums reikia prisijungti prie duomenų bazės serverio, mums tereikia išimti nemokamą ryšį iš telkinio (konteinerio), o ne sukurti naują. Tai labai sumažina prisijungimo prie duomenų bazės išlaidas, o tai pagerina programos našumą.

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



2. Kaip veikia ryšių telkinys
2.1 Sukurkite ryšių telkinį
      Reikėtų pažymėti, kad ryšių telkiniai yra jautrūs klasei. Tai reiškia, kad tame pačiame programos domene vienu metu gali būti keli skirtingų tipų ryšių telkiniai. Taigi, kaip nustatomi ryšių telkiniai? Išsamiai jis išsiskiria parašu, kuris sudaro procesą, programos domenu, ryšio eilute ir "Windows" tapatybe (naudojant integruotą saugą). Tačiau tam pačiam programos domenui jis paprastai identifikuojamas tik pagal ryšio eilutę. Atidarius ryšį, sukuriamas naujas ryšių telkinys, jei juostos ryšio tipas nesutampa su esamo ryšio telkinio tipu. Priešingu atveju naujas ryšių telkinys nesukuriamas.

      Tipiškas ryšio kūrimo pavyzdys:


Aukščiau pateiktu atveju, aš sukūriau tris SqlConnection objektus, bet tik du ryšių telkiniai buvo reikalingi jiems valdyti. Atsargūs draugai, galbūt jau pastebėjote, kad conn1 ir conn3 turi tą pačią ryšio eilutę, todėl jie gali dalytis ryšio telkiniu, o conn2 ir conn1 skiriasi nuo conn3, todėl turite sukurti naują ryšio telkinį.

2.2 Tuščiosios eigos jungčių paskirstymas
      Kai vartotojas sukuria ryšio užklausą arba iškviečia ryšio objekto atidarymą, ryšių telkinio tvarkytuvas pirmiausia turi rasti atitinkamo tipo ryšio telkinį, pagrįstą ryšio užklausos parašo tipu, ir tada pabandyti priskirti laisvą ryšį. Išsami informacija yra tokia:

Jei telkinyje yra ryšys, grąžinkite ryšį.
Jei visi telkinio ryšiai išnaudoti, sukurkite naują ryšį, kurį norite įtraukti į telkinį.
Jei pasiekiamas maksimalus telkinio ryšių skaičius, užklausa patenka į laukimo eilę, kol bus laisvų ryšių.
2.3 Pašalinkite netinkamus ryšius
      Neleistini ryšiai, t. y. ryšiai, kurie netinkamai prisijungia prie duomenų bazės serverio. Ryšių telkinių duomenų bazės serveryje saugomų ryšių skaičius yra ribotas. Todėl, jei laiku nebus pašalinti netinkami ryšiai, bus švaistoma vieta ryšių telkinyje. Tiesą sakant, jums nereikia jaudintis, ryšio telkinio valdytojas labai gerai pasirūpino šiomis problemomis. Jei ryšys ilgą laiką neveikia arba aptinka, kad ryšys su serveriu atjungtas, ryšių telkinio tvarkytuvas pašalina ryšį iš telkinio.

2.4 Perdirbkite panaudotas jungtis
      Baigę naudoti ryšį, turėtume jį laiku uždaryti arba atleisti, kad ryšį būtų galima grąžinti į baseiną pakartotiniam naudojimui. Ryšį galime uždaryti naudodami ryšio objekto uždarymo arba šalinimo metodą arba naudodami C# sakinį.



3. Papasakokite apie keletą labai svarbių savybių
Ryšių telkinio veikimą galima valdyti ryšio eilutėmis ir daugiausia apima keturias svarbias savybes:

Ryšio skirtasis laikas: laikas, per kurį ryšio užklausa laukia skirtojo laiko. Numatytasis yra 15 sekundžių sekundėmis.
Maksimalus telkinio dydis: maksimalus ryšių telkinio skaičius. Numatytoji reikšmė yra 100.
Minimalus telkinio dydis: minimalus ryšių telkinio ryšių skaičius. Numatytoji reikšmė yra 0.
Pooling: 是否启用连接池。ADO.NET默认是启用连接池的,因此,你需要手动设置Pooling=false来禁用连接池。
Paimkime pavyzdį, kad suprastume ryšio telkinio savybes. Kodas yra toks:

4. Ryšių telkinio išimtys ir tvarkymo metodai
      Kai vartotojas atidaro ryšį jo tinkamai ar laiku neuždaręs, dažnai kyla "ryšio nuotėkio" problema. Nutekėjusi jungtis lieka atvira, kol iškviečiamas šalinimo metodas, o šiukšlių surinkėjas (GC) užsidaro ir atlaisvina jungtį. Skirtingai nuo ADO, ADO.NET reikia rankiniu būdu uždaryti naudotus ryšius. Svarbus mitas yra tas, kad ryšys nutraukiamas, kai prijungtas objektas yra už vietinės taikymo srities ribų. Tiesą sakant, kai nepatenka į aprėptį, išleidžiamas tik ryšio objektas, o ne ryšio išteklius. Na, pirmiausia pažvelkime į pavyzdį.

Kad rezultatai būtų akivaizdesni, specialiai nustatiau maksimalų jungčių skaičių iki 5, o skirtasis laikas yra 1 sekundė. Po bėgimo greitai gaunami šie rezultatai.


Iš aukščiau pateiktų rezultatų aišku, kad ryšys yra sutrikęs. Mes jau žinome, kad maksimalus ryšių telkinio jungčių skaičius yra 5, o sukūrus 6-ąjį ryšį, reikia palaukti ryšio, kol baigsis skirtasis laikas, nes maksimalus ryšių telkinio jungčių skaičius pasiekė maksimalų skaičių ir nėra laisvų ryšių. Pasibaigus skirtajam laikui, pasirodys aukščiau minėta ryšio išimtis. Todėl turiu dar kartą pabrėžti, kad naudotos jungtys turėtų būti tinkamai uždarytos ir kuo greičiau atlaisvintos.



5. SQL serverio ryšių būsenos stebėjimo metodai
(1) Per veiklos monitorių
Žingsnis 1: Atidarykite MSSMS tvarkyklę ir spustelėkite piktogramą "Veiklos monitorius".



Žingsnis 2: Rodinyje Atidaryti veiklos monitorių spustelėkite skirtuką Procesai.



Žingsnis 3: Paleiskite pavyzdį #4 Ryšio telkinio išimtys ir tvarkymo metodai, galite pamatyti 5 atvirus ryšius, kaip parodyta paveikslėlyje žemiau.



(2) Naudokite T-SQL teiginius
Taip pat, vykdydami sistemos saugomą procedūrą, sp_who taip pat galime stebėti ryšio būseną.






6. Pagrindiniai efektyvaus ryšių telkinių naudojimo principai
      Tinkamai išnaudojus ryšių telkinį, labai pagerės jūsų programos našumas. Priešingai, neteisingai naudojant, jis nepakenks. Apskritai reikėtų laikytis šių principų:

Paprašykite prisijungimo vėliausiai, atleiskite ryšį anksčiausiai.
Kai uždarote ryšį, pirmiausia uždarykite atitinkamą vartotojo apibrėžtą operaciją.
Užtikrinkite ir palaikykite bent vieną atvirą ryšį ryšių telkinyje.
Stenkitės vengti baseino šiukšlių. Tai daugiausia apima telkinio fragmentaciją, kurią sukuria integruotas saugumas, ir telkinio fragmentaciją, sukurtą naudojant daug duomenų bazių.
Patarimas: telkinio fragmentacija yra dažna daugelio žiniatinklio programų problema, todėl programos gali sukurti daug telkinių, kurie nebus išleisti, kol procesas nebus baigtas. Tokiu būdu bus atidaryta daugybė jungčių, užimančių daug atminties, todėl sumažės našumas.





Ankstesnis:.net/c# generuoja atsitiktinius skaičius, pasirinktinius raidžių ir skaičių skaičius
Kitą:Kaip nustatyti "HttpOnly" slapukams? Kam naudojamas tik "Http"?
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com