Database Flashcards
Hvad står TSQL for?
Transact SQL
Hvad er TSQL?
Det er en procedural udvidelse til SQL hvor den giver mulighed for delvis normal programmering.
Hvad muliggør TSQL?
Den muliggøre funktionerne: Variable, IF, While, Iterator, Exceptions, (case) osv.
Er datatyperne forskellige i TSQL og SQL?
NEJ!
Hvad muliggøre TSQL ikke?
- GUI
- Collections
Hvad er et BATCH?
Det er når en eller flere queries kører i et hug
Hvilke fejl kan en BATCH have og hvor vil det betyde for udførlsen?
- Ved compile fejl
- Ingen af de queries som skulle
køres udføres da compileren
finder fejl i syntaxen.
- Ingen af de queries som skulle
- Ved runtime fejl
- Alle quries som kan gennemføres
lykkedes men de andre som ikke
kan kører giver en fejl.
- Alle quries som kan gennemføres
Hvad er en stored procedure?
Er en querie som gemmes og kan køres igen og igen.
Hvordan er erklæring af en stored procedure?
Hvad er globale variable?
Det er indbyggede variable som man kan bruge men som man ikke selv kan erklære og starter med @@
Hvad er almindelige variable?
Det er variable som starter med @ og er nogle som du selv kan erklære. Kan kun bruges indenfor det Batch hvor de er erklæret.
Hvordan gemte man data fra IT-systemer før indførelsen af databasesystemer (DBMS)? Hvad var det største problem med løsningen?
Programmer gemte data direkte på en fil på harddisken.
Problem: Der er en masse funktionalitet som de fleste IT-systemer har brug for. I ovenstående arkitektur er det nødvendigt at programmere denne funktionalitet ind I hvert eneste IT-system.
Hvad var målet med indførelse af DBMS?
For at gøre det muligt for alle IT-systemer at tilgå generel funktionalitet som: ○ Autentifikation
○ Samtidighedskontrol
○ Alt eller intet princippet
○ Back-up og restore
○ Specificere regler om dataintegritet
○ Effektiv fremsøgning af data der undgår at gennemløbe hele filer (indeksering).
Hvordan adskiller arkitekturen for den relationelle database sig med arkitekturen på billedet?
- Forespørgselssproget er SQL
- DBMS’en er en relationel DBMS
Er fremmednøgler i den relationelle database pointere til anden data i en anden tabel?
NEJ! Alle attributter indeholder data - der er dermed ingen pointere. Referencer håndteres med fremmednøgler der selv er attributter og IKKE pointers.
Hvilke forskellige database systemer er de mest populære for tiden?
Relationelle databaser som MySQL, Oracle og MSSQL er de suverænt mest populære. Næst efter kommer NoSQL databaserne som typisk er dokument (MongoDB) eller graf baserede.
Hvad er det som udgangspunkt der begrænser performance i DBMS’en?
Harddisken (HDD) er den begrænsende faktor for performance - er meget langsom sammenlignet med de øvrige komponenter.
Hvad er en page på harddisken? Hvor meget fylder en page? Hvad indeholder den?
En page er det der skrives til / hentes fra harddisken. En page har en størrelse på 8K og indeholder så mange database records som den kan.
Hvordan er den traditionelle harddisk opbygget?
Består af et antal skiver der roterer omkring deres centrum
Har en læsearm der kan flyttes mellem centrum og skivens rand. Læsearmen læser den data der er lige under armen. Læsearmen overfører pagens data til RAM.
I hvilke tilfælde anvender man en SSD fremfor en traditionel harddisk (HDD) i et databasesystem?
SSD diske anvendes som cache mellem den traditionelle harddisk og RAM I lidt større systemer.
Hvordan læser harddisken en page? Hvilke dele i processen er de mest tidskrævende?
- Diskarmen flyttes til den rigtige afstand fra centrum
- Man afventer diskens rotation, så læsehovedet på læsearmen står lige over pagen
- Pagens indhold læses og indhold overføres til RAM
De første to elementer er de mest tidskrævende I processen.
Hvad bruger man en buffer til i DBMS’en? Hvorfor bruger man en buffer?
Når man har læst en page, er der en rimelig sandsynlighed for at den pågældende page skal anvendes igen inden for kort tid
Denne observation udnyttes til at forbedre performance ved at indføre en buffer. Det betyder at når en page er hentet fra harddisken gemmes den I RAM I et stykke tid efterfølgende.
Kan DBMS bufferen påvirkes af programmøren?
Nej, den er indbygget i DBMS’en og er ikke umiddelbart til at påvirke.
Hvad bruger man pre-fetching til i DBMS’en? Hvorfor bruger man pre-fetching?
Når man har læst en page, er der en rimelig sandsynlighed for, at efterfølgende pages skal anvendes inden for kort tid
Denne observation udnyttes til at forbedre performance ved at indføre pre-fetching. Det betyder at når en page læses fra disken bliver de efterfølgende pages læst med op.
Kan DBMS’ens pre-fetching påvirkes af programmøren?
Nej, den er indbygget i DBMS’en og er ikke umiddelbart til at påvirke.
Hvilke to mulige taktikker har DBMS’en når der skal gemmes noget data på harddisken?
- Placer det et tilfældigt sted, hvor der er plads. Det gør det let at gemme, men sværere at finde papiret igen. Vælges denne taktik siger vi at tabellen er heap-organiseret
- Placer papiret efter et system/en ordning. Det gør det lidt tungere at gemme, men lettere at finde. Vælges denne taktik siger vi at tabellen er indekseret
Hvornår er en tabel heap-organiseret?
Når records ikke gemmes efter et system, men blot hvor der er plads.
Hvad er grundprincipperne i indeksering af en tabel i databasen?
Når DBMS’en laver indeksering gøres det ud fra værdien af en eller flere attributter I en record. Typisk vælges kun en attribut, men det er muligt at kombinere flere.
Man siger at der er et clustered indeks på den/de attributter der bestemmer placeringen.
Det er udvikleren selv der afgør om der skal være clustered indeks på en tabel, og I det tilfælde også hvilken attribut det skal være på.
Hvor mange clustered indeks kan man have per tabel?
Kun én.
Hvor mange nonclustered indeks kan man have per tabel?
Ubegrænset antal.
Hvilke to teknikker kan bruges til indeksering? Hvilken er mest brugt?
- Hashing
- Søgetræer (mest brugt)
Hvordan foregår clustered indeksering med hashing?
Med denne teknik køres en hashfunktion på den/de valgte attribut/attributter. Hashfunktionen returnere et tal der er addressen på en page hvori recorden skal gemmes.
I det tilfælde hvor en page er fyldt, bruges rehashing. Her sættes den fyldte page til at pege på en anden page, hvori recorden så gemmes. På den måde får man kædede lister af pages.
Hvordan foregår clustered indeksering med et søgetræ?
I de indre knuder i søgetræet (altså de knuder der har børn) findes kun de attributter der er valgt til at lave indeks på, samt pointers til andre pages.
I bladene står record’ene.
DBMS’en finder på baggrund af det clustered indeks frem til det blad der indeholder den eftersøgte record.
Hvordan foregår nonclustered indeksering med et søgetræ?
Nonclustered træ-baseret indeks er generelt opbygget på samme måde som det clustered træ-baseret indeks:
○ Alle knuder er pages
○ De indre knuder er ens: Her findes kun de attributter der er valgt til at lave indeks på, samt pointers til andre pages.
○ Bladene er forskellige: I nonclustered indeks findes den valgte attribut til at lave indeks på, samt en liste af pagenumre hvor records med pågældende værdi kan findes.
Hvorfor kan det give mening at bruge nonclustered index fremfor clustered index?
Fordi der kun kan være ét clustered indeks pr tabel, typisk på én attribut, betyder det dermed også at tabellen er uordnet for de øvrige attributter. Ønsker man stadig at søge effektivt på de øvrige attributter og undgå “table scan” kan man benytte nonclustered indeks.
Hvad er et “table scan”?
Hvis DBMS’en møder ovenstående query og tabellen ikke er indekseret (altså dermed heap-organiseret), har den kun en mulighed; at gennemløbe hele tabellen for at finde et match. Dette kaldes et “table scan” og er en meget dyr operation. Er der derimod et indeks vil DBMS’en bruge dette automatisk.
Hvad er buffer management?
Det er et komponent som er i alle DBMS’er og sørger for at allokere pages i main memory
Hvad er de tre Problemstillinger i buffer management?
- Hvor meget skal pre-fetches
- Hvilke pages skal fjernes hvis der er fyldt i main memory, når en anden page har brug for en plads
- Kontrol af ændring i pages siden indlæsning også kaldet dirty bits
Hvad er fordelen ved indeksbaseret lagring af data?
Hurtigere svar tider fra databasen
Hvad er ulemperne ved indeksbaseret lagring af data?
- Inserts vil tage længere tid
- Updates kan komme til at tage længere tid
- Deletes kan komme til at tage længere tid
Hvad er forskellen på hash basert indeks og træ-baseret indeks?
Hash baseret indeks er effektiv når man snakker om querys hvor man efterspørgere data med =, dvs where og join, hvorimod træ-baseret har en bestemt organiseret rækkefølge og er derfor langt bedere til at håndtere data efterspørgelser hvor betingelserne indeholder <, >, BETWEEN, LIKE med præfix og eller hvor data skal leveret sorteret.
Hvilke to metoder kan DMBS bruge for at løse problemet med at der ikke er ledig plads til pagen som kan gemmes?
- ISAM
- B+
Hvordan fungere ISAM?
Træet laves ved oprettelse af et nyt indeks
Træets udseende ændres ikke pga behov for nye pages
Hvordan løser ISAM behovet for nye pages?
Der hvor den nye page som skulle indsættes i træet skulle være oprettes der en pointer fra den nuværede page til den page som skal indsættes dvs. at der bliver dannede kædede lister rundt omkring i træet.
Hvordan løses den linkede træstruktur som ISAM skaber ved behov for nye pages?
Det gør man ved at reorganisere trænet sådan at den får en pæn træstruktur igen.
Hvad er princippet i B+?
Det er at træet skal være pænt efter hver operation
Hvad gør B+ når der er brug for en extra page?
Der laver B+ en pagesplit
Hvad er et pagesplit i B+?
Der splitter B+ halvdelen af de records som er i en page og overføre de record til en ny allokeret page og på den måde holdes træet nogenlunde pænt.
Hvad er fillfactor?
For at optimere preformance i indeks basere søgetræer bestemmer man hvor stor en procentdel af en page må fyldes for at den ikke rammer Mads kapacitet.
Hvad er forskelle på B+ og ISAM ift. behovet for processer kraft?
B+ er dyrt her og nu da den laver et page split hver gang der er brug for en ny page
ISAM er ikke dyrt her og nu man kan skabe preformance tab til næste reorganisering
Hvor stor er en page i netto og brutto størrelse?
Netto er 8060 bytes da SQL server selv skal bruge plads til administration
Brutto er 8192 bytes.
Hvor gemmes records?
I pages
Gemmer SQL server altid hele records eller splitter den dem op for at fordele dem ud over pages?
Nej den gemmer som udgangs punkt altid records hele. Kun hvis at en record er for stor til at være i en page kan den fordeles
Hvilke to datatyper snakker man om når der er tale om records?
- Variable-længde datatyper
- Fast-længde datatyper
Hvad er en variable-længde datatype?
- VARCHAR og VARBINARY
- Fylder alt efter størrelse på data
Hvad er en fast-længde datatype?
- Alle andre datatyper end VARCHAR og VARBINARY
-Fylder det samme uanset størrelse
Hvornår er en record en fast-længde record?
Hvis den udelukkede indeholder fast-længde datatyper eller hvis den kun indeholde EN variable-længde datatype
Hvor meget fylder en header på en record?
6 bytes + 1 bit pr. attribut + summen af attributternes størrelse
Hvad skal man bruge af CHAR eller VARCHAR når der er snakke om preformance i DBMS?
Man skal altid bruge CHAR da det er lettere for DBMS, hvis man ved at strengen ikke bliver mere en 20-25 karakter lang og eller hvis man ved hvad den bestemte textstræng fylder.
Hvordan sorteres clustrede indeks?
Fra venstre mod højre
Hvad er interval søgninger?
- BETWEEN
- < eller >
- LIKE ‘…%’
Når man selv laver indeks i SQL server hvilke metoder bruges så?
- Træ-baseret indeks
- B+
Er primary key altid clustered?
Som default ja, men kan godt laves om
Hvad er en optimizer I DBMS?
Et komponent som forsøger et finde den mest optimale og billigste måde at finde efterspurgt data frem på
Hvad vil det sige at en optimizer er sub-optimal
Det vil sige at den ikke nødvendigvis finder den absolutte bedste strategi at finde data frem på, men finder altid en god strategi.
Hvilke parametre vurdere en optimizer om en stategi er god?
- Kort svartid
- Mindre brug af ressourcer
- Minimalt antal af disk I/O tilgang
Hvordan fungere en optimizer trin for trin?
- Parse (Dvs. Tjekker syntax og om den er semantisk korrekt)
- Hvis querien er optimeret i Plan Cache så eksekvere den eller går den videre til trin 3 og 4.
- Operratograf (Dvs. At query bliver omformet til graf-format hvor der vises rækkefølgen af operationer og hvilke algoritmer der bruges)
- Optimering (Dvs. At operratografen rækkefølge laves om for at optimere preformance fx. De formindskende operationer først og de forøgende til sidst)
Hvad hedder operatografen i SQL-server?
Executionplaner
Hvad er reduktionsfaktoren?
Det er en faktor som defineres som den procentdel af data som opfylder betingelserne i WHERE sætningen
Hvilken strategi vælger optimizeren hvis der ikke er noget indeks på værdien som du bruger i dit WHERE operation?
Table scan (Kører hele tabellen igennem)
Hvilken strategi bruger optimizeren hvis der er et clusteret indeks på værdien fra WHERE operationen?
Bruger det clusteret indeks
Hvilken strategi bruger optimizeren hvis der er et non-clusteret indeks på værdien fra WHERE operationen?
- Hvis reduktionsfaktoren er ca. <= 1% så bruger den det non-clusterede indeks
- Ellers bruges tablescan
Hvilke to ting skal optimizeren tage højde for når der skal joines?
- Hvis der er 2 eller flere tabeller der skal joines skal rækkefølgen bestemmes (Der kan kun joines to tabeller ad gangen)
- Valg af join-algoritme for hver join operation
Hvordan vælger SQL-Server hvilken rækkefølge som joins skal følge?
Den tager en rask beslutning da der på baggrund antal tabeller kan være rigtig mange mulige rækkefølger og derfor analysere den ikke samtlige muligeheder.
Hvilke tre join algoritmer bruges i moderne DBMS’er?
- Nested loop
- Sort and Merge
- Hash
Hvordan fungere Netsted Loop join algoritme(Uden indeks)?
Tabellen recorden gennemløbes og for hver record gennemløbes den anden tabels records for at finde de records som opfylder join-betingelserne
Hvordan fungere Netsted Loop join algoritme(Med indeks)?
Tabellen recorden gennemløbes og for hver record bruges indeks til at finde records i den anden tabel som opfylder join-betingelserne
Hvad er kriterierne for, og hvordan virker merge join som join-algoritme?
1.Kræver at de to indgående tabeller/mellemresultater sorteres på joinattributterne inden fletning
2.Hvis man har et antal tabeller, der joines via merge join, vil man være nødt til at resortere mellem hver join, fordi de enkelte joins typisk, sker på forskellige join-attributter.
Hvordan fungere Hash match Join algoritmen?
- Først indsættes den formoede mindste tabel i en hash tabel hvor join attributten er nøglen
- Derefter gennemløbes den store tabel ved at man for hver record slår den op i hash tabellen for at se om der er et match
- Hvis der er flere joins bliver der typsik oprettet flere hash tabeller, da forskellige joins kan have forskellige join betingelser
Hvad er en Plan Cache?
- Det er et lager som gemmer tideligere optimerede queries, da man I et rigtigt system ofte vil få de samme queries ind og derfor godt kan genbruge den samme optimering.
Hvilke indbyggede preformance forbedringer har en DBMS indbygger?
- Prefetching
- Databuffer (Sidst læste page)
- Plan Cache