Kategoriler
ORACLE

Oracle 11g: DBA-1|| Oracle Database Architecture -1

Diğer dersleri https://selimkaratas.com.tr/oracle-11g-r2-egitimi-ders-notlari adresinden bulabilirsiniz.

1-Exploring the Oracle Database Architecture ( Oracle Database Mimarisi)

Oracle veritabanı RDBMS’dir. ( İlişkisel veritabanı) Primary Key- Foreign Key yapısını baz alır.

Server’a Bağlantı Süreci

connections serverHedeflediğimiz veritabanları 7/24 açık olan veritabanlarıdır. Bizler veritabanına bağlanmak isteyen Client’larız.   Uzaktaki ya da yanımızdaki sunucuya bağlanmayı hedefleriz. Server makinemizde olan database’e bağlanmak için tool kullanmalıyız. ( SQL Developer, Sqlplus vs ) Uzaktaki bir database’e bağlanırken network konusuna gelince detaylandıracağımız şekilde bağlanabiliriz. Kendi bilgisayarımızda yaptığımız uygulamalarda hem client hem de server oluruz. Büyük server’larda arada uygulama sunucu vardır. Bunun olmasının nedeni veritabanının yükünü hafifletmektir.  Client-server mantığında çalışırken tüm kontrol database’dedir.

Oracle Database Server Architecture: Overview

 

3 tane temel kavramımız var.

  1. Memory
  2. Background process
  3. Storage structures

Memory efektif kullanarak veritabanı o kadar performanslı çalışır. Hiçbir db’de i/o yapıp datayı görmek istemeyiz. Çok daha hızlı yanıt veren memory kullanılarak (cache) kullanılması tercih edilir.

Instance = memory parçaları(sga) + Background process.

Connecting to the Database Instance

2 tane server mimarisi vardır

  • Standalone(Non-Cluster)

Burada 1 Instance = 1 Database

Database’de Control File, DataFile,  RedologFile vardır.  ( Önemli olanlar)

  • RAC (Clustered)

Birden fazla Instance var ve tek dataya bağlı ise oracle buna High-Availability diyor.

Connecting to the Database Instance

Arka planda Client tarafında açılan prosesle server proses buluşur ve bu server prosese PGA denir. Bu işlemler memory üzerinde yapılır. Belirli bir limitleme getirirsek o süreden sonra PGA ortamı terk eder. Ya da session’ı sonlandırdığımızda ortadan kaybolur.  Bu prosesin bir memory maliyeti vardır.  Session’da istenilen işlemler bu prosesin üzerinde yapılır ancak biz bunları göremeyiz.  Ayrıcalıklı hizmet verebiliriz böyle durumlar için yanında sürekli bekleyen proses belirleyebiliriz. Ancak herkes için bu işlemi yapmak maliyetlidir.  Her seferinde yeni session açmak maliyetlidir ve kaynak tüketmektedir tüm işlemleri açılan tek session üzerinde yapılmalıdır.  Sonsuz memory’e sahip olmadığımız için efektif kullanmamız gerekmektedir.

Oracle Database Memory Structures

Memory  sga + pga ‘dan oluşmaktadır.

Shared Global Area(SGA) + Private Global Area(PGA) olarak tanımlayabiliriz.

SGA : Bir veritabanında tüm kullanıcıların ortak olacak şekilde kullandıkları memory parçacığının adına SGA denir.

PGA: 1 user 1 server.  Özel memory alanı tanımlanmıştır. O kullanıcıdan başkasının kullanamayacağı, o kullanıcıdan ayrılmayacak, o kullanıcıdan sorumlu olacak memory alanıdır diyebiliriz.

Şimdi SGA komponentlerine yakından bakıyoruz: ( Her parça aynı öneme sahip değildir)

  • Shared Pool ( olmazsa olmaz memory parçası)
  • Database Buffer Cache ( Önemlidir)
  • Redo Log Buffer ( çok önemli)
  • Large Pool ( backup alınırsa önemli olabilir)
  • Java Pool ( çok önemli değildir)
  • Streams Pool ( çok önemli değildir)

shared pool

 

Library Cache alanı çalışan SQL/PL SQL’ lerin Execution planlarını tutar.
Maliyet ve performans hesabına göre en optimum plan oluşturarak tercih edilir.Tabloyu full mu tarasam yoksa index’den mi gitsem kararını bu sayede verir. Çünkü bunun orada execution planı vardır bu sayede optimum olana karar verir. Plan zaen memory’de olduğu için  bir daha o planı oluşturmaya uğraşmıyor. Yani aynı planı kullanacak query’ler  hard parse yerine soft parse tercihini yapıyor. İşte veritabanı planlarının ortak kullanılabilmesi adına çok önemlidir.

Data Dictionary Cache Mesela Veritabanına bağlanırken hr/hr yazdıktan sonra arka planda bizim kim olduğumuzu kontrol etmek zorunda. Kullandığı data dictionary view’ı password kontrolü yapıyor ve  Privillienge’lara gidip yetkileri kontrol ediyor. Eğer create session yetkisi bağlanmamıza izin veriyor. Başka birisini de sorgularken her seferinde tekrar i/o yapması gerekmez.  Select, *, from vs gibi kelimelerin anlamlarını da bilmesi gerektiği için bunları da barındırır.  Bunun için bir memory alanı vardır ve bilgileri depolar.

