SQL Server Architecture (selitys)
โก รlykรคs yhteenveto
SQL Server ArchiRakenne noudattaa asiakas-palvelin-mallia, joka on organisoitu kolmeen ydinkerrokseen: protokollakerros verkkoviestintรครคn, relaatiomoottori kyselyiden kรคsittelyyn ja tallennusmoottori tiedonhallintaan ja -hakuun.
MS SQL Server on asiakas-palvelin-arkkitehtuuri. MS SQL Server -prosessi alkaa asiakassovelluksen lรคhettรคmรคllรค pyynnรถllรค. SQL Server hyvรคksyy, kรคsittelee ja vastaa pyyntรถรถn kรคsitellyillรค tiedoilla. Kรคydรครคn lรคpi koko arkkitehtuuri yksityiskohtaisesti alla:
Kuten alla oleva kaavio osoittaa, SQL Serverissรค on kolme pรครคkomponenttia Archirakenne:
- Protokollakerros
- Relaatiomoottori
- Varastointi Moottori
Protokollakerros โ SNI
SQL Serverin protokollakerros, joka tunnetaan myรถs nimellรค Server Network Interface (SNI), tukee kolmenlaisia โโasiakas-palvelin-arkkitehtuureja. Jokainen protokolla palvelee erilaista verkkoskenaariota. Nรคiden protokollien ymmรคrtรคminen on olennaista ennen kuin tutkitaan, miten kyselyitรค kรคsitellรครคn sisรคisesti.
Jaettu muisti
Tarkastellaan aamuvarhaisen keskustelun tilannetta. Tom ja hรคnen รคitinsรค ovat samassa loogisessa paikassa, kotonaan. Tom pyytรครค kahvia ja รคiti tarjoilee sen suoraan. Samoin SQL Server tarjoaa jaetun muistin protokollan, kun asiakas ja palvelin toimivat samalla koneella. Molemmat kommunikoivat jaetun muistin kautta ilman verkon lisรคkuormitusta.
Analogia: Tom yhdistรครค asiakkaan (Client), รคiti (Mom) SQL Serverin, koti (Home) koneen (Machine) ja verbaalinen kommunikaatio jaetun muistin protokollaan.
Kokoonpanohuomautuksia: In SQL Management Studiopaikallisen yhteyden โPalvelimen nimiโ -vaihtoehto voi olla โ.โ, โlocalhostโ, โ127.0.0.1โ tai โKone\Instanssiโ.
TCP / IP
Oletetaan nyt, ettรค Tom haluaa kahvia kaupasta, joka sijaitsee 10 km pรครคssรค. Tom on kotona ja kahvila on vilkkaalla torilla. He kommunikoivat matkapuhelinverkon kautta. Samoin SQL Server tarjoaa TCP / IP-protokolla kun asiakas ja SQL Server ovat eri koneilla, jotka ovat yhteydessรค toisiinsa verkon kautta.
Analogia: Tom yhdistetรครคn asiakkaaseen, kahvila SQL Serveriin, koti ja markkinapaikka etรคsijainteihin ja matkapuhelinverkko TCP/IP-protokollaan.
Kokoonpanohuomautuksia: SQL Management Studiossa TCP/IP-yhteyden โPalvelimen nimiโ -vaihtoehdon on oltava โPalvelimen kone\instanssiโ. SQL Server kรคyttรครค TCP/IP-yhteyksille oletusarvoisesti porttia 1433.
Nimetyt putket
Lopuksi Tom haluaa vihreรครค teetรค naapuriltaan Sierralta. He ovat samassa fyysisessรค paikassa, naapureita, ja kommunikoivat sisรคisen verkon kautta. Samoin SQL Server tarjoaa Named Pipe -protokollan, kun asiakas ja palvelin ovat yhteydessรค toisiinsa lรคhiverkon (LAN) kautta.
Analogia: Tom kartoittaa asiakkaaseen, Sierra kartoittaa SQL Serveriin, naapurit kartoittavat lรคhiverkkoon ja verkon sisรคinen kartoittaa nimetyn putken protokollaan.
Kokoonpanohuomautuksia: Nimetyt putket ovat oletusarvoisesti poissa kรคytรถstรค, ja ne on otettava kรคyttรถรถn SQL Configuration Managerin kautta.
Mikรค on TDS?
Nyt kun kolme asiakas-palvelinarkkitehtuurityyppiรค ovat selvรคt, tรคssรค katsaus TDS:รครคn:
- TDS on lyhenne sanoista Tabular Data Stream.
- Kaikki kolme protokollaa kรคyttรคvรคt TDS-paketteja.
- TDS on kapseloitu verkkopaketteihin, mikรค mahdollistaa tiedonsiirron asiakaskoneelta palvelinkoneelle.
- TDS:n kehitti alun perin Sybase, ja sen omistaa nyt Microsoft.
Seuraavassa taulukossa vertaillaan kolmea SQL Server -yhteysprotokollaa:
| Ominaisuus | Jaettu muisti | TCP / IP | Nimetyt putket |
|---|---|---|---|
| Verkon laajuus | Sama kone | Etรคkรคyttรถ (WAN/Internet) | Vain lรคhiverkko |
| Oletusportti | N / A | 1433 | 445 |
| Suorituskyky | Nopein (ei verkon ylikuormitusta) | Hyvรค (optimoitu WAN-verkkoon) | Hyvรค (optimoitu lรคhiverkolle) |
| Oletusarvoisesti kรคytรถssรค | Kyllรค | Kyllรค | Ei |
| Paras kรคyttรถkotelo | Paikallinen kehitys ja testaus | Tuotannon etรคkรคyttรถ | Luotettavat lรคhiverkkoympรคristรถt |
Koska protokollakerros kรคsittelee verkkoliikennettรค, seuraava vaihe SQL Server -arkkitehtuurissa on itse kyselyn kรคsittely. Tรคssรค kohtaa relaatiomoottori ottaa ohjat kรคsiinsรค.
Relaatiomoottori
Relaatiomoottori tunnetaan myรถs kyselyprosessorina. Se sisรคltรครค SQL Server -komponentit, jotka mรครคrittรคvรคt, mitรค kyselyn on tehtรคvรค ja miten se voidaan suorittaa tehokkaimmin. Se vastaa kรคyttรคjien kyselyiden suorittamisesta pyytรคmรคllรค tietoja tallennusmoottorilta ja kรคsittelemรคllรค palautetut tulokset.
Kuten arkkitehtuurikaaviossa on esitetty, relaatiomoottorissa on kolme pรครคkomponenttia:
CMD jรคsentรคjรค
Protokollakerrokselta vastaanotettu data vรคlitetรครคn relaatiomoottorille. CMD-jรคsennin on ensimmรคinen komponentti, joka vastaanottaa kyselydatan. Sen pรครคtehtรคvรคnรค on tarkistaa kysely syntaktisten ja semanttisten virheiden varalta ja luoda sitten kyselypuu.
Syntaktinen tarkistus: Kuten kaikilla muillakin ohjelmointikielillรค, SQL Serverillรค on ennalta mรครคritetty joukko avainsanoja ja kielioppisรครคntรถjรค. SELECT, INSERT, UPDATE ja monet muut kuuluvat ennalta mรครคritettyyn avainsanaluetteloon. CMD-jรคsennin varmistaa, ettรค syรถte noudattaa nรคitรค sรครคntรถjรค. Jos kรคyttรคjรคn syรถte poikkeaa odotetusta syntaksista, jรคsennin palauttaa virheen.
Esimerkiksi: Kuvitellaan venรคlรคinen, joka kรคvelee japanilaiseen ravintolaan ja tilaa ruokaa venรคjรคksi. Tarjoilija ymmรคrtรครค vain japania eikรค pysty kรคsittelemรครคn tilausta. Vastaavasti, jos kรคyttรคjรค kirjoittaa โSELECRโ โSELECTโ:n sijaan, CMD-jรคsennin palauttaa virheen, koska se ei tunnista avainsanaa.
Semanttinen tarkistus: Normalisoija suorittaa tรคmรคn. Se tarkistaa, ovatko kyselyn kohteena olevat sarakenimet, taulukoiden nimet ja muut objektit todella olemassa kaavassa. Jos ne ovat olemassa, normalisoija sitoo ne kyselyyn. Tรคtรค prosessia kutsutaan myรถs sidonnaksi. Kun kรคyttรคjรคn kyselyt sisรคltรคvรคt VIEW-nรคkymรคn, normalisoija korvaa sen sisรคisesti tallennetulla nรคkymรคmรครคrityksellรค.
Esimerkiksi: Running SELECT * from USER_ID aiheuttaisi jรคsentimen heittรคvรคn virheen semanttisen tarkistuksen aikana, jos taulukkoa USER_ID ei ole tietokannassa.
Luo kyselypuu: Tรคssรค vaiheessa luodaan erilaisia โโsuorituspuita, jotka edustavat kyselyn eri suoritustapoja. Kaikki puut tuottavat saman halutun tulosteen.
Optimizer
Optimoija luo kรคyttรคjรคn kyselylle suoritussuunnitelman. Tรคmรค suunnitelma mรครคrittรครค, miten kysely suoritetaan. Kaikkia kyselyitรค ei ole optimoitu. Optimointi koskee DML (Data Modification Language) -komentoja, kuten SELECT, INSERT, DELETE ja UPDATE. DDL-komentoja, kuten CREATE ja ALTER, ei ole optimoitu, vaan ne kรครคnnetรครคn sisรคiseen lomakkeeseen.
Kyselyn hinta lasketaan tekijรถiden, kuten suorittimen kรคytรถn, muistin kรคytรถn ja syรถte-/tulostustarpeiden, perusteella. Optimoijan tehtรคvรคnรค on lรถytรครค halvin ja kustannustehokkain suoritussuunnitelma, ei vรคlttรคmรคttรค ehdottomasti paras.
Esimerkiksi: Kuvittele, ettรค haluat avata verkkopankkitilin. Yhden pankin kysely kestรครค korkeintaan kaksi pรคivรครค. Sinulla on myรถs lista 20 muusta pankista, joiden kyselyn suorittaminen voi kestรครค lyhyemmรคn ajan. Kaikkien 20 pankin lรคpi hakeminen ei vรคlttรคmรคttรค tarjoa nopeampaa vaihtoehtoa, ja itse haku vie aikaa. Olisi ollut parempi valita ensimmรคinen pankki. Samoin SQL-optimoija kรคyttรครค kattavia ja heuristisia algoritmeja kyselyn suoritusajan minimoimiseksi.
Optimoija etsii kolmessa vaiheessa:
Vaihe 0: Triviaalin suunnitelman etsintรค
Tรคmรค on optimointia edeltรคvรค vaihe. Joillekin kyselyille on olemassa vain yksi kรคytรคnnรถllinen suunnitelma, joka tunnetaan triviaalisuunnitelmana. Lisรคhakuja ei tarvitse tehdรค, koska mikรค tahansa lisรคhaku lรถytรคisi saman suoritussuunnitelman lisรคkustannuksilla.
Vaihe 1: Transaktioiden kรคsittelysuunnitelmien etsiminen
Tรคmรค sisรคltรครค sekรค yksinkertaisten ettรค monimutkaisten suunnitelmien haun. Yksinkertaisen suunnitelman haku kรคyttรครค sarake- ja indeksitietojen tilastollista analyysia, ja se on tyypillisesti rajoitettu yhteen indeksiin taulukkoa kohden. Jos yksinkertaista suunnitelmaa ei lรถydy, suoritetaan monimutkaisempi haku, johon sisรคltyy useita indeksejรค taulukkoa kohden.
Vaihe 2: Rinnakkaiskรคsittely ja optimointi
Jos edelliset strategiat eivรคt tuota riittรคvรครค suunnitelmaa, optimoija etsii rinnakkaiskรคsittelymahdollisuuksia koneen kรคsittelyominaisuuksien perusteella. Jos rinnakkaiskรคsittely ei ole mahdollista, alkaa viimeinen optimointivaihe, jossa kรคytetรครคn kaikkia jรคljellรค olevia vaihtoehtoja parhaan mahdollisen suoritussuunnitelman lรถytรคmiseksi.
Kyselyn suorittaja
Kyselyiden suorittaja kutsuu tallennusmoottorin Access Methodia. Se tarjoaa suoritussuunnitelman, joka sisรคltรครค suorittamiseen tarvittavan tiedonhakulogiikan. Kun tiedot on vastaanotettu tallennusmoottorista, tulos julkaistaan โโprotokollakerrokselle ja lรคhetetรครคn loppukรคyttรคjรคlle.
Kun relaatiomoottori on mรครคrittรคnyt kyselyn suoritustavan, tallennusmoottori kรคsittelee fyysiset dataoperaatiot. Tรคmรค kerros hallinnoi, miten tiedot tallennetaan, tallennetaan vรคlimuistiin ja noudetaan levyltรค.
Varastointi Moottori
Tallennusmoottori vastaa datan tallentamisesta tallennusjรคrjestelmรครคn, kuten levylle tai SAN-jรคrjestelmรครคn, ja sen hakemisesta tarvittaessa. Ennen tallennusmoottorin komponenttien tarkastelua on tรคrkeรครค ymmรคrtรครค, miten data fyysisesti tallennetaan.
Tiedostot ja niiden laajuus
Datatiedostot tallentavat tiedot fyysisesti datasivujen muodossa, joiden jokaisen sivun koko on 8 kt. Tรคmรค on pienin tallennusyksikkรถ tiedostoissa. SQL ServerTietosivut on loogisesti ryhmitelty laajennuksiin (extents). Yhdellekรครคn objektille ei ole suoraan mรครคritetty yksittรคistรค sivua; sen sijaan yllรคpito tehdรครคn laajennusten kautta. Jokaisella sivulla on sivun otsikko (96 tavua), joka sisรคltรครค metatietoja, kuten sivutyypin, sivunumeron, kรคytetyn tilan, vapaan tilan sekรค osoittimet seuraavalle ja edelliselle sivulle.
tiedostotyypit
Ensisijainen tiedosto: Jokaisessa tietokannassa on yksi pรครคtiedosto. Se tallentaa kaikki tรคrkeรคt tiedot, jotka liittyvรคt taulukoihin, nรคkymiin, triggereihin ja muihin objekteihin. Tiedostopรครคte on tyypillisesti .mdf, mutta se voi olla mikรค tahansa tiedostopรครคte.
Toissijainen tiedosto: Tietokanta voi sisรคltรครค useita toissijaisia โโtiedostoja tai olla sisรคltรคmรคttรค niitรค. Nรคmรค ovat valinnaisia โโja sisรคltรคvรคt kรคyttรคjรคkohtaisia โโtietoja. Tiedostopรครคte on tyypillisesti .ndf, mutta se voi olla mikรค tahansa tiedostopรครคte.
Lokitiedosto: Tunnetaan myรถs nimellรค Write-Ahead Logs. Tiedostopรครคte on .ldf. Lokitiedostoja kรคytetรครคn tapahtumien hallintaan, ei-toivotuista instansseista palautumiseen ja vahvistamattomien tapahtumien peruutukseen.
Tallennusmoottorissa on kolme pรครคkomponenttia. Jokaisella on oma roolinsa tiedonsaannin ja eheyden hallinnassa.
Kรคyttรถmenetelmรค
Access Method toimii rajapintana kyselyn suorittajan ja Buffer Manager tai tapahtumalokit. Se ei itse suorita kyselyรค, mutta mรครคrittรครค sen tyypin:
- Jos kysely on SELECT-lauseke (DML), se vรคlitetรครคn Buffer Jatkokรคsittelyn pรครคllikkรถ.
- Jos kysely on Ei-SELECT-lauseke (DDL ja DML), se vรคlitetรครคn tapahtumien hallinnalle. Tรคmรค sisรคltรครค enimmรคkseen UPDATE-, INSERT- ja DELETE-lausekkeita.
Buffer Johtaja
Buffer Manager hallitsee ydintoimintoja, kuten suunnitelmavรคlimuistia, tietojen jรคsennystรค ja virheellisten sivujen kรคsittelyรค.
Suunnitelman vรคlimuisti
Nykyinen kyselysuunnitelma: Buffer Hallinta tarkistaa, onko suoritussuunnitelma tallennetussa suunnitelmavรคlimuistissa. Jos on, vรคlimuistissa olevaa kyselysuunnitelmaa ja siihen liittyvรครค datavรคlimuistia kรคytetรครคn suoraan.
Ensimmรคisen kรคyttรถkerran vรคlimuistisuunnitelma: Jos ensimmรคisen kyselyn suoritussuunnitelma on monimutkainen, se tallennetaan suunnitelman vรคlimuistiin. Tรคmรค varmistaa nopeamman saatavuuden, kun SQL Server vastaanottaa saman kyselyn seuraavan kerran.
Tietojen jรคsentรคminen: Buffer Vรคlimuisti ja datan tallennus
Buffer Pรครคkรคyttรคjรค tarjoaa pรครคsyn tarvittaviin tietoihin. Kaksi mahdollista lรคhestymistapaa riippuen siitรค, onko vรคlimuistissa tietoja:
Buffer Vรคlimuisti โ pehmeรค jรคsennys
Buffer Johtaja etsii tietoja Buffer Vรคlimuisti. Jos tiedot ovat olemassa, kyselyn suorittaja kรคyttรครค niitรค suoraan. Tรคmรค parantaa suorituskykyรค, koska tietojen hakeminen vรคlimuistista vaatii vรคhemmรคn I/O-toimintoja verrattuna tiedon hakemiseen levyltรค.
Tietojen tallennus โ kova jรคsentรคminen
Jos tietoja ei ole kohdassa Buffer Vรคlimuisti, tarvittavat tiedot haetaan levyllรค olevasta tallennustilasta. Tiedot tallennetaan sitten myรถs vรคlimuistiin myรถhempรครค kรคyttรถรค varten.
Tapahtuman johtaja
Transaktionhallintaa kutsutaan, kun kรคyttรถtapa mรครคrittรครค, ettรค kysely ei ole SELECT-lauseke. Se varmistaa datan yhtenรคisyyden ja kestรคvyyden useiden alikomponenttien avulla:
Lokien hallinta
Lokinhallinta pitรครค track kaikista jรคrjestelmรคssรค suoritetuista pรคivityksistรค tapahtumalokeihin tallennettujen lokien kautta. Jokainen lokimerkintรค sisรคltรครค lokin jรคrjestysnumeron sekรค tapahtumatunnuksen ja tietojen muokkaustietueen. Tรคmรค mekanismi tracks vahvistettuja ja peruutettuja tapahtumia.
Lukon hallinta
Transaktion aikana tallennustilassa olevat tiedot siirtyvรคt lukittuun tilaan. Lukituksenhallinta kรคsittelee tรคtรค prosessia varmistaen tietojen yhtenรคisyyden ja eristรคytymisen. Nรคitรค ominaisuuksia kutsutaan myรถs nimellรค ACID (Atomjรครคisyys, johdonmukaisuus, eristys, kestรคvyys).
Toteutusprosessi
Toteutusprosessi seuraa seuraavia vaiheita:
- Lokinhallinta aloittaa lokin kirjaamisen ja Lukinhallinta lukitsee siihen liittyvรคt tiedot.
- Tiedoista sรคilytetรครคn kopio Buffer Vรคlimuisti.
- Pรคivitettรคvien tietojen kopio sรคilytetรครคn lokissa. Buffer, ja kaikki tapahtumat pรคivittรคvรคt tiedot Data-osiossa Buffer.
- Sivut, jotka tallentavat muokattua tietoa, tunnetaan nimellรค Likaiset sivut.
Tarkistuspisteiden ja ennakkoon kirjoitettavien lokien tallennus
Tarkistuspisteprosessi suoritetaan noin kerran minuutissa ja merkitsee kaikki likaiset sivut levylle kirjoitettavaksi. Sivu kuitenkin lรคhetetรครคn ensin lokitiedoston datasivulle Buffer Loki. Tรคtรค mekanismia kutsutaan ennakkokirjaukseksi. Likaiset sivut pysyvรคt vรคlimuistissa, vaikka ne olisi kirjoitettu levylle.
laiska Writer
Kun SQL Server havaitsee suuren kuormituksen ja uusille tapahtumille tarvitaan puskurimuistia, se vapauttaa likaiset sivut vรคlimuistista. Lazy Writer toimii LRU (Least Recently Used) -algoritmilla puhdistaakseen sivuja puskurialtaasta levylle.
Kuinka SQL Server kรคsittelee kyselyn pรครคstรค pรครคhรคn
Kunkin kerroksen ymmรคrtรคminen erikseen on arvokasta, mutta kokonaiskuvan selventรคminen tapahtuu, kun tarkastellaan niiden yhteistoimintaa. Kun asiakassovellus lรคhettรครค SQL-kyselyn, tapahtuu seuraava sarja:
Protokollakerros vastaanottaa pyynnรถn jaetun muistin, TCP/IP:n tai nimettyjen putkien kautta ja kรครคrii sen TDS-pakettiin. Relaatiomoottori sitten ottaa ohjat: CMD-jรคsennin tarkistaa syntaksin ja semantiikan, optimoija luo halvimman suoritussuunnitelman ja kyselyn suorittaja aloittaa tiedonhaun.
Kyselyn suorittaja kutsuu Tallennusmoottorin Kรคyttรถtapa, joka reitittรครค SELECT-kyselyt Buffer Manager ja muokkauskyselyt Transaction Managerille. Buffer Esimies tarkistaa suunnitelmavรคlimuistin ja Buffer Vรคlimuisti ensin (pehmeรค jรคsennys). Jos tietoja ei ole vรคlimuistissa, se suorittaa levyn lukemisen (kova jรคsennys). Kirjoitustoimintoja varten tapahtumienhallinta koordinoi lokinhallintaa, lukitusnhallintaa ja tarkistuspisteprosessia varmistaakseen ACID-yhteensopivuuden.
Kun tallennusmoduuli palauttaa pyydetyt tiedot, relaatiomoduuli muotoilee tulosjoukon ja protokollakerros toimittaa sen takaisin asiakassovellukselle saman TDS-protokollan kautta.
Kuinka valita oikea protokolla SQL Server -yhteyksille
Oikean protokollan valinta riippuu asiakkaan ja palvelimen vรคlisestรค fyysisestรค suhteesta sekรค suorituskykyvaatimuksista.
Kรคytรค jaettua muistia kun asiakassovellus toimii samassa koneessa kuin SQL Server. Tรคmรค on nopein vaihtoehto, koska se poistaa kaiken verkon ylimรครคrรคisen kuormituksen. Se sopii erinomaisesti paikalliseen kehitykseen, testaukseen ja yhden koneen kรคyttรถรถnottoihin.
Kรคytรค TCP/IP-protokollaa kun asiakas ja palvelin ovat eri koneilla, jotka on yhdistetty WAN-verkon tai internetin kautta. Tรคmรค on yleisimmin kรคytetty protokolla tuotantoympรคristรถissรค. SQL Server kuuntelee oletusarvoisesti porttia 1433, ja tรคmรค protokolla tukee salattuja yhteyksiรค TLS:n kautta.
Kรคytรค nimettyjรค putkia kun asiakas ja palvelin ovat samassa luotettavassa lรคhiverkossa ja suorituskyky sisรคisissรค verkoissa on etusijalla. Nimetyt putket ovat oletusarvoisesti poissa kรคytรถstรค ja ne on otettava kรคyttรถรถn SQL Server Configuration Managerin kautta. Se on harvinaisempi nykyaikaisissa kรคyttรถรถnotoissa, mutta on edelleen hyรถdyllinen vanhoissa intranet-sovelluksissa.

















