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

Turinys:

Anonim

„MS SQL Server“ yra kliento-serverio architektūra. „MS SQL Server“ procesas prasideda kliento programai siunčiant užklausą. SQL serveris priima, apdoroja ir į užklausą atsako pateikdamas apdorotus duomenis. Aptarkime išsamiai visą toliau pateiktą architektūrą:

Toliau pateiktoje diagramoje pavaizduoti trys pagrindiniai „SQL Server Architecture“ komponentai:

  1. Protokolo sluoksnis
  2. Reliacinis variklis
  3. Sandėliavimo variklis
SQL serverio architektūros schema

Aptarkime išsamiai apie visus tris pagrindinius modulius. Šioje pamokoje sužinosite.

  • Protokolo sluoksnis - SNI
    • Bendra atmintis
    • TCP / IP
    • Pavadinti vamzdžiai
    • Kas yra TDS?
  • Reliacinis variklis
    • CMD analizatorius
    • „Optimizer“
    • Užklausos vykdytojas
  • Sandėliavimo variklis
    • Failų tipai
    • Prieigos metodas
    • Buferio valdytojas
    • Planuokite talpyklą
    • Duomenų analizavimas: buferio talpykla ir duomenų saugykla
    • Operacijų vadybininkas

Protokolo sluoksnis - SNI

„MS SQL Server“ PROTOKOLŲ Sluoksnis palaiko 3 tipo kliento serverio architektūrą. Pradėsime nuo „ trijų tipų kliento serverio architektūros“, kurią 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 loginėje vietoje, ty savo namuose. Tomas sugebėjo paprašyti kavos, o mama - karštai.

MS SQL SERVER - Čia MS SQL serveris pateikia BENDRŲ ATMINTINIŲ PROTOKOLĄ . Čia KLIENTAS ir MS SQL serveris veikia vienoje mašinoje. Abu jie gali bendrauti naudodamiesi „Shared Memory“ protokolu.

Analogija: leidžia susieti subjektus pagal minėtus du scenarijus. Mes galime lengvai susieti Tomą su klientu, mamą - su SQL serveriu, „Namai į mašiną“ ir „Žodinį bendravimą“ su bendrosios atminties protokolu.

Iš konfigūracijos ir diegimo stalo:

Ryšiui su vietiniu DB - „SQL Management Studio“ gali būti parinktis „Serverio vardas“

"."

„vietinis šeimininkas“

"127.0.0.1"

"Mašina \ egzempliorius"

TCP / IP

Dabar pagalvok vakare, Tomas nusiteikęs vakarėliui. Jis nori kavos, užsisakytos iš gerai ž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ę bendrauti per TCP / IP protokolą, kur KLIENTAS ir MS SQL Server yra nutolę vienas nuo kito ir įdiegti atskiroje mašinoje.

Analogija: leidžia susieti subjektus pagal minėtus du scenarijus. Mes galime lengvai susieti Tomą su klientu, „Starbuck“ su SQL serveriu, „Pagrindinis“ / „Marketplace“ - su nuotoline vieta ir galiausiai „Cellular network“ - prie TCP / IP protokolo.

Pastabos iš konfigūracijos / diegimo stalo:

  • „SQL Management Studio“ - norint prisijungti per TCP \ IP, parinktis „Server Name“ turi būti „Machine \ server“.
  • SQL serveris naudoja 1433 prievadą TCP / IP.

Pavadinti vamzdžiai

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

Čia Tomas ir jo kaimynas Sierra yra toje pačioje fizinėje vietoje, būdami vienas kito kaimynai. Jie bendrauja per vidinį tinklą. Panašiai „ MS SQL SERVER“ suteikia galimybę bendrauti per „ Named Pipe“ protokolą. Čia KLIENTAS ir MS SQL Server yra prisijungę per LAN .

Analogija: leidžia susieti subjektus pagal minėtus du scenarijus. Mes galime lengvai susieti Tomą su klientu, „Sierra“ su SQL serveriu, „Kaimyną“ prie LAN ir galiausiai „Intra“ tinklą prie pavadinto vamzdžio protokolo.

Pastabos iš konfigūracijos / diegimo stalo:

  • Ryšiui per pavadintą vamzdį. Ši parinktis pagal numatytuosius nustatymus yra išjungta ir ją turi įgalinti „SQL Configuration Manager“.

Kas yra TDS?

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

  • TDS reiškia lentelių duomenų srautą.
  • Visuose 3 protokoluose naudojami TDS paketai. TDS yra sujungta į tinklo paketus. Tai įgalina duomenų perdavimą iš kliento mašinos į serverio mašiną.
  • TDS pirmą kartą sukūrė „Sybase“, o dabar jis priklauso „Microsoft“

Reliacinis variklis

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

Kaip pavaizduota Architektūrinėje diagramoje, yra 3 pagrindiniai „Reliacinio variklio“ komponentai . Išsamiai išnagrinėkime komponentus:

CMD analizatorius

Iš Protokolo sluoksnio gauti duomenys perduodami „Relational Engine“. „CMD analizatorius“ yra pirmasis „Relational Engine“ komponentas, gaunantis užklausos duomenis. Pagrindinis CMD analizatoriaus darbas yra patikrinti, ar nėra sintaktinių ir semantinių klaidų. Galiausiai jis sukuria užklausų medį . Aptarkime išsamiai.

Sintaktinis patikrinimas:

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

Pavyzdys: Tarkime, rusas nuėjo į japonų restoraną. Jis užsisako greitą maistą rusų kalba. Deja, padavėjas supranta tik japonų kalbą. 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 jo apdoroti ir todėl pateiks klaidos pranešimą.

Apie MS SQL užklausą daugiau sužinosime būsimose pamokose. Vis dėlto apsvarstykite žemiau pagrindinės užklausos sintaksės kaip

SELECT * from ;

Dabar, norėdami suvokti, kas yra sintaksė, tarkime, jei vartotojas vykdo pagrindinę užklausą taip:

SELECR * from 

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

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

Semantinis patikrinimas:

  • Tai atlieka „ Normalizer“ .
  • Paprasčiausia forma patikrina, ar schemoje yra stulpelio pavadinimas ir užklausiamas lentelės pavadinimas. Ir jei jis egzistuoja, susiekite jį su Query. Tai taip pat žinoma kaip įrišimas .
  • Sudėtingumas padidėja, kai vartotojo užklausose yra VIEW. Normalizatorius pakeičia viduje saugomą rodinio apibrėžimą ir daug daugiau.

Supraskime tai naudodamiesi žemiau pateiktu pavyzdžiu -

SELECT * from USER_ID

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

Sukurti užklausų medį:

  • Šis žingsnis sukuria skirtingą vykdymo medį, kuriame galima vykdyti užklausą.
  • Atkreipkite dėmesį, kad visi skirtingi medžiai turi tą patį norimą rezultatą.

„Optimizer“

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

Atminkite, kad ne visos užklausos yra optimizuotos. Optimizavimas atliekamas tokioms DML (duomenų modifikavimo kalba) komandoms 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 optimizuojamos, tačiau jos yra sukompiliuojamos į vidinę formą. Užklausos kaina apskaičiuojama pagal tokius veiksnius kaip procesoriaus naudojimas, atminties naudojimas ir įvesties / išvesties poreikiai.

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

Prieš pereidami prie išsamesnės „Optimizer“ detalės, apsvarstykite toliau pateiktą realaus gyvenimo pavyzdį:

Pavyzdys:

Tarkime, norite atidaryti internetinę banko sąskaitą. Jūs jau žinote apie vieną banką, kuriam atidaryti sąskaitą reikia ne daugiau kaip 2 dienas. Bet jūs taip pat turite 20 kitų bankų sąrašą, kuriam gali prireikti mažiau nei 2 dienos. Galite pradėti bendradarbiauti su šiais bankais, kad nustatytumėte, kuriems bankams reikia mažiau nei 2 dienų. Dabar galite nerasti banko, kuris užtruks mažiau nei 2 dienas, o dėl pačios paieškos veiklos prarandamas papildomas laikas. Geriau būtų buvę atidaryti sąskaitą pačiame pirmajame banke.

Išvada: svarbiau pasirinkti protingai. Tiksliau sakant, pasirinkite geriausią variantą, o ne pigiausią.

Panašiai „MS SQL Optimizer“ veikia su integruotais baigiamaisiais / euristiniais algoritmais. Tikslas yra sumažinti užklausos vykdymo laiką. Visi „Optimizer“ algoritmai yra „Microsoft“ tinkamumas ir paslaptis. Nors , žemiau yra aukšto lygio žingsniai MS SQL optimizavimo atlikti. Optimizavimo paieškos atliekamos trimis etapais, kaip parodyta toliau pateiktoje diagramoje:

0 etapas: bandomojo plano paieška:

  • Tai dar vadinama Išankstinio optimizavimo etapu .
  • Kai kuriais atvejais gali būti tik vienas praktiškas, praktiškas planas, žinomas kaip nereikšmingas planas. Optimizuoto plano kurti nereikia. Priežastis ta, kad ieškant daugiau, būtų rastas tas pats vykdymo laiko vykdymo planas. Tai taip pat su papildomomis optimizuoto plano paieškos sąnaudomis, kurios visai nereikalingos.
  • Jei nerandama „Trivial“ plano, prasideda pirmasis etapas.

1 etapas: Sandorių apdorojimo planų paieška

  • Tai apima paprasto ir kompleksinio plano paiešką .
  • Paprasta plano paieška: ankstesni stulpelių ir užklausos rodiklio duomenys bus naudojami statistinei analizei. Paprastai tai sudaro vienas indeksas lentelėje.
  • 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š minėtų strategijų neveikia, „Optimizer“ ieško lygiagretaus 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 įmanomas užklausos vykdymo galimybes. Galutinio optimizavimo etapo algoritmai yra „Microsoft Propriety“.

Užklausos vykdytojas

Užklausa vykdančiųjų skambučių prieigos metodą. Jame pateikiamas vykdymui reikalingos duomenų gavimo logikos vykdymo planas. Gavus duomenis iš „Storage Engine“, rezultatas bus paskelbtas protokolo sluoksnyje. Galiausiai duomenys siunčiami galutiniam vartotojui.

Sandėliavimo variklis

„Storage Engine“ darbas yra saugoti duomenis tokioje saugojimo sistemoje kaip „Disk“ ar „SAN“ ir prireikus juos gauti. Prieš gilindamiesi į „Storage“ variklį, pažiūrėkime, kaip duomenys saugomi duomenų bazėje ir kokių failų tipai yra prieinami.

Duomenų byla ir apimtis:

Duomenų failas fiziškai saugo duomenis duomenų puslapių pavidalu, o kiekvienas duomenų puslapis yra 8 KB dydžio ir sudaro mažiausią saugojimo vienetą „SQL Server“. Šie duomenų puslapiai yra logiškai sugrupuoti, kad būtų suformuoti jų dydžiai. „SQL Server“ jokiam objektui nepriskirtas puslapis.

Objekto priežiūra atliekama per apimtį. Puslapyje yra skyrius, pavadintas Puslapio antraštė, kurio dydis yra 96 ​​baitai, kuriame pateikiama metaduomenų informacija apie puslapį, pvz., Puslapio tipas, Puslapio numeris, Naudojamos vietos dydis, Laisvos vietos dydis ir Žymeklis į kitą ir ankstesnį puslapį ir kt.

Failų tipai

  1. Pagrindinis 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 išplėtimo.
  1. Antrinis failas
  • Duomenų bazėje gali būti keli antriniai failai, jų gali nebūti.
  • Tai neprivaloma ir joje yra konkretaus vartotojo duomenys.
  • Pratęsimas yra. ndf paprastai, bet gali būti bet kokio plėtinio.
  1. Žurnalo failas
  • Taip pat žinomas kaip „Write forward logs“.
  • Pratęsimas yra. ldf
  • Naudojamas operacijų valdymui.
  • Tai naudojama norint atkurti nepageidaujamus atvejus. Atlikite svarbią neįvykdytų operacijų grąžinimo užduotį.

„Storage Engine“ turi 3 komponentus; panagrinėkime juos išsamiai.

Prieigos metodas

Tai veikia kaip sąsaja tarp užklausos vykdytojo ir buferio tvarkytuvo / operacijų žurnalų.

Pats „Access“ metodas nevykdomas.

Pirmasis veiksmas yra nustatyti, ar užklausa yra:

  1. Pasirinkite pareiškimą (DDL)
  2. Nepasirinkti pareiškimo (DDL ir DML)

Atsižvelgiant į rezultatą, prieigos metodas atlieka šiuos veiksmus:

  1. Jei užklausa yra DDL , SELECT sakinys, užklausa perduodama buferio tvarkytuvei tolesniam apdorojimui.
  2. Ir jei užklausa yra DDL, NON-SELECT sakinys , užklausa perduodama „Transaction Manager“. Tai daugiausia apima UPDATE pareiškimą.

Buferio valdytojas

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

  • Planuokite talpyklą
  • Duomenų analizavimas: buferio talpykla ir duomenų saugykla
  • Nešvarus puslapis

Šiame skyriuje sužinosime plano, buferio ir duomenų talpyklą. Nešvarius puslapius aptarsime skyriuje „Operacija“.

Planuokite talpyklą

  • Esamas užklausų 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 yra esama plano talpykla?

    Jei pirmą kartą vykdomas užklausos vykdymo planas ir jis yra sudėtingas, tikslinga jį laikyti lėktuvo talpykloje. Tai užtikrins greitesnį prieinamumą, kai kitą kartą SQL serveris gaus tą pačią užklausą. Taigi, tai ne kas kita, o pati užklausa, kuri plano vykdymo operacija yra saugoma, jei ji vykdoma pirmą kartą.

Duomenų analizavimas: buferio talpykla ir duomenų saugykla

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

Buferio talpykla - minkštas analizavimas:

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

Duomenų saugojimas - sudėtingas analizavimas:

Jei „Buferio tvarkyklėje“ nėra duomenų, reikalingi duomenys ieškomi duomenų saugykloje. „If“ taip pat saugo duomenis duomenų talpykloje, kad būtų galima naudoti ateityje.

Nešvarus puslapis

Jis saugomas kaip „Transaction Manager“ apdorojimo logika. Išsamiai sužinosime skyriuje „Operacijų tvarkyklė“.

Operacijų vadybininkas

Operacijų tvarkyklė iškviečiama, kai prieigos metodas nustato, kad užklausa yra sakinys „Nepasirinkti“.

Žurnalų tvarkytuvė

  • „Log Manager“ stebi visus sistemoje atliktus atnaujinimus naudodamas žurnalus „Operacijų žurnaluose“.
  • Žurnalai turi žurnalų sekos numerį su operacijos ID ir duomenų modifikavimo įrašu .
  • Tai naudojama norint įvykdyti įvykdytą operaciją ir grąžinti ją atgal .

Užrakto tvarkyklė

  • Operacijos metu susieti duomenys duomenų saugykloje yra užrakto būsenoje. Šį procesą tvarko „Lock Manager“.
  • Šis procesas užtikrina duomenų nuoseklumą ir izoliavimą . Taip pat žinomas kaip rūgšties savybės.

Vykdymo procesas

  • „Log Manager“ pradeda registruoti, o „Lock Manager“ užrakina susijusius duomenis.
  • Duomenų kopija saugoma buferio talpykloje.
  • Duomenų, kuriuos reikia atnaujinti, kopija išlaikoma žurnalo buferyje, o visi įvykiai atnaujina duomenis duomenų buferyje.
  • Puslapiai, kuriuose saugomi duomenys, taip pat žinomi kaip purvini puslapiai .
  • „Checkpoint“ ir „Write-Ahead Logging“: šis procesas vykdomas ir pažymimas visas puslapis nuo „Dirty Pages“ iki „Disk“, tačiau puslapis lieka talpykloje. Dažnis yra apytiksliai 1 paleidimas per minutę. Bet puslapis iš buferio žurnalo pirmiausia perkeltas į žurnalo failo puslapį Duomenys. Tai vadinama „ Write Ahead Logging“.
  • Tingi rašytojas: „Dirty“ puslapis gali likti atmintyje. Kai SQL serveris pastebi didžiulę apkrovą ir buferinė atmintis reikalinga naujai operacijai, ji atlaisvina „Dirty Pages“ iš talpyklos. Jis veikia LRU - mažiausiai neseniai naudojamas algoritmas, valantis puslapį iš buferio telkinio į diską.

Santrauka:

  • Yra trijų tipų kliento serverio architektūra: 1) bendra atmintis 2) TCP / IP 3) pavadinti vamzdžiai
  • „Sybase“ sukurtas TDS, kuris dabar priklauso „Microsoft“, yra paketas, kuris yra sujungtas į tinklo paketus, kad būtų galima perduoti duomenis iš kliento mašinos į serverio mašiną.
  • „Relational Engine“ sudaro trys pagrindiniai komponentai:

    CMD analizatorius: tai yra atsakinga už sintaksines ir semantines klaidas ir galiausiai sukuria užklausų medį.

    „Optimizer“: „ Optimizer“ vaidmuo yra rasti pigiausią, o ne geriausią, ekonomiškai efektyvų vykdymo planą.

    Užklausos vykdytojas: Užklausa vykdytojas iškviečia prieigos metodą ir pateikia vykdymo planą, reikalingą duomenų gavimo logikai, reikalingai vykdyti.

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

    Prieigos būdas: Šis komponentas nustato, ar užklausa yra „Pasirinkti“, ar „Nepasirinkti“. Atitinkamai iškviečia buferį ir perdavimo tvarkytuvę.

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

    „Transaction Manager“: jis tvarko „Nepasirinktą operaciją“, naudodamas „Log and Lock Manager“. Taip pat palengvina svarbų „Write Ahead“ žurnalų ir „Tinginių“ rašytojų įgyvendinimą.