Fixed Area dinamik performans view’ları devamlı şekilde değişen view’ların bulunduğu alandır.  (v$session) data dictionary en son ne zaman haberdar edilmiş ise bize o bilgiyi verir ama dinamik performans view’ları anlık olarak o bilgileri verir.

Database Buffer Cache

 

En az shared pool kadar öneme sahiptir.  SGA’nın bir parçasıdır.   Her sorguda veriyi fiziksel’den alıp memory’e taşıma durumuyla kalınmasın diye böyle bir memory alanı geliştirilmiştir. Datafile’ların içerisinde bulunan data bloklarının kopyaları bulunur.

Sorgu yaparken blokları dolaşırız. Tabloya ait bloğu bulduktan sonra bloğun içinde satırlarda veriler bulunur. Mesela department_id= 20 istiyoruz. 20 bulunan bütün blokları memory’e taşırız. Ama içinde 10 varsa onu da taşır. Sonraki sorgularda department_id=10 sorgularsa eğer datafile’dan tamamen geldiyse memory’den sorgusunu yapar yine.  Satır bazlı filtreleme yapamacağı için komple taşır. Memory’de datanın durduğu yer database buffer cachedir. Tüm sorgular burada yapılır (insert,update,delete)

redo log buffer

Veritabanı Memory yetmedi diye işlemi yapmadım diyemez. En istenmeyen durum fiziksel okuma – fiziksel yazma ihtimalidir. Mesela yapılan insert’in tamamına yetecek memory olmalıdır. (fizikseli kullanmamalıdır) Bu oranların, değerlerin doğru tanımlanması gerekir. Öncelikle sorgulanan kısım ve değişen kısım veri databasenin cache alanına yazılır. ( Önce sorgulama yapılan kısım sonra değiştirilen kısım database’nin buffer cache alanını kullanır.) Buranın mümkün olduğu kadar büyük olmasını isteriz.  Ama bu alan bir veritabanında büyük tutulmaz.  Veritabanında yapılan işlemler en öncelikli olarak log buffer içine yazılmak zorundadır.  Bir veritabanı için 7/24 çalışmanın çıkış kaynağı redo log buffer kısmıdır.  Mesela bir insert işlemi yapıyoruz. Bu insert işlemine ait transcation entry’sinin direk fiziksel alana yazılmama sebebi memory alanına yazılmasının daha performanslı olmasından kaynaklanıyor. Ama yazılan bu insert işlemi dahil yazılan bilginin databasenin buffer cache’indeki algoritmada yönetilmesi çok sakıncalıdır.  Burada yapılan işlemlerde veritabanı tutarsız kapanırsa burası bir memory alanı olduğu için boş açılacaktır. Onun için bu alanda tutulan dataya ait iş maksimum sürede burada durmalı. Ancak buraya gelecek bir transcation burada uzun süre tutulmasını istemem. Proses gelsin bunu file’a yazsın isterim.  Bir veritabanında datayı kaybetmemek için çıkış noktası redo log buffer’dır.  Log dosyaları default olarak 50 MB’dır.  Doldukça diğerine geçer daha sonra tekrar başa gelir ve üzerine yazar. Böyle bir senaryoda da data kaybetme olasılığı yüksektir.  Dolduğunda veritabanı bunu arşivler.(archive log mod seçilirse) Zaten arşiv dosyası oluştuğu için üzerine yazmasında artık sakınca yoktur.  Eğer veritabanının kapanmayacağı garantisi verilirse bunlara hiç gerek yoktur. Redo log dosyaları tutarsız kapanmalardan sonra ya da backup’dan dönerken kullanılır. large pool

Opsiyonel alandır.  Bir veritabanının backup alıyorsa memory olarak o backup
alanı için burayı kaynak alır ve süreci bu şekilde yönetir. Bir client tarafından paralel bir query’e tabi tutulursa memory ihtiyacını gideren parça burasıdır.

java pool streams pool

Replikasyon ürünleridir. Otomatik yönetilir. Pek değiştirilen bir şey değildir. Gelen transcation data pool’da toplanıyor. Replike edilmiş data daha sonra transfer ediliyor.  Ama bu iş ciddi yavaşlıklara sebebiyet veriyor.

pga

 

PGA: Private Memory Area

Stack Space: Sadece o kullanıcının oluşturduğu değişkenlerin bilgileri tutulur.

User Global Area: Kullanıcının session bilgileri buradadır. (hangi uygulamaya nasıl bağlandı, gerçekleştirmeye çalıştığı  statementler buradadır)

Cursor State:  File’dan taşınan bloklarda okuma yapmayı sağlar. Mesela o blokta hem 10 hem 20 var 20’yi istersek 20’leri getirir.

Sort Area: Order by burada yapılır. Sıralama olayını yapar yani. düzene getir yani. (veritabanı hiç bir zaman datayı düzenlemek için emek sarf etmez. Düzenleme PGA işidir.) Ayrıca Group by falan da vardır. Yeterli derecede kaynak bulamazsa temp dosyasında sıralanır sonra raporlar.

Hash Area & Create Bitmap Area & Bitmap Merge Area: Join operasyonlarında kullanılır.

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir