Showing posts with label Oracle Kavramlari. Show all posts
Showing posts with label Oracle Kavramlari. Show all posts

Oracle Kavramlari - Indeks

Oracle Veritabanında indeksleri anlamak

İsin abc sinden baslarsak once blok kavramina kisaca bakalim. Sabit disk uzerinde Oracle in yazma okuma yapabilecegi en kucuk alan olup tum Oracle veritabanı nesneleri( tablo, indeks, cluster vb) bloklar uzerinde saklanirlar. Blok buyuklugu her veritabani icin yapilandirilabilir olmakla beraber genelde 4,8,16 veya 32kb degerlerinden birini alir. Veritabanlarinda bir satirin tum sutunlarin istisnalar haric tuttugu alan genelde bir blok alanından buyuk olamayacagi icin bir tek blok icine tablonun bircok satiri sigar. Oracle bu yuzden hicbir zaman sadece bir satiri okuyamaz, en azindan bir blogu okur, aradigi satiri bulur ve digerlerini ihmal eder. Oracle indeksleri genel olarak iki mimari uzerine kurulmustur : b-Tree ve bitmap. Bildigimiz tum diger indeks tipleri bu iki mimari uzerine kurulmustur. Bitmap indekslere daha sonra donmek uzere simdi b-Tree indekslerin detayına girelim.

Agac formunda bir veri yapisi olan b-Tree tipi indeks , veritabanı bloklarından olusan bir agactir. Bu indeks agacinin dallarinin ucundaki her yaprakta bloklar bulunmaktadir. Simdi bir telefon fihristini dusunerek Balanced tree kavramini somutlastiralim. Bu agacin dallarinin ucundaki her blok fihristin bir sayfasidir. Her sayfada bir den isim, telefon ve adres bilgisi bulunur tipki blogun birden cok satir icermesi gibi. Isim, address ve telefondan olusan bu satirdaki isim aradigimiz indekslenmis sutun degerine tekabul edip kisinin bulundugu yer olan adresi de ROWID dir. Fihristin her sayfasindaki isimler alfabetik olarak yukaridan asagiya siralanmislardir. Fihristte D ile baslayan kisilerin bulundugu sayfaya ayirac yardimiyla gideriz ve yukaridan asagiya tarayarak ornegin Demir isimili kisinin iletisim bilgilerini ulasiriz. Bu siralama sayesinde tum sayfayi bastan sona okumadan bastaki isimlerin yani indekslenmis sutunlarin alfabetik siralanmasindan yararlanarak hizlica aradigimiz ismi buluruz. Ama veritabani burada bizim yaptigimiz gibi satiri okuyamayaz, D ile baslayan kisilerin bulundugu tum sayfayi yani blogu okumak durumundadir.

Eger fihristte ayirac olmasaydi soyle bir sayfa olmak zorundaydi: Her sayfanin basindaki yani ilk satirindaki isim ve bunun bulundugu sayfa. Sayfa 3- Adem Sayfa 7- Bahri Sayfa 25-Cem gibi. Iste bu sayfa B-Tree deki dallarda bulunan bloklara tekabul etmektedir. Dal blogu icinde bir blok adresi ve o adresteki blogun ilk basindaki satirin bilgileri bulunmaktadir. Yeni veri geldikce dal bloguna bagli baska bir dal blogunun acilmasi sadece satir degerlerinin olusacak yaprak bloguna kadar devam eder.

B-Tree yapisindaki fihristte Galip ismini bulunmasi
  • Sayfa 1: Dal Blogu(isim ve bu isimle baslayan sayfanin numarasi ) : (Sayfa 6 Ferit) , (Sayfa 7 Hayri)
  • Sayfa 3: Dal Blogu(isim ve bu isimle baslayan sayfanin numarasi ) : (Sayfa 300 Furkat) , (Sayfa 301 Gaye)
  • Sayfa 300: Galip isminin bulundugu yaprak Blogudur. Aydin ismi icin gidilecek baska bir dal blogu yoktur.

