Paaiškinta SQL serverio architektūra: pavadinti vamzdžiai, optimizatorius, buferio tvarkyklė

„MS SQL Server“ yra kliento-serverio architektūra. „MS SQL Server“ procesas prasideda kliento programai išsiuntus užklausą. SQL serveris priima, apdoroja ir atsako į užklausą pateikdamas apdorotus duomenis. Išsamiai aptarkime visą architektūrą, parodytą žemiau:

Kaip pavaizduota žemiau esančioje diagramoje, yra trys pagrindiniai SQL serverio architektūros komponentai:

  1. Protokolo sluoksnis
  2. Santykių variklis
  3. Sandėliavimo variklis

SQL serverio architektūros diagrama

Išsamiai aptarkime visus tris aukščiau pateiktus pagrindinius modulius. Šioje pamokoje sužinosite.

Protokolo sluoksnis - SNI

MS SQL SERVER PROTOCOL LAYER palaiko 3 tipo kliento serverio architektūrą. Pradėsime nuo ' Trys Tipas apie Kliento serverio architektūra “ kurį palaiko MS SQL Server.

Bendra atmintis

Dar kartą apsvarstykime ankstyvo ryto pokalbio scenarijų.

MAMA ir TOMAS - čia Tomas ir jo mama buvo toje pačioje logiškoje vietoje, ty savo namuose. Tomas galėjo paprašyti kavos, o mama sugebėjo ją patiekti karštą.

MS SQL serveris - Čia MS SQL serveris teikia BENDRAS ATMINTIS PROTOKOLAS . Čia KLIENTAS ir MS SQL serveris veikia toje pačioje mašinoje. Abu gali bendrauti per bendros atminties protokolą.

Analogija: Leidžia susieti esamus objektus pagal du aukščiau aprašytus scenarijus. Mes galime lengvai susieti Tomą su klientu, mamą su SQL serveriu, nuo namų iki mašinos ir žodinį bendravimą su bendros atminties protokolu.

Iš konfigūravimo ir diegimo stalo:

Prisijungimui prie vietinės DB - „SQL Management Studio“ gali būti parinktis „Serverio pavadinimas“

''. '

'vietinis šeimininkas'

„127.0.0.1“

„Mašina egzempliorius“

TCP/IP

Dabar pagalvok vakare, Tomas nusiteikęs vakarėliui. Jis nori kavos, užsakytos iš žinomos kavinės. Kavinė yra už 10 km nuo jo namų.

Čia Tomas ir Starbuckas yra skirtingose ​​fizinėse vietose. Tomas namuose ir „Starbucks“ judrioje turgavietėje. Jie bendrauja per korinį tinklą. Panašiai „MS SQL SERVER“ suteikia galimybę sąveikauti naudojant TCP/IP protokolą, kai CLIENT ir MS SQL Server yra nutolę vienas nuo kito ir įdiegti atskirame kompiuteryje.

Analogija: Leidžia susieti esamus objektus pagal du aukščiau aprašytus scenarijus. Mes galime lengvai susieti Tomą su klientu, „Starbuck“ į SQL serverį, namų/rinkos vietą į nuotolinę vietą ir galiausiai mobilųjį tinklą prie TCP/IP protokolo.

Pastabos iš konfigūracijos/diegimo stalo:

  • „SQL Management Studio“ - jei norite prisijungti per TCP IP, parinktis „Serverio pavadinimas“ turi būti „Server Machine Instance“.
  • SQL serveris naudoja 1433 prievadą TCP/IP.

Pavadinti vamzdžiai

Dabar pagaliau naktį Tomas norėjo išgerti šviesiai žalios arbatos, kurią jos kaimynė Siera labai gerai paruošia.

Čia Tomas ir jo Kaimynas , Siera, yra tos pačios fizinis vietą, būdami vienas kito kaimynai. Jie bendrauja per Vidinis tinklas. Panašiai, MS SQL serveris suteikia galimybę bendrauti per Pavadintas Pipe protokolas. Čia KLIENTAS ir MS SQL serveris yra prisijungę per LAN .

Analogija: Leidžia susieti esamus objektus pagal du aukščiau aprašytus scenarijus. Mes galime lengvai susieti Tomą su klientu, Sierą į SQL serverį, kaimyną į LAN ir galiausiai vidinį tinklą į pavadintą vamzdžių protokolą.

Pastabos iš konfigūracijos/diegimo stalo:

  • Sujungimui per pavadintą vamzdį. Ši parinktis išjungta pagal numatytuosius nustatymus ir ją turi įgalinti SQL konfigūracijos tvarkyklė.

