Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 20385|Atbildi: 0

[Avots] ADO.NET apmācība (5) Detalizēti izskaidrojiet datu bāzes savienojumu baseinu

[Kopēt saiti]
Publicēts 17.09.2016 15:41:28 | | | |
Anotācija
Šodien es runāšu par datu bāzes savienojumu baseiniem. Godīgi sakot, es teicu, ka pīles bumbieris ir ļoti liels. Jo savienojumu baseini ir salīdzinoši grūti saprotami, salīdzinot ar citām nodaļām. Es gribu jums to izskaidrot populārākajos teikumos, bet tas nav viegls uzdevums. Tomēr savienojumu baseini ir arī ļoti svarīgs zināšanu punkts, it īpaši, izvietojot vairāku lietotāju programmas. Tāpēc man ir ne tikai jārunā, bet arī jārunā pamatīgi. Šajā rakstā jūs sapratīsiet savienojumu apvienošanas pamatus un to, kā tas jau tiek izmantots, lai uzlabotu jūsu lietojumprogrammas veiktspēju.

Satura rādītājs
Kas ir savienojumu pūls?
Kā darbojas savienojumu pūls
Runāsim par dažām ļoti svarīgām savienojumu baseinu īpašībām
Savienojumu pūla izņēmumi un apstrādes metodes
Veids, kā pārraudzīt savienojuma statusu
Savienojumu baseinu efektīvas izmantošanas pamatprincipi
1. Kas ir savienojumu baseins?
      Iepriekšējā rakstā "ADO.NET jums jāzina (4) garšas savienojuma objekti" esmu uzsvēris, ka datu bāzes savienojuma izveide ir ļoti laikietilpīga (laikietilpīga) un darbietilpīga (resursu patērējoša) lieta. Tas ir tāpēc, ka savienojuma izveide ar datu bāzes serveri ietver vairākus ilgstošus procesus: fiziska kanāla izveide (piemēram, ligzda vai nosaukts cauruļvads), sākotnējā rokasspiediena veikšana ar serveri, savienojuma virknes informācijas analīze, servera autentifikācija savienojumam, pārbaudes veikšana, lai reģistrētos pašreizējā transakcijā utt. Neatkarīgi no tā, kāpēc ir šāds mehānisms, vienmēr ir pastāvēšanas iemesls. Tā kā jauna savienojuma izveide ir tik sāpīga, kāpēc gan neizmantot esošo?

      Patiesībā ADO.NET jau dod mums optimizācijas metodi, ko sauc par savienojumu apvienošanu. Savienojumu pūls ir viens no šādiem konteineriem: tajā ir noteikts skaits fizisku savienojumu ar datu bāzes serveri. Tāpēc, kad mums ir nepieciešams izveidot savienojumu ar datu bāzes serveri, mums ir nepieciešams tikai izņemt bezmaksas savienojumu no baseina (konteinera), nevis izveidot jaunu. Tas ievērojami samazina savienojuma izveides ar datu bāzi pieskaitāmās izmaksas, kas uzlabo lietojumprogrammas veiktspēju.

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



2. Kā darbojas savienojumu baseins
2.1 Izveidojiet savienojumu baseinu
      Jāatzīmē, ka savienojumu baseini ir jutīgi pret klasi. Tas nozīmē, ka vienam un tam pašam lietojumprogrammas domēnam vienlaikus var būt vairāki dažādi savienojumu pūli. Tātad, kā tiek identificēti savienojumu baseini? Detalizēti to atšķir paraksts, kas veido procesu, lietojumprogrammas domēnu, savienojuma virkni un Windows identitāti (izmantojot integrēto drošību). Tomēr tam pašam lietojumprogrammas domēnam to parasti identificē tikai pēc savienojuma virknes. Atverot savienojumu, tiek izveidots jauns savienojumu pūls, ja joslas savienojuma tipa paraksts neatbilst esošā savienojuma pūla tipam. Pretējā gadījumā jauns savienojumu pūls netiek izveidots.

      Tipisks savienojuma izveides piemērs:


Iepriekš minētajā gadījumā es izveidoju trīs SqlConnection objektus, bet to pārvaldīšanai bija nepieciešami tikai divi savienojumu baseini. Uzmanīgi draugi, iespējams, jūs jau esat atklājuši, ka conn1 un conn3 ir viena un tā pati savienojuma virkne, tāpēc tie var koplietot savienojuma pūlu, savukārt conn2 un conn1 atšķiras no conn3, tāpēc jums ir jāizveido jauns savienojuma pūls.

2.2 Dīkstāves savienojumu piešķiršana
      Kad lietotājs izveido savienojuma pieprasījumu vai izsauc savienojuma objekta atvēršanu, savienojuma pūla pārvaldniekam vispirms jāatrod atbilstoša tipa savienojuma pūls, pamatojoties uz savienojuma pieprasījuma paraksta tipu, un pēc tam jāmēģina piešķirt brīvu savienojumu. Sīkāka informācija ir šāda:

Ja baseinā ir pieejams savienojums, atgrieziet savienojumu.
Ja visi baseina savienojumi ir izsmelti, izveidojiet jaunu savienojumu, ko pievienot pūlam.
Ja ir sasniegts maksimālais savienojumu skaits pūlā, pieprasījums nonāk gaidīšanas rindā, līdz ir pieejami brīvi savienojumi.
2.3 Noņemiet nederīgus savienojumus
      Nederīgi savienojumi, tas ir, savienojumi, kas nepareizi izveido savienojumu ar datu bāzes serveri. Savienojumu pūliem datu bāzes serverī saglabāto savienojumu skaits ir ierobežots. Tāpēc, ja nederīgie savienojumi netiek savlaicīgi noņemti, vieta savienojumu baseinā tiks izšķērdēta. Patiesībā jums nav jāuztraucas, savienojumu baseina pārvaldnieks ir ļoti labi parūpējies par šīm problēmām. Ja savienojums ilgstoši ir dīkstāvē vai konstatē, ka savienojums ar serveri ir atvienots, savienojumu pūla pārvaldnieks noņem savienojumu no pūla.