Oracle da indeksleri cesitli saklama ayarlari ve yerlesecegi tablespace i vererek(explicitly) veya vermeyerek tanımlayabiliriz. Eger bu parametreler verilmeden yaratilirlarsa varsayilan saklama secenekleri kullanilarak ve varsayilan tablespace uzerinde yaratilirlar. Essiz indeksler birincil anahtar kisiti ile iliskilendirilen sutun veya sutunlarda ayni degeri tasiyan iki satirin olmamasını garanti ederler. Aksine essiz olmayan indeksler de satir essizligini sunmazlar. Oracle veritabani tablo uzerindeki UNIQUE veya PRIMARY KEY tutarlilik kısıtlarinin tanımlanması durumunda her biri icin essiz bir indeks yaratir. Tablonun sutun veya sutunlari icin daha onceden tanimlanmis UNIQUE kisitini gecici olarak gecersiz kilmak ve daha sonra kaldirilmasindan bu yana girilen satirlardaki sutunlar icin essizligini kontrol etmeden UNIQUE kisitini tekrar devreye almak istiyorsak kullanilmasi gereken indeks tipi essiz olmayan olmalidir.

Aslinda Oracle indekslenmis herhangi satirin yerini bulabilmesi icin her durumda essiz olmayan indeksleri essiz indekslere cevirmektedir. Satirin ROWID isi indeks satir kayıdına ek bir sutun olarak eklenerek essiz olmayan indeks arkaplanda essiz hale getirilmis olur. Boylece indeks yapisi icinde uygun sirada ve pozisyonda indeksi saklamak icin gereken essiz indeks satir kaydi olusturulmus olur. Eger satirin sutununa gireceginiz verinin essiz olmasi gerekiyorsa bu sutun icin UNIQUE kisitini tanimlayin , Oracle sizin icin indeksi yaratacak ve caresine bakacaktir. Eger kisitinizi NOT DEFERRABLE olarak yarattıysanız Oracle in yaratacagi indeks essiz aksi durumda zaten essiz olmayan tipte olacaktir.

Oracle Kavramlari - Redo Logs

Oracle Archived Redo Logs

Oracle veritabaninda yapilan herhangi bir degisiklik oncelikle Log Buffer adi verilen bellek yapisina yazilir. Her kosan oracle ana yordami icinde yaklasik 1 MB lik alan log buffer kullanimi icin ayrilmistir. Log Buffer icindeki bilgiler asagidaki durumlarda Redo Log dosyalarina LGWR isimli Oracle alt yordami tarafindan yazilir.
  • a)Her 3 saniyede
  • b) Commit komutu kosturuludugunda
  • c)Log Buffer bellek alanin 1/3 u doldugunda
  • d) Checkpoint a ulasildiginda.


Bu dort durum herhangi bir zamanda veritabani icinde olusabilir. Redo Dosyalari isletim sistemi uzerinde tutulan fiziksel dosyalardir. Redo Log dosyasi tanimlanan buyuklugune ulastigi zaman kapatilir ve LGWR diger acilan yeni dosyaya yazmaya devam eder. Her bir veritabani icin minimum gereken 2 Redo Log dosyasi , birisi icin arsivleme devam ederken digerinin log buffer tarafindan yazma icin kullanilmasini garanti eder.


Redo Log dosyasi kapatilip bir yenisi yazilmaya baslandigi anda LGWR yordami bir diger alt yordam olan ARCH i tetikler. ARCH yordami Redo Log dosyasini Archieved Log dosyasina cevirir ve init.ora gosterilen log_archieve_dest_1 yere yazar.


LGWR yordami mevcut Redo Log dosyasi doldugunda , yazmaya bir sonraki musait Redo Log dosyasi ile devam eder. En son musait Redo Log dosyasi doldugunda , LGWR ilk dosyaya doner ve onun uzerine yazmaya devam eder.


LGWR yordami tarafindan Redo Log dosyalari round-robin kullanilir. Eger 3 tane Redo Log dosyasi tanimlandiysa ve 3. Redo Log dosyasi doldugunda LGWR 1. Redo Log a yazmaya baslar. Oracle veritabani archieve log aktif olarak calistiriliyorsa ve ARCH yordami 1. Redo Log dosyasinin arsivlenmesini biteremeden LGWR 3. Redo Log dosyasini doldurursa veritabani ARCH yordaminin isini bitirip 1. Redo Log dosyasini bosaltincay kadar askida kalir.

Eger herhangi bir sebepten dolayi(Sunucu fiziksel problem veya insan hatasi) veritabaniniz beklemendik sekilde durursa veya sql sorgularina cevap veremez duruma gelirse., archieved logs imdadiniza yetisir.

Oracle Kavramlari - Segment

Oracle Kavramlari - Segment

