SQL Server Architecture (forklaret)
โก Smart opsummering
SQL Server ArchiTecture fรธlger en klient-server-model, der er organiseret i tre kernelag: Protokollaget til netvรฆrkskommunikation, Relationel motor til forespรธrgselsbehandling og Storage Engine til datahรฅndtering og -hentning.

MS SQL Server er en klient-server-arkitektur. MS SQL Server-processen starter med, at klientapplikationen sender en anmodning. SQL Server accepterer, behandler og besvarer anmodningen med behandlede data. Lad os diskutere hele arkitekturen vist nedenfor i detaljer:
Som diagrammet nedenfor viser, er der tre hovedkomponenter i SQL Server Archilรฆre:
- Protokollag
- Relationel motor
- Opbevaringsmotor
Protokollag โ SNI
SQL Server Protocol Layer, ogsรฅ kendt som Server Network Interface (SNI), understรธtter tre typer klient-server-arkitekturer. Hver protokol betjener et forskelligt netvรฆrksscenarie. Det er vigtigt at forstรฅ disse protokoller, fรธr man undersรธger, hvordan forespรธrgsler behandles internt.
Delt hukommelse
Forestil dig en samtale tidligt om morgenen. Tom og hans mor er pรฅ det samme logiske sted, deres hjem. Tom beder om kaffe, og mor serverer den direkte. Pรฅ samme mรฅde leverer SQL Server Shared Memory-protokollen, nรฅr klienten og serveren kรธrer pรฅ den samme maskine. Begge kommunikerer via delt hukommelse uden netvรฆrksoverhead.
Analogi: Tom knytter til klienten, mor knytter til SQL Server, hjemme knytter til maskinen, og verbal kommunikation knytter til delt hukommelsesprotokoll.
Konfigurationsnoter: In SQL Management Studio, kan indstillingen "Servernavn" for en lokal forbindelse vรฆre ".", "localhost", "127.0.0.1" eller "Maskine\Instans".
TCP / IP
Forestil dig nu, at Tom vil have kaffe fra en butik, der ligger 10 km vรฆk. Tom er hjemme, og kaffebaren ligger pรฅ en travl markedsplads. De kommunikerer via et mobilnetvรฆrk. Pรฅ samme mรฅde leverer SQL Server TCP / IP-protokol nรฅr klienten og SQL Server er pรฅ separate maskiner, der er forbundet via et netvรฆrk.
Analogi: Tom knytter til klienten, cafรฉen knytter til SQL Server, hjemmet og markedspladsen knytter til fjerntliggende placeringer, og mobilnetvรฆrket knytter til TCP/IP-protokollen.
Konfigurationsnoter: I SQL Management Studio skal indstillingen "Servernavn" for en TCP/IP-forbindelse vรฆre "Maskine\Instans af serveren". SQL Server bruger port 1433 som standard til TCP/IP-forbindelser.
Navngivne rรธr
Endelig vil Tom have grรธn te fra sin nabo Sierra. De er pรฅ samme fysiske placering, da de er naboer, og kommunikerer via et intranetvรฆrk. Pรฅ samme mรฅde leverer SQL Server Named Pipe-protokollen, nรฅr klienten og serveren er forbundet via et lokalnetvรฆrk (LAN).
Analogi: Tom knytter til klienten, Sierra knytter til SQL Server, mens naboer knytter til LAN, og det interne netvรฆrk knytter til Named Pipe-protokollen.
Konfigurationsnoter: Navngivne piper er som standard deaktiveret og skal aktiveres via SQL Configuration Manager.
Hvad er TDS?
Nu hvor de tre typer klient-server-arkitektur er klare, er her et kig pรฅ TDS:
- TDS stรฅr for Tabular Data Stream.
- Alle tre protokoller bruger TDS-pakker.
- TDS er indkapslet i netvรฆrkspakker, hvilket muliggรธr dataoverfรธrsel fra klientmaskinen til servermaskinen.
- TDS blev fรธrst udviklet af Sybase og ejes nu af Microsoft.
Fรธlgende tabel sammenligner de tre SQL Server-forbindelsesprotokoller:
| Feature | Delt hukommelse | TCP / IP | Navngivne rรธr |
|---|---|---|---|
| Netvรฆrksomfang | Samme maskine | Fjernbetjening (WAN/Internet) | Kun LAN |
| Standard port | N / A | 1433 | 445 |
| Ydeevne | Hurtigst (ingen netvรฆrksoverhead) | God (optimeret til WAN) | God (optimeret til LAN) |
| Aktiveret som standard | Ja | Ja | Ingen |
| Bedste Use Case | Lokal udvikling og testning | Fjernadgang til produktion | Pรฅlidelige LAN-miljรธer |
Da protokollaget hรฅndterer netvรฆrkskommunikation, er det nรฆste trin i SQL Server-arkitekturen behandlingen af โโselve forespรธrgslen. Det er her, relationsmotoren tager over.
Relationel motor
Relationsmotoren er ogsรฅ kendt som forespรธrgselsprocessoren. Den indeholder SQL Server-komponenterne, der bestemmer, hvad en forespรธrgsel skal gรธre, og hvordan den kan udfรธres mest effektivt. Den er ansvarlig for at udfรธre brugerforespรธrgsler ved at anmode om data fra lagringsmotoren og behandle de returnerede resultater.
Som vist i arkitekturdiagrammet er der tre hovedkomponenter i den relationelle motor:
CMD Parser
Data modtaget fra protokollaget sendes til relationsmotoren. CMD-parseren er den fรธrste komponent, der modtager forespรธrgselsdataene. Dens primรฆre opgave er at kontrollere forespรธrgslen for syntaktiske og semantiske fejl og derefter generere et forespรธrgselstrรฆ.
Syntaktisk kontrol: Ligesom alle andre programmeringssprog har SQL Server et foruddefineret sรฆt af nรธgleord og grammatikregler. SELECT, INSERT, UPDATE og mange andre tilhรธrer den foruddefinerede nรธgleordsliste. CMD-parseren verificerer, at inputtet fรธlger disse regler. Hvis brugerens input afviger fra den forventede syntaks, returnerer parseren en fejl.
Eksempel: Forestil dig en russer, der gรฅr ind pรฅ en japansk restaurant og bestiller pรฅ russisk. Tjeneren forstรฅr kun japansk og kan ikke behandle ordren. Hvis en bruger skriver "SELECR" i stedet for "SELECT", returnerer CMD-parseren ligeledes en fejl, fordi den ikke genkender nรธgleordet.
Semantisk kontrol: Dette udfรธres af normaliseringsvรฆrktรธjet. Det kontrollerer, om kolonnenavnene, tabelnavnene og andre objekter, der forespรธrges pรฅ, faktisk findes i skemaet. Hvis de findes, binder normaliseringsvรฆrktรธjet dem til forespรธrgslen. Denne proces kaldes ogsรฅ binding. Nรฅr brugerforespรธrgsler indeholder en VIEW, erstatter normaliseringsvรฆrktรธjet den med den internt lagrede viewdefinition.
Eksempel: Lรธb SELECT * from USER_ID ville fรฅ parseren til at kaste en fejl under den semantiske kontrol, hvis tabellen USER_ID ikke findes i databasen.
Opret forespรธrgselstrรฆ: Dette trin genererer forskellige udfรธrelsestrรฆer, der reprรฆsenterer de forskellige mรฅder, en forespรธrgsel kan kรธres pรฅ. Alle trรฆer producerer det samme รธnskede output.
Optimizer
Optimeringsvรฆrktรธjet opretter en udfรธrelsesplan for brugerens forespรธrgsel. Denne plan bestemmer, hvordan forespรธrgslen skal udfรธres. Ikke alle forespรธrgsler er optimerede. Optimering gรฆlder for DML (Data Modification Language)-kommandoer som SELECT, INSERT, DELETE og UPDATE. DDL-kommandoer som CREATE og ALTER er ikke optimerede, men kompileres til en intern formular.
Forespรธrgselsomkostningerne beregnes ud fra faktorer som CPU-forbrug, hukommelsesforbrug og input/output-behov. Optimeringsvรฆrktรธjets rolle er at finde den billigste og omkostningseffektive udfรธrelsesplan, ikke nรธdvendigvis den absolut bedste.
Eksempel: Forestil dig, at du vil รฅbne en online bankkonto. รn bank tager maksimalt 2 dage. Du har ogsรฅ en liste med 20 andre banker, som mรฅske eller mรฅske ikke tager kortere tid. Hvis du sรธger i alle 20 banker, finder du muligvis ikke en hurtigere lรธsning, og selve sรธgningen koster tid. Det ville have vรฆret bedre at vรฆlge den fรธrste bank. Tilsvarende bruger SQL Optimizer udtรธmmende og heuristiske algoritmer til at minimere forespรธrgselskรธrselstiden.
Optimeringsvรฆrktรธjet sรธger i tre faser:
Fase 0: Sรธg efter Trivial Plan
Dette er prรฆoptimeringsfasen. For nogle forespรธrgsler findes der kun รฉn praktisk plan, kendt som en triviel plan. Der er ikke behov for at sรธge yderligere, da enhver yderligere sรธgning ville finde den samme udfรธrelsesplan med ekstra omkostninger.
Fase 1: Sรธg efter transaktionsbehandlingsplaner
Dette inkluderer sรธgning efter bรฅde simple og komplekse planer. Den simple plansรธgning bruger statistisk analyse af kolonne- og indeksdata, typisk begrรฆnset til รฉt indeks pr. tabel. Hvis der ikke findes en simpel plan, udfรธres en mere kompleks sรธgning, der involverer flere indeks pr. tabel.
Fase 2: Parallel behandling og optimering
Hvis de tidligere strategier ikke resulterer i en tilstrรฆkkelig plan, sรธger optimeringsvรฆrktรธjet efter muligheder for parallel behandling baseret pรฅ maskinens behandlingskapacitet. Hvis parallel behandling ikke er mulig, begynder en afsluttende optimeringsfase, der bruger alle resterende muligheder til at finde den bedst mulige udfรธrelsesplan.
Forespรธrgselsudรธver
Forespรธrgselseksekutoren kalder adgangsmetoden i lagringsmotoren. Den leverer en udfรธrelsesplan, der indeholder den datahentningslogik, der krรฆves til udfรธrelse. Nรฅr data er modtaget fra lagringsmotoren, publiceres resultatet til protokollaget og sendes til slutbrugeren.
Nรฅr relationsmotoren har fastlagt, hvordan en forespรธrgsel skal udfรธres, hรฅndterer lagringsmotoren de fysiske dataoperationer. Dette lag styrer, hvordan data gemmes, caches og hentes fra disken.
Opbevaringsmotor
Storage Engine er ansvarlig for at lagre data i et lagringssystem som en disk eller et SAN og hente dem, nรฅr det er nรธdvendigt. Fรธr man undersรธger Storage Engine-komponenterne, er det vigtigt at forstรฅ, hvordan data fysisk lagres.
Datafiler og -omfang
Datafiler lagrer fysisk data i form af datasider, hvor hver side har en stรธrrelse pรฅ 8 KB. Dette er den mindste lagerenhed i SQL ServerDatasider er logisk grupperet i extents. Intet objekt er direkte tildelt en individuel side; i stedet udfรธres vedligeholdelse via extents. Hver side har en sidehoved (96 bytes), der indeholder metadata sรฅsom sidetype, sidetal, brugt plads, ledig plads og henvisninger til den nรฆste og forrige side.
Filtyper
Primรฆr fil: Hver database indeholder รฉn primรฆr fil. Den gemmer alle vigtige data relateret til tabeller, visninger, triggere og andre objekter. Filtypen er typisk .mdf, men kan vรฆre en hvilken som helst filtype.
Sekundรฆr fil: En database kan indeholde flere sekundรฆre filer, men kan ikke indeholde dem. Disse er valgfrie og indeholder brugerspecifikke data. Filtypenavnet er typisk .ndf, men det kan vรฆre et hvilket som helst filtypenavn.
Logfil: Ogsรฅ kendt som Write-Ahead Logs. Filtypenavnet er .ldf. Logfiler bruges til transaktionsstyring, gendannelse fra uรธnskede instanser og udfรธrelse af rollback af ikke-committede transaktioner.
Storage Engine har tre hovedkomponenter. Hver af dem spiller en specifik rolle i styringen af โโdataadgang og -integritet.
Adgangsmetode
Access-metoden fungerer som en grรฆnseflade mellem forespรธrgselsudfรธreren og Buffer Manager eller transaktionslogge. Den udfรธrer ikke selv udfรธrelsen, men bestemmer typen af โโforespรธrgsel:
- Hvis forespรธrgslen er en SELECT-sรฆtning (DML), den videregives til Buffer Leder til videre behandling.
- Hvis forespรธrgslen er en Ikke-SELECT-sรฆtning (DDL og DML), sendes den til Transaktionsadministratoren. Dette omfatter primรฆrt UPDATE-, INSERT- og DELETE-sรฆtninger.
Buffer Manager
Buffer Manager administrerer kernefunktioner for plancache, dataparsing og hรฅndtering af dirty page.
Plan cache
Eksisterende forespรธrgselsplan: Buffer Manager kontrollerer, om udfรธrelsesplanen findes i den gemte plancache. Hvis den gรธr, bruges den cachelagrede forespรธrgselsplan og dens tilhรธrende datacache direkte.
Fรธrstegangs cacheplan: Hvis en fรธrstegangsforespรธrgselsplan er kompleks, gemmes den i plancachen. Dette sikrer hurtigere tilgรฆngelighed nรฆste gang SQL Server modtager den samme forespรธrgsel.
Dataparsing: Buffer Cache og datalagring
Buffer Manageren giver adgang til de nรธdvendige data. Der er to mulige tilgange afhรฆngigt af om der findes data i cachen:
Buffer Cache โ Blรธd parsing
Buffer Lederen sรธger efter data i Buffer Cache. Hvis dataene er til stede, bruger Query Executor dem direkte. Dette forbedrer ydeevnen, fordi hentning af data fra cachen krรฆver fรฆrre I/O-operationer sammenlignet med hentning fra disklager.
Datalagring โ Hรฅrd parsing
Hvis data ikke er til stede i Buffer Cache, de nรธdvendige data sรธges i datalageret pรฅ disken. Dataene gemmes derefter ogsรฅ i datacachen til senere brug.
Transaktionsleder
Transaktionshรฅndteringen kaldes, nรฅr adgangsmetoden bestemmer, at en forespรธrgsel er en ikke-SELECT-sรฆtning. Den sikrer datakonsistens og holdbarhed gennem flere underkomponenter:
Log Manager
Logadministratoren gemmer track af alle opdateringer udfรธrt i systemet via logfiler gemt i transaktionslogge. Hver logpost indeholder et logsekvensnummer sammen med transaktions-ID'et og dataรฆndringsposten. Denne mekanisme tracks committede og tilbagefรธrte transaktioner.
Lรฅsemanager
Under en transaktion gรฅr de tilknyttede data i lageret i en lรฅst tilstand. Lรฅseadministratoren hรฅndterer denne proces og sikrer datakonsistens og -isolering. Disse egenskaber er ogsรฅ kendt som ACID (Atomicity, konsistens, isolation, holdbarhed).
Udfรธrelsesproces
Udfรธrelsesprocessen fรธlger disse trin:
- Logadministratoren starter logfรธring, og Lรฅseadministratoren lรฅser de tilhรธrende data.
- En kopi af dataene opbevares i Buffer cache.
- En kopi af data, der skal opdateres, gemmes i loggen Buffer, og alle hรฆndelser opdaterer data i Data Buffer.
- Sider, der gemmer รฆndrede data, kaldes Beskidte sider.
Checkpoint- og forhรฅndslogning
Kontrolpunktsprocessen kรธrer cirka รฉn gang i minuttet og markerer alle snavsede sider til skrivning til disk. Siden skubbes dog fรธrst til datasiden i logfilen fra Buffer Log. Denne mekanisme er kendt som Write-Ahead Logging. De snavsede sider forbliver i cachen, selv efter de er blevet skrevet til disken.
Lazy Writer
Nรฅr SQL Server observerer en hรธj belastning, og der er behov for bufferhukommelse til nye transaktioner, frigรธr den snavsede sider fra cachen. The Lazy Writer bruger LRU-algoritmen (Mindst Nyligt Brugte) til at rense sider fra bufferpuljen til disken.
Sรฅdan behandler SQL Server en forespรธrgsel fra ende til anden
Det er vรฆrdifuldt at forstรฅ hvert lag individuelt, men at se, hvordan de fungerer sammen, klargรธr det samlede billede. Nรฅr en klientapplikation sender en SQL-forespรธrgsel, sker fรธlgende sekvens:
Protokollag modtager anmodningen via delt hukommelse, TCP/IP eller navngivne pipes og pakker den ind i en TDS-pakke. Relationel motor derefter tager over: CMD-parseren kontrollerer syntaks og semantik, optimizeren genererer den billigste udfรธrelsesplan, og forespรธrgselseksekutoren begynder datahentning.
Forespรธrgselsudfรธreren kalder Lagringsmotorens Adgangsmetode, som sender SELECT-forespรธrgsler til Buffer Manager og รฆndringsforespรธrgsler til Transaktionsadministratoren. Buffer Manager tjekker plancache og Buffer Cache fรธrst (blรธd parsing). Hvis data ikke caches, udfรธres en disklรฆsning (hรฅrd parsing). Ved skriveoperationer koordinerer Transaktionshรฅndtering Loghรฅndtering, Lรฅsehรฅndtering og kontrolpunktsprocessen for at sikre ACID-overholdelse.
Nรฅr Storage Engine returnerer de anmodede data, formaterer Relational Engine resultatsรฆttet, og protokollaget leverer det tilbage til klientapplikationen via den samme TDS-protokol.
Sรฅdan vรฆlger du den rigtige protokol til SQL Server-forbindelser
Valg af den korrekte protokol afhรฆnger af det fysiske forhold mellem klienten og serveren, samt krav til ydeevne.
Brug delt hukommelse nรฅr klientapplikationen kรธrer pรฅ den samme maskine som SQL Server. Dette er den hurtigste mulighed, fordi den eliminerer al netvรฆrksoverhead. Den er ideel til lokal udvikling, test og implementeringer pรฅ รฉn maskine.
Brug TCP/IP nรฅr klienten og serveren er pรฅ forskellige maskiner, der er forbundet via et WAN eller internettet. Dette er den mest almindeligt anvendte protokol i produktionsmiljรธer. SQL Server lytter som standard pรฅ port 1433, og denne protokol understรธtter krypterede forbindelser via TLS.
Brug navngivne pipes nรฅr klienten og serveren er pรฅ det samme betroede LAN, og ydeevne pรฅ interne netvรฆrk er en prioritet. Named Pipes er som standard deaktiveret og skal aktiveres via SQL Server Configuration Manager. Det er mindre almindeligt i moderne implementeringer, men er stadig nyttigt til รฆldre intranetapplikationer.
