Kas yra TDS?

Dabar, kai žinome, kad yra trijų tipų kliento ir serverio architektūra, galime pažvelgti į TDS:

  • TDS reiškia lentelių duomenų srautą.
  • Visi 3 protokolai naudoja TDS paketus. TDS yra įtraukta į tinklo paketus. Tai leidžia perduoti duomenis iš kliento kompiuterio į serverio mašiną.
  • TDS pirmą kartą sukūrė „Sybase“, o dabar ji priklauso „Microsoft“

Santykių variklis

Santykių variklis taip pat žinomas kaip užklausų procesorius. Jame yra „SQL Server“ komponentai, kurie nustato, ką tiksliai reikia atlikti užklausai ir kaip tai padaryti geriausiai. Ji yra atsakinga už vartotojo užklausų vykdymą, prašydama duomenų iš saugojimo variklio ir apdorodama grąžintus rezultatus.

Kaip parodyta architektūros schemoje, yra 3 pagrindiniai komponentai Santykių variklis. Išsamiai išnagrinėkime komponentus:

CMD analizatorius

Iš protokolo sluoksnio gauti duomenys perduodami „Relational Engine“. „CMD analizatorius“ yra pirmasis „Relational Engine“ komponentas, gavęs užklausos duomenis. Pagrindinis CMD Parser darbas yra patikrinti užklausą Sintaksinė ir semantinė klaida. Galiausiai, tai sukuria užklausų medį . Aptarkime išsamiai.

Sintaksinis patikrinimas:

  • Kaip ir bet kuri kita programavimo kalba, MS SQL taip pat turi iš anksto nustatytą raktinių žodžių rinkinį. Be to, „SQL Server“ turi savo gramatiką, kurią SQL serveris supranta.
  • SELECT, INSERT, UPDATE ir daugelis kitų priklauso MS SQL iš anksto apibrėžtiems raktinių žodžių sąrašams.
  • CMD analizatorius atlieka sintaksės patikrinimą. Jei vartotojų įvestis nesilaiko šių kalbos sintaksės ar gramatikos taisyklių, tai grąžina klaidą.

Pavyzdys: Tarkime, rusas nuėjo į japonų restoraną. Jis užsisako greito maisto rusų kalba. Deja, padavėjas supranta tik japoniškai. Koks būtų akivaizdžiausias rezultatas?

Atsakymas yra - padavėjas negali toliau apdoroti užsakymo.

Gramatikoje ar kalboje, kurią priima SQL serveris, neturėtų būti jokių nukrypimų. Jei tokių yra, SQL serveris negali jų apdoroti, todėl pateiks klaidos pranešimą.

Daugiau apie MS SQL užklausą sužinosime būsimuose vadovėliuose. Tačiau toliau laikykitės pagrindinės užklausos sintaksės kaip

 SELECT * from ; 

Dabar, kad suprastumėte, ką veikia sintaksė, pasakykite, ar vartotojas vykdo pagrindinę užklausą, kaip nurodyta toliau: | _+_ |

Atminkite, kad vietoj „SELECT“ vartotojas įvedė „SELECR“.

Rezultatas: CMD analizatorius išanalizuos šį teiginį ir pateiks klaidos pranešimą. „SELECR“ nesilaiko iš anksto nustatyto raktinio žodžio pavadinimo ir gramatikos. Čia CMD Parseris tikėjosi „SELECT“.

Semantinis patikrinimas:

  • Tai atlieka Normalizatorius .
  • Paprasčiausia forma ji patikrina, ar schemoje yra stulpelio pavadinimas, lentelės pavadinimas, kurio užklausa pateikiama. Ir jei jis egzistuoja, susiekite jį su užklausa. Tai taip pat žinoma kaip Įrišimas .
  • Sudėtingumas padidėja, kai naudotojų užklausose yra VIEW. „Normalizer“ atlieka pakeitimą naudodami viduje išsaugotą rodinio apibrėžimą ir dar daugiau.

Supraskime tai naudodami žemiau pateiktą pavyzdį - | _+_ |

Rezultatas: CMD analizatorius analizuos šį teiginį semantiniam patikrinimui. Analizatorius pateiks klaidos pranešimą, nes normalizatorius neras prašomos lentelės (USER_ID), nes jos nėra.

Sukurti užklausos medį:

  • Šis žingsnis sukuria skirtingą vykdymo medį, kuriame galima vykdyti užklausą.
  • Atminkite, kad visi skirtingi medžiai turi tą pačią norimą išvestį.

Optimizatorius