Oracle veritabininda segment veritabani nesnelerini iceren bir nevi tasiyici yapidir. Extent ise her segment, yani tasiyici yapinin bir parcasidir. Her bir extent bir veya birden cok ardisik bir blok, bilgi kutugudur. High water mark ise bir segment i kullanilan ve serbest bloklara boler. HWM isaretinin altindaki bloklar en azindan bir kez bilgi saklamak icin kullanilmistir. Oracle veritabani isaretin ustundeki bloklarin bilgi islemek icin hic kullanilmadigini kabul eder ve full table scan kosturuldugunda bu isarete kadar olan tum bloklari okur. Segment in baslik kisminda Oracle bu segment icin HWM isaretinin adresini tutar. Normal veritabani islemlerinde , HWM isareti sadece yukari ve asagi hareket eder. Saklanacak bilgi icin sabit surucu uzerinde yer Extent olarak ayristirilir. Bir veya birden cok Extent Segment i olusturur. Her bir Extent bir Tablespace e aittir.

Oracle da 11 tane Segment tipi vardir

  • Table, 
  • Table partition, 
  • Index, 
  • Index partition, 
  • Cluster,
  • Rollback, 
  • Deferred rollback,
  • Temporary, 
  • Cache,
  • Lobsegment, 
  • Lobindex

Bu Segment tipleri 4 baslik altinda gruplanabilir.

Data-Table ve cluster
Index,
Rollback,
Temporary data,


Her Segment bastan belirlenmis -sinirli- veya sinirsiz miktarda Extent icerebilir. Data segment dedigimiz Table ve Cluster icin Oracle, serbest bloklarin miktarini tutar. Segment basligi ilk Extent icindeki ilk blokta saklanir ve Extent tablosunu, Serbest Liste tanimlayicilarini ve HWM isaretini icerir.

Serbest Liste tanimlayacisini anlamak icin data block address kavramina bakmamiz gerekir. Bu bellek adresi veritabani icindeki her biri blogun essiz tanimlayicisidir. Bu adres data file ve block numarasindan uretilir. Data file ise Oracle veritabanin bir parcasi olup kullanici ve undo bilgisini saklar. Bu bilgi dosyalari tablespace olarak gruplanir.
Serbest liste tanimlayacisina geri donersek ; HWM isareti altinda kalan serbest alanlar freelist ile yonetilirler.Bir Segment e ait olup iceresinde serbest yazma alanina sahip olanlar Extent ler bu freelist icerisindedir. Tablo ya yeni bir satir INSERT ile yazilacaginda bu freeliste gidilir ve ilk musait blok un adresi alinir. Bu yazma eger blokta kalan musait serbest alandan buyuk yer kapliyorsa, bu blok serbest listeden cikartilir, tersi durumunda yani yazmadan sonra eger hala bu blokta yer kaliyorsa freelist de kalmaya devam eder.

Freelist den yazmaya musait blok adreslerinin alinmasi birbirini izleyen ardisik bir yordamdir. Birden cok yordamin sirali bir bicimde ve onlardan sadece birisinin freelist e erisip serbest blok baslangic ve bitis adresini degistirmesi icin bir bayraga ihtiyacimiz vardir. Hangi yordam bu bayragi alirsa,birakincaya kadar sadece o bu freelist i guncelleyebilir. Paralel calisma ile perfromansi arttirmak icin Oracle ana yordami,Segment in freelist ini alir ve yazma/guncelleme yogunluguna gore onu birden cok freelist lere boler. Bu sayade birden cok yordam bir segment icindeki serbest blok alanlarini bularak guncelleme yapabilirler.Freelist icerisinde , yukarida bahsettigimiz bayrak ve serbest blok baslangic ve bitis adresleri bulunur.

Bazi SQL fonksiyonlarinin musait bellek alani icinde kosturulmasi tamamlanmamissa gecici Segment lere ihtiyac vardir. create index, select order by, select distinc bunlara ornek olarak verilebilir. Gecici Segmentleri gecici tablespace lerde saklamak daha verimli bir cozumdur.

Oracle Kavramlari - Blok

Oracle Veritabani Bloklari


Serbest bloklar HWM isaretinin altinda kalan bloklar olup doluluk oranlari pctused ile belirlenen degerden azdir. Simdi pctused terminin nereden geldigine bir bakalim. physical_attribute_clause pctree, pctused ve initrans degerlerini tanimlayarak Table, Cluster, Index ve Materialized View gibi veritabani nesnelerinin depolama karakterine karar vermemizi saglar.