2.4 Pārstrādāt izmantotos savienojumus
      Kad mēs esam pabeiguši izmantot savienojumu, mums tas jāaizver vai jāatlaiž savlaicīgi, lai savienojumu varētu atgriezt baseinā atkārtotai izmantošanai. Mēs varam slēgt savienojumu, izmantojot savienojuma objekta Close or Dispose metodi vai izmantojot C# paziņojumu.



3. Pastāstiet man par dažiem ļoti svarīgiem atribūtiem
Savienojuma baseina darbību var kontrolēt ar savienojuma virknēm, un tas galvenokārt ietver četras svarīgas īpašības:

Savienojuma taimauts: laiks, kad savienojuma pieprasījums gaida taimautu. Noklusējums ir 15 sekundes sekundēs.
Maksimālais pūla lielums: maksimālais savienojumu skaits savienojumu pūlā. Noklusējums ir 100.
Minimālais baseina lielums: minimālais savienojumu skaits savienojumu pūlā. Noklusējums ir 0.
Pooling: 是否启用连接池。ADO.NET默认是启用连接池的,因此,你需要手动设置Pooling=false来禁用连接池。
Ņemsim piemēru, lai saprastu savienojuma baseina īpašības. Kods ir šāds:

4. Savienojumu pūla izņēmumi un apstrādes metodes
      Kad lietotājs atver savienojumu, to neaizverot pareizi vai savlaicīgi, tas bieži izraisa "savienojuma noplūdes" problēmu. Noplūdušais savienojums paliek atvērts, līdz tiek izsaukta iznīcināšanas metode, un atkritumu savācējs (GC) aizveras un atbrīvo savienojumu. Atšķirībā no ADO, ADO.NET ir manuāli jāaizver izmantotie savienojumi. Svarīgs mīts ir tas, ka savienojums tiek slēgts, ja savienotais objekts atrodas ārpus vietējās darbības jomas. Faktiski, ja tas ir ārpus tvēruma, tiek atbrīvots tikai savienojuma objekts, nevis savienojuma resurss. Nu, vispirms apskatīsim piemēru.

Lai padarītu rezultātus acīmredzamākus, es speciāli iestatīju maksimālo savienojumu skaitu uz 5, un taimauta laiks ir 1 sekunde. Pēc skriešanas ātri tiek iegūti šādi rezultāti.


No iepriekš minētajiem rezultātiem ir skaidrs, ka savienojumā ir novirze. Mēs jau zinām, ka maksimālais savienojumu skaits savienojumu baseinā ir 5, un, kad tiek izveidots 6. savienojums, ir jāgaida savienojums, līdz tas beidzas, jo maksimālais savienojumu skaits savienojumu baseinā ir sasniedzis maksimālo skaitu un nav brīvu savienojumu. Kad taimauta laiks ir pārsniegts, parādīsies iepriekš minētais savienojuma izņēmums. Tāpēc man vēlreiz jāuzsver, ka izmantotie savienojumi ir pareizi jāaizver un jāatbrīvo pēc iespējas ātrāk.



5. SQL Server savienojumu statusa uzraudzības metodes
(1) Izmantojot aktivitāšu pārrauga
Step 1: Atveriet MSSMS pārvaldnieku un noklikšķiniet uz ikonas "Activity Monitor".



Step 2: Atvērt Activity Monitor skatā noklikšķiniet uz cilnes Procesi.



Step 3: Palaidiet piemēru #4 Savienojuma baseina izņēmumi un apstrādes metodes, jūs varat redzēt 5 atvērtos savienojumus, kā parādīts zemāk redzamajā attēlā.



(2) Izmantojiet T-SQL paziņojumus
Tāpat, izpildot sistēmas saglabāto procedūru sp_who mēs varam arī uzraudzīt savienojuma stāvokli.






6. Pieslēgumu baseinu efektīvas izmantošanas pamatprincipi
      Pareiza savienojumu pūla izmantošana ievērojami uzlabos jūsu lietojumprogrammas veiktspēju. Gluži pretēji, ja to lieto nepareizi, tas nekaitēs. Kopumā jāievēro šādi principi:

Pieprasiet savienojumu vēlākajā brīdī, atlaidiet savienojumu agrāk.
Slēdzot savienojumu, vispirms aizveriet attiecīgo lietotāja definēto transakciju.
Nodrošiniet un uzturiet vismaz vienu atvērtu savienojumu savienojumu pūlā.
Mēģiniet izvairīties no baseina gružiem. Tas galvenokārt ietver baseina sadrumstalotību, ko rada integrēta drošība, un baseina sadrumstalotību, kas rodas, izmantojot daudzas datu bāzes.
Padoms: Pūla sadrumstalotība ir izplatīta problēma daudzās tīmekļa lietojumprogrammās, un lietojumprogrammas var izveidot lielu skaitu pūlu, kas netiek izlaisti, kamēr process nav pabeigts. Tādā veidā tiks atvērts liels skaits savienojumu, kas aizņem daudz atmiņas, kā rezultātā samazinās veiktspēja.





Iepriekšējo:.net/c# ģenerē nejaušus skaitļus, pielāgotu burtu un ciparu skaitu
Nākamo:Kā iestatīt HttpOnly sīkfailiem? Kādam nolūkam tiek izmantots tikai Http?
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com