Optimizatoriaus darbas yra sukurti vartotojo užklausos vykdymo planą. Tai planas, kuris lems, kaip bus vykdoma vartotojo užklausa.

Atminkite, kad ne visos užklausos yra optimizuotos. Optimizuojamos DML (duomenų modifikavimo kalbos) komandos, tokios kaip SELECT, INSERT, DELETE ir UPDATE. Tokios užklausos pirmiausia pažymimos, tada siunčiamos optimizatoriui. DDL komandos, tokios kaip CREATE ir ALTER, nėra optimizuotos, bet yra sukompiliuotos į vidinę formą. Užklausos kaina apskaičiuojama atsižvelgiant į tokius veiksnius kaip procesoriaus naudojimas, atminties naudojimas ir įvesties/ išvesties poreikiai.

Optimizatoriaus vaidmuo yra surasti pigiausias, ne geriausias, ekonomiškai efektyvus vykdymo planas.

Prieš pereidami prie daugiau techninių „Optimizer“ detalių, apsvarstykite toliau pateiktą realaus gyvenimo pavyzdį:

Pavyzdys:

Tarkime, norite atidaryti banko sąskaitą internete. Jūs jau žinote apie vieną banką, kurio sąskaita atidaroma ne ilgiau kaip 2 dienas. Bet jūs taip pat turite 20 kitų bankų sąrašą, kuris gali užtrukti mažiau nei 2 dienas. Galite pradėti bendradarbiauti su šiais bankais, kad nustatytumėte, kurie bankai užtrunka mažiau nei 2 dienas. Dabar galite nerasti banko, kuris užtruks mažiau nei 2 dienas, o dėl pačios paieškos veiklos prarasite papildomo laiko. Geriau būtų buvę atidaryti sąskaitą pačiame pirmame banke.

Išvada: Svarbiau pasirinkti protingai. Tiksliau, pasirinkite kurį variantas geriausias, o ne pigiausias.

Panašiai ir MS „SQL Optimizer“ veikia su integruotais išsamiais/euristiniais algoritmais. Tikslas yra sumažinti užklausos vykdymo laiką. Visi optimizavimo algoritmai yra „Microsoft“ tinkamumas ir paslaptis. Nors , žemiau yra aukšto lygio veiksmai, kuriuos atlieka „MS SQL Optimizer“. Optimizavimo paieškos atliekamos trimis etapais, kaip parodyta žemiau esančioje diagramoje:

0 etapas: Trivialiojo plano paieška:

  • Tai taip pat žinoma kaip Išankstinis optimizavimo etapas .
  • Kai kuriais atvejais gali būti tik vienas praktiškas, įgyvendinamas planas, žinomas kaip nereikšmingas planas. Nereikia kurti optimizuoto plano. Priežastis yra ta, kad ieškant daugiau būtų rastas tas pats vykdymo laiko vykdymo planas. Taip pat ir su papildomomis optimizuoto plano paieškos išlaidomis, kurių visai nereikėjo.
  • Jei trivialus planas nerastas, tada 1stPrasideda etapas.

1 etapas: ieškokite operacijų apdorojimo planų

  • Tai apima paiešką Paprastas ir sudėtingas planas .
  • Paprasta plano paieška: statistikai analizuoti bus naudojami ankstesni užklausoje dalyvaujančių stulpelių ir rodyklių duomenys. Paprastai tai apima vieną indeksą lentelėje, bet neapsiriboja.
  • Vis dėlto, jei paprasto plano nerandama, ieškoma sudėtingesnio plano. Tai apima kelis indeksus vienoje lentelėje.

2 etapas: lygiagretus apdorojimas ir optimizavimas.

  • Jei nė viena iš aukščiau išvardytų strategijų neveikia, „Optimizer“ ieško paralelinio apdorojimo galimybių. Tai priklauso nuo mašinos apdorojimo galimybių ir konfigūracijos.
  • Jei tai vis dar neįmanoma, prasideda paskutinis optimizavimo etapas. Dabar galutinis optimizavimo tikslas yra rasti visas kitas galimas užklausos įvykdymo galimybes. Galutinio optimizavimo etapo algoritmai yra „Microsoft Propriety“.

Užklausų vykdytojas

Užklausų vykdytojas skambina Prieigos metodas. Jame pateikiamas vykdymui reikalingas duomenų gavimo logikos vykdymo planas. Kai duomenys bus gauti iš „Storage Engine“, rezultatas bus paskelbtas protokolo sluoksnyje. Galiausiai duomenys siunčiami galutiniam vartotojui.

Sandėliavimo variklis

„Storage Engine“ darbas yra saugoti duomenis saugojimo sistemoje, pvz., „Disk“ arba „SAN“, ir prireikus nuskaityti duomenis. Prieš gilindamiesi į „Storage“ variklį, pažiūrėkime, kaip saugomi duomenys Duomenų bazė ir galimų failų tipas.

Duomenų failas ir apimtis:

Duomenų failas fiziškai saugo duomenis duomenų puslapių pavidalu, kiekvienas duomenų puslapis yra 8 KB dydžio ir sudaro mažiausią saugojimo vienetą „SQL Server“. Šie duomenų puslapiai yra logiškai sugrupuoti į apimtis. „SQL Server“ nėra priskirtas nė vienam objektui.

Objekto priežiūra atliekama per apimtis. Puslapyje yra 96 ​​baitų dydžio skyrius, pavadintas „Puslapio antraštė“, kuriame pateikiama puslapio metaduomenų informacija, pvz., Puslapio tipas, puslapio numeris, naudojamos vietos dydis, laisvos vietos dydis ir žymeklis į kitą puslapį ir ankstesnį puslapį ir kt.

Failų tipai

  1. Pirminis failas
  • Kiekvienoje duomenų bazėje yra vienas pirminis failas.
  • Čia saugomi visi svarbūs duomenys, susiję su lentelėmis, rodiniais, aktyvikliais ir kt.
  • Pratęsimas yra. mdf paprastai, bet gali būti bet kokio pratęsimo.
  1. Antrinis failas
  • Duomenų bazėje gali būti arba nėra kelių antrinių failų.
  • Tai neprivaloma ir jame yra konkretaus vartotojo duomenų.
  • Pratęsimas yra. ndf paprastai, bet gali būti bet kokio pratęsimo.
  1. Žurnalo failas
  • Taip pat žinomas kaip „Rašyti žurnalus į priekį“.
  • Pratęsimas yra. ldf
  • Naudojamas operacijų valdymui.
  • Tai naudojama norint atsikratyti nepageidaujamų atvejų. Atlikite svarbią negrąžintų operacijų grąžinimo užduotį.

Sandėliavimo variklis turi 3 komponentus; pažvelkime į juos išsamiai.

Prieigos metodas

Jis veikia kaip sąsaja tarp užklausos vykdytojo ir buferio tvarkyklės/operacijų žurnalų.

Pats prieigos metodas neatlieka jokio vykdymo.

Pirmasis veiksmas yra nustatyti, ar užklausa yra:

  1. Pasirinkite pareiškimą (DDL)
  2. Nesirinkimo pareiškimas (DDL ir DML)

Priklausomai nuo rezultato, prieigos metodas atlieka šiuos veiksmus:

  1. Jei užklausa yra DDL , SELECT, užklausa perduodama Buferio valdytojas tolesniam apdorojimui.
  2. Ir jei užklausa, jei DDL, NES-SELECT sakinys , užklausa perduodama operacijų valdytojui. Tai daugiausia apima UPDATE pareiškimą.

Buferio valdytojas

Buferio tvarkyklė tvarko pagrindines toliau nurodytų modulių funkcijas:

  • Talpyklos planas
  • Duomenų analizavimas: buferio talpykla ir duomenų saugojimas
  • Purvinas puslapis

Šiame skyriuje išmoksime plano, buferio ir duomenų talpyklos. Skyriuje „Operacija“ padengsime nešvarius puslapius.

Talpyklos planas

  • Esamas užklausos planas: Buferio tvarkyklė patikrina, ar vykdymo planas yra saugomoje plano talpykloje. Jei taip, tada naudojama užklausos plano talpykla ir su ja susijusi duomenų talpykla.
  • Pirmą kartą talpyklos planas: Iš kur atsiranda esama plano talpykla?

    Jei pirmą kartą vykdomas užklausos vykdymo planas yra sudėtingas, prasminga jį išsaugoti lėktuvo talpykloje. Tai užtikrins greitesnį pasiekiamumą, kai kitą kartą SQL serveris gaus tą pačią užklausą. Taigi, tai yra ne kas kita, o pati užklausa, kurioje plano vykdymas saugomas, jei jis vykdomas pirmą kartą.

Duomenų analizavimas: buferio talpykla ir duomenų saugykla

Buferio tvarkyklė suteikia prieigą prie reikalingų duomenų. Toliau pateikiami du būdai, atsižvelgiant į tai, ar duomenų yra talpykloje, ar ne:

Buferio talpykla - minkštas analizavimas:

Buferio tvarkyklė ieško duomenų buferyje duomenų talpykloje. Jei yra, tada šiuos duomenis naudoja užklausų vykdytojas. Tai pagerina našumą, nes gaunant duomenis iš talpyklos sumažėja įvesties/išvesties operacijų skaičius, palyginti su duomenų paėmimu iš duomenų saugyklos.

Duomenų saugojimas - sunkus analizavimas:

Jei buferio tvarkytuve nėra duomenų, reikia duomenų ieškoma duomenų saugykloje. „If“ taip pat saugo duomenis duomenų talpykloje, kad galėtų juos naudoti ateityje.

Purvinas puslapis

Jis saugomas kaip operacijų tvarkytuvės apdorojimo logika. Išsamiai sužinosime skyriuje „Operacijų tvarkytuvė“.

Sandorių vadovas

Operacijų tvarkyklė iškviečiama, kai prieigos metodas nustato, kad užklausa yra nepasirinkta ataskaita.

Žurnalo tvarkyklė

  • Žurnalo tvarkyklė stebi visus sistemoje atliktus atnaujinimus per operacijų žurnalų žurnalus.
  • Žurnalai turi Įrašo sekos numerį su operacijos ID ir duomenų keitimo įrašu .
  • Tai naudojama sekti Įsipareigota operacija ir operacijos atšaukimas .

Užrakto valdytojas

  • Operacijos metu susiję duomenys duomenų saugykloje yra užrakinti. Šį procesą tvarko „Lock Manager“.
  • Šis procesas užtikrina duomenų nuoseklumą ir izoliaciją . Taip pat žinomas kaip ACID savybės.

Vykdymo procesas

  • Žurnalo tvarkyklė pradeda registruoti, o užrakto tvarkyklė užrakina susijusius duomenis.
  • Duomenų kopija saugoma buferio talpykloje.
  • Duomenų, kuriuos ketinama atnaujinti, kopija saugoma žurnalo buferyje, o visi įvykiai atnaujina duomenis duomenų buferyje.
  • Puslapiai, kuriuose saugomi duomenys, taip pat žinomi kaip Nešvarūs puslapiai .
  • Kontrolinio taško ir rašymo į priekį registravimas: Šis procesas paleidžiamas ir pažymimas visas puslapis nuo nešvarių puslapių iki disko, tačiau puslapis lieka talpykloje. Dažnis yra maždaug 1 paleidimas per minutę. Tačiau puslapis iš buferio žurnalo pirmiausia perkeliamas į žurnalo failo duomenų puslapį. Tai žinoma kaip Rašykite prieš registravimą.
  • Tinginys rašytojas: Nešvarus puslapis gali likti atmintyje. Kai SQL serveris pastebi didžiulę apkrovą ir naujai operacijai reikalinga buferinė atmintis, ji išlaisvina nešvarius puslapius iš talpyklos. Jis veikia LRU - Mažiausiai neseniai naudojamas algoritmas puslapiui valyti iš buferinio telkinio į diską.

Santrauka:

  • Egzistuoja trijų tipų klientų serverių architektūra: 1) bendroji atmintis 2) TCP/IP 3) pavadinti vamzdžiai
  • TDS, sukurtas „Sybase“ ir dabar priklausantis „Microsoft“, yra paketas, įterptas į tinklo paketus, skirtus duomenims perkelti iš kliento kompiuterio į serverio mašiną.
  • Santykių variklį sudaro trys pagrindiniai komponentai:

    CMD analizatorius: Tai yra atsakinga už sintaksinę ir semantinę klaidą ir pagaliau sukuria užklausos medį.

    Optimizatorius: Optimizatoriaus vaidmuo yra rasti pigiausią, o ne geriausią, ekonomiškai efektyvų vykdymo planą.

    Užklausų vykdytojas: Užklausų vykdytojas iškviečia prieigos metodą ir pateikia vykdymui reikalingą duomenų gavimo logikos vykdymo planą.

  • Yra trijų tipų failai: pirminis failas, antrinis failas ir žurnalo failai.
  • Sandėliavimo variklis: turi šiuos svarbius komponentus

    Prieigos metodas: Šis komponentas nustato, ar užklausa yra „Pasirinkimo“ ar „Nepasirinkimo“ pareiškimas. Atitinkamai iškviečia buferį ir perdavimo tvarkyklę.

    Buferio valdytojas: Buferio tvarkyklė valdo pagrindines plano talpyklos, duomenų analizavimo ir nešvaraus puslapio funkcijas.

    Operacijų vadovas: Jis valdo nesirinktas operacijas su žurnalo ir užrakto valdytojų pagalba. Taip pat palengvina svarbų „Write Ahead“ registravimo ir tinginių rašytojų diegimą.