Sustav za upravljanje bazom podataka
Sustav za upravljanje bazom podataka je aplikacijska računarska podrška u kojoj se izgrađuje i obrađuje baza podataka. Većina današnjih sustava (u daljnjem tekstu SUBP) zasnovano je na relacijskom modelu koji je uveo E. F. Codd, osim njih postoje sustavi bazirani na objektnom modelu i stari ISAM sustavi.
Primjeri sustava su:
- Filemaker
- Microsoft Access
- 4th dimension 4D
- MySQL
- PostgreSQL
SUBP je zadužen za upravljanje svim podacima i njihovom obradom te se sastoji od:
- prvi Logičke razine modela koji služi za to da SUBP-u daje elegantnu kontrolu nad podacima, a sastoji se od:
- Stranica ili blok
- Ekstenta
- Segmenata
- Tabličnog prostora (tablespace)
- drugi Koncepcijske razine koja se sastoji od entiteta i veza između njih.
- treći Fizičke razine koja definira način pohrane podataka na diskovima.
SQL optimizator je dio SUBP-a koji služi za iznalaženje načina izračunavanja najbržega odgovora na traženi upit koristeći određene statistike. Prvotne statistike koje se koriste uključuju osnovne informacije kao što su broj redaka i blokova po tablici, broj listovnih blokova indeksa, cluster ratio po indeksu, broj različitih vrijednosti za pojedine stupce ili kombinaciju stupaca (kardinalnost) kao i najveće i najmanje vrijednost, a ponekad i druge najveće i druge najmanje vrijednosti druga najveća i druga najmanja) za dani stupac.
Blok ili stranica podataka je najmanji element u bazama pa se može usporediti s bitom u organizaciji glavne memorije. Mi ćemo umjesto izraza stranica koristiti izraz blok koji se koristi u Oracle SUBP-u. U blokove podataka se spremaju pojedini zapisi te veličina bloka predstavlja gornju granicu veličine jednoga zapisa. Preciznije, zapis veličine 2100 bajtova stane u stranicu veličine 4K. Ako bi listovni blokovi B+ stablo indeksa imali zapise koji bi zauzimali više od 20% bloka u većini slučajeva došlo bi do podjele bloka. Zapisi u listovnim blokovima koji zauzimaju više od 20% dovode do toga da se blok dijeli na dva dijela. Današnji diskovi s rotacijom od 15 000 RPM trebaju 4 milisekunde za pristup stazi koja sadrži 100 kilobajta, te je stoga pristup blokovima veličine 2K, 4K ili 8K otprilike isti.
Microsoft SQL Server koristi 8K velike blokove. U Oracleu je DB_BLOCK_SIZE odgovoran za veličinu. Njena vrijednost može biti 2K, 4K, 8K, 16K, 32K i 64K, a maksimalna veličina indeksiranoga zapisa je 40% veličine bloka. DB2 za z/OS podržava 4K, 8K, 16K i 32K blokove za tablicu, ali samo 4K za indekse. Maksimalna veličina za indeksirani zapis je 255 bajtova u V7 i 2000 bajtova u V8. DB2 za LUW podržava 4K, 8K, 16K i 32K i za tablice za indekse. Gornja dopuštena granica indeksiranoga reda je 1024 bajta.
Zaglavlje sadrži informacije o bloku kao što su adresa i tip segmenta (na primjer podatci ili indeksi)
Rječnik tablice sadrži informacije o tablicama koji imaju zapise u ovome bloku.
Rječnik zapisa sadrži informacije o trenutnim zapisima u bloku koji uključuju adresu svakoga retka u području podataka izvjesnoga reda. Kada bismo nekim slučajem izbrisali zapis informacije o tom zapisu u rječniku zapisi se ne brišu.
To je zajednički za naziv rječnik zapisa, rječnik tablice i zaglavlja, a zauzimaju 84 do 107 bitova.
Niz blokova oblikuje logičku cjelinu zvanu ekstent koji predstavlja određeni broj međusobno povezanih blokova.
Iznad ekstenta sljedeću razinu predstavljaju segmenti koji predstavljaju skup ekstenata alociranih za tablicu, indeks, rollback segment ili za privremenu uporabu od strane sesije, transakcije. Skup ekstenta koji predstavljaju segment postoje u istome tabličnome prostoru.
Baza podataka je logički podijeljena u jedinice zvane tablični prostori (tablespace) koji grupiraju povezane blokove podataka, ekstenta i segmenata.
Podatkovne datoteke (datafiles) sadrže na fizičkoj razini podatke o objektima baze podataka (tablice indeksi itd.) Podatkovne datoteke imaju iduće karakteristike:
- Mogu biti dodijeljeni samo jednoj bazi podataka
- Mogu se definirati tako da se proširuju prema potrebi
Dok se obavlja sinkrona U/I operacija SUBP nije u mogućnosti nastaviti dalje te je prisiljen pričekati dok se U/I operacija završi. U sinkronome čitanju, moramo identificirati red (prikazan kao C za predstavljanje dijela procesorskog vremena na slici 1.1), pristupiti stranici i obraditi redak prikazan kao drugi dio procesorskog vremena), a svaka razina zahtjeva da se prijašnja razina završi. Svaka grupa blokova se dobavlja i obrađuje na način prikazan na slici 1.1 gdje se može vidjeti da sinkrono čitanje započinje dobavljanje čitave aktivnosti prije nego što se prva stranica krene obrađivati da smanji prvotno čekanje
Asinkrono čitanje se odvija unaprijed, tijekom obrade ranije pročitanih blokova. Asinkrono čitanje omogućuje značajno preklapanje čitanja i obrade blokova. Idealno, asinkrono čitanje može završiti i prije nego što je prethodno pročitani blok obrađen.
Klasterirani indeks jest onaj indeks čiji je redoslijed zapisa u visokoj vezi s redoslijedom zapisa u tablici. Indeks može biti klasteriran samo po primarnome ključu, ali u izvjesnome trenutku više indeksa može biti klasterirano. Omjer klasterizacije indeksa je mjera koleracije između indeksiranih redova i redova tablice U Oracleu, riječ cluster (grozd) se koristi kako bi se tjesnije povezale dvije ili više tablica koje se najčešće koriste zajedno i nemaju nikakve veze s klasteriranim indeksom.
Kao što se vidi iz slike upit može doći od dva različita izvora
- prvi Krajnjega korisnika ili aplikacije koja traži ili modificira podatake
- drugi Administratora baze podataka koji je odgovoran za kreiranje strukture i shema baze podataka. Pretpostavimo da administrator baze podataka želi napraviti tablicu košarica za kupovanje koja se sastoji od naziva proizvoda i njegove cijene. Za to treba imati privilegije jer time mijenja bazu podataka.
DDL naredba najprije prolazi kroz DDL procesor te odlazi prema upravljaču izvršenja upita koja onda odlazi u upravljača indeksom/datotekama/zapisima da bi promijenio metadata, koji je u biti informacija o shemi bazi podataka.
Nakon što korisnik ili aplikacija upute upit SUBP-u on prolazi kroz prevodilac upita te kroz plan upita (Explain plan u Oracleu) SUBP odgovara na njega. Mehanizam za upravljanje izvršavanjem upita izdaje niz zahtjeva za male zahtjeve kao što su n-torke (tuples) ili zapisi upravljaču zapisa koji je upoznat s datotekama podataka, veličini zapisa i indeksima. Upravljač zapisima prosljeđuje zapise upravljaču međuspremnika koji ima ulogu dovođenja podataka iz sekundarne memorije u glavnu memoriju. Sekundarna memorija je prespora za izravan pristup podatcima te se oni moraju dovesti u glavnu memoriju kako bi im se moglo pristupiti. Upravljač međuspremnikom je odgovoran za dijeljenje memorije u međuspremnike koji su u biti regije veličine jedne stranice u koje se diskovni blokovi mogu prenijeti.
Upravljač transakcijama omogućuje DML aredbama i upitima korisnika da budu izvedeni atomarno i izolirano od drugih. Pod izolacijom se misli da transakcija ne ovisi o promjenama koje na BP izvode ostale transakcije drugim transakcijama koje se odvijaju u tome trenutku. Pod atomarnošću se misli da transakcija mora biti izvedena u cijelosti ili da ne bude izvedena uopće. Zamislimo da želimo prenijeti novac s računa A na račun B, a za to vrijeme se dogodi pad sustava. Ako se transakcija upravo odvija promjene u SUBP neće nastupiti jer se transakcija mora provesti u cijelosti. Za vraćanje podataka je odgovoran upravljač prijavom i vraćanjem podataka u prvobitno stanje.
Kada korisnik želi obaviti transakciju onda druge transakcije nad istim resursom nisu moguće. Recimo da želimo naručiti kartu za koncert i ostala je jedna jedina karta te prodavač nama prodaje tu kartu. u tom trenutku prodavač na drugoj lokaciji koji koristi istu bazu ne može prodati tu kartu jer smo mi zaključali bazu. Postoji sljedeće vrste zaključavanja: Ekskluzivno zaključavanje – druge transakcije ne mogu ni čitati ni mijenjati podatke dok transakcija koja je zaključala podatke ne završi Podijeljeno zaključavanje – tijekom rada transakcije koja je zaključala podatke, druge transakcije imaju ograničeni pristup zaključanim podatcima.
Prijava – kako bi se osigurala trajnost u bazama podataka svaka promjena u sustavu mora se prijaviti. Konkretno, bez obzira na to kada sustav padne, upravljač prijavama će vratiti sustav u neko konzistentno stanje. Pretpostavimo da nekoliko korisnika u istom vremenskom intervalu želi kupiti kartu za koncert kod nekoliko različitih prodavača karata koji se nalaze na međusobno neovisnim lokacijama. Kako bi nekoliko prodavača u istome trenutku pristupilo SUBP-u on mora napraviti red pristupa kako ne bi došlo do konflikta. Za to je zadužen upravljač konkurentnosti.
Procesor upita se sastoji od dva dijela:
- prvi Prevodioca upita – prevodi upit u internu formu zvanu plan upita to jest niz operacija koje bi se trebale izvesti nad bazama podataka a sastoji se od:
- Analizatora upita koji od tekstualne forme pravi stablastu strukturu
- Preprocesor upita koji pravi semantičku provjeru provjeravajući postoje li sve relacije dane upitom u SUBP-u i obavlja neke stablaste transformacije da bi analizirano stablo pretvorilo u stablo algebarskih operacija koje reprezentiraju plan upita
- Optimizatora upita ili u SQL-u SQL optimizator služi za pronalazak optimalnog načina dobavljanja podataka koristeći tablice i indekse.
- drugi Mehanizam izvršavanja (execution engine) odgovoran je za izvršavanje svakog koraka koji je SQL optimizator izabrao kao optimalan plan izvršavanja upita. Mehanizam izvršavanja je u vezi sa svim elementima SUBP-a ili direktno ili kroz međuspremnike.