Bir blok icinde kullanilan alan miktari %pctused den az ise o blok satir yazma icin kullanilabilir ve data block baslangic/bitis adresi bulundugu Segment in free list descriptor u icinde bulunur. Diger bir deyisle dolu olan bir blok herhangi bir update veya delete isleminden sonra %pctused den daha az miktarda doluluk oranina gerilemisse tekrar serbest blok haline gelir. pctfree yuzdesel degerine gelince, bir blok en en az %pctfree bos bellek alani iceriyorsa serbest blok olarak kabul edilir.



INSERT yordami yurutuldugunde , Oracle bu tabloya eklenecek satiri serbest olan bloklara yerlestirmeye calisir. Eger serbest blok bulunamaz ise yazma islemi HWM isaretci adresinin uzerinde kalan kullanilmayan bloklara yapilir. Daha once bahsettigimiz gibi Segment icersindeki serbest bloklarin baslangic segment basligindaki free list de bulunur.


Oracle 10g dan baslayarak birden coklu blok buyuklugu tanimalamak mumkun olmaktadir, bu degerlerden birisi standard buyukluk olarak kabul edilir. System tablespace olusturan bloklarin buyuklugu standard blok buyuklugunu verir.


Simdi de MIntrans ve Maxtrans.. Bu degerler bir segmentin fiziksel niteliklerini tanimlar. Segment lerin interested transaction list dedigimiz islem listeleri kendi bloklari icinde tutulur. Bir katar olan interested transaction list en guncel islemlerin gecmisini tutar. Veritabani nesne yaratildiginda bu katarin buyuklugu initrans parametresi ile belirlenir. Eger bu katar icerisindeki guncel islem listesini buyutmek gerekirse, maxtrans degerine kadar buyutulebilir. Eger bir tablo nesnesi 1 elemanli -initrans- ve en fazla 2 iki isleme izin veren - maxtrans degerlerine sahip ITL ile yaratilirsa. 3. sorgu islem yurutmesi diger 2 sorgudan birisi icin commit veya rollback tamamlanincaya kadar askida kalir.

Image from : http://docs.oracle.com

Oracle Kavramları - SGA System Global Area

Oracle SGA Kavrami

Oracle programi baslatilirken SGA bellek alani isletim sisteminden istenir ve diger alt Oracle programciklari tarafindan paylasilir. Bu bellek alaninda veritabani ve diger programciklarin islemesi icin gerek tum ayarlar saklanir. SGA nin rastgele erisim bellegi uzerinde kaplayacagi alan ve sunacagi ozellikler INIT.ORA ve SPFILE dosyalari ile kontrol edilir.

SGA nin bilesenlerini listeleyelim;
Data buffer cache. Veri ve index bloklarina hizli erisim icin kullanilan onbellek alani. Oracle baslatma parametrelerinden biri olan DB_CACHE_SIZE degeri bu on bellek ve dolayisiyla SGA alanin buyuklugunu belirler.

Shared Pool. Birden cok istemci kullanicisi tarafindan erisilen veritabani nesneleri dedigimiz tablo index view tanimlamalari SQL komut ve PL/SQL yordamlari vb. bu alanda bulunurlar. Shared pool icerigi icin daha detaya girersek ;

Sozluk Onbellegi. Oracle Veri Sozlugu veritabani nesnelerinin tanimlamalarini ve bunlar icin sistemde ayrilan ve kullanilan veri buyukluklerini icerir. Soyle ki varsiyalan olarak atanan sutun degerleri, kullanicilara verilen sema erisim haklari ve butunluk kisitlamalari gibi. (ornegin NOT NULL) Veri sozlugunun cok sik erisilen kisimlari SGA alanin sozluk on bellek kisminda tutulur.

Redo Log Buffer. Commit komutu ile guncellenmis bloklardaki bilginin redo log dosyalarina yazilmak icin bekledigi bellek alani.

Java pool. Shared pool a benzer sekilde. java program parcalarinin tutuldugu on bellek alani.

Streams pool. Oracle stream nesnelerinin tutuldugu on bellek. Bu nesneler ile Oracle ve Oracle olmayan veritabanlari arasinda veri tasimasi yapilir.
Large pool. Daha sonra deginecegimiz Recovery Manager(RMAN) calismasi icin istege bagli olarak ayrilabilecek bir alandir. RMAN yordami large pool bellek alani sistemden istenmeden de calisabilir.
Image from : http://oracledba.ezpowell.com