Sayfalar

1 Haziran 2012 Cuma

ORACLE DBMS Mimarisine Bir Bakış-1

Merhaba Arkadaşlar...
İnternet üzerinde ORACLE Veritabanı Yönetim Sistemi Mimarisi'ne dair bilgiler mevcut. Bunlardan kimisi fazla kafa karıştırıcı olup anlamakta güçlük çekilen bilgiler, kimisi de bazı noktalarda eksik kalabilen bilgiler olabiliyor. Ben topladığım verilerle, katıldığım seminerlerle (özellikle Talip Hakan Öztürk'e ait olanları kastediyorum :) ) bu alanda elimden geldiği kadar bilgilerimi paylaşmaya çalışacağım. Bu bilgileri paylaşırken kendime de olan faydasını belirtmek isterim...

Fazla uzatmadan Oracle mimarisine değinmeye başlayalım. Arkadaşlar, ORACLE pek çok sistemde olduğu gibi iki ana mimari üzerinde incelenmektedir. Bunlar:

  • Fiziksel Mimari
  • Mantıksal Mimari
olarak göze çarpmaktadır. Burada bu iki mimari yapıyı ana hatlarıyla keşfetmeye çalışacağız.

1. FİZİKSEL MİMARİ
Fiziksel kısım; aynı PC'lerde olduğu gibi işletim sistemi tarafından görülebilir olan bölümdür. Mantıksal kısım için aynı şeyi söyleyemeyeceğiz. Mantıksal kısım tamamen SQL bilgisi gerektiren ve böylelikle kullanılabilir olan kısımdır.
Konuya girmeden önce konunun aslında çok da karmaşık olmadığını bildirmek adına şunu söylemek gerekiyor. ORACLE fiziksel mimarisi üç temel birimden oluşuyor. Bunlar;
  • Bellek birimleri
  • Proses birimleri
  • Depolama birimleri
Aşağıdaki şemada bu yapıyı gözleyebiliriz;

Bu arada instance kelimesinin yazı boyunca fazlasıyla geçtiğini göreceğiz. Bunun ne olduğunu tanımlayalım;

Instance; SGA (System Global Area), PGA(Process Global Area) ve arka plan proseslerin (background processes) bir araya gelmesi ile oluşan yapıdır. Oracle veritabanı aktive olduğu zaman instance denen yapı da aktif olmuş demektir. 

Bu resme daha ayrıntılı baktığımızda aşağıdaki yapıyı görüyor olmalıyız;


Şimdi tek tek bu temelde yukarıda belirttiğimiz üç yapının elemanları olan yukarıdaki şekildeki yapıların neler olduğunu tanımlayalım.

1.1. Bellek Birimleri
Aslında bellek birimleri iki temel birimden oluşmaktadır. Resmi incelersek SGA ve bunun dışında kalan prosesleri ifade eden PGA bu iki temel birimi teşkil eder. Bu ifadelerin ne anlama geldiğine bakalım;

A. SGA: ORACLE Instance için paylaşımlı olan bir bölge olup (paylaşımlı demek bütün server ve prosesler tarafından kullanılabilir olmaktır) veri ve kontrol bilgilerinin bulunduğu yerdir. SGA'nın içerisinde neler var derseniz aşağıdaki sıralanan maddeler bunu açıklıyor olacak. ORACLE bir instance başladığı anda SGA için yer ayırır. Daha sonra bu ayrılan yer instance sonlandığı anda serbest bırakılır. Bu, programlama dillerindeki pointers mantığını akla getirmektedir. Aşağıdaki bilgileri bu durumu göz önüne alarak değerlendirmek gerekir. Örneğin önbelleğe alınan sorgu sonuçlarının kısıtlı olduğunu buradan çıkarabiliriz.

Her veritabanı instance'ı için bir SGA ayrılmaktadır. Bu ayrılan alan ne kadar fazla olursa performans bir o kadar artar. Zira bu sayede daha fazla bilgi depolanır ve sabit diske erişim azalır. 
Resimde SGA'da bulunan ve temel olarak bilinen parçalar temsil edilmiştir fakat bunun dışında SGA'da aşağıda sıralanan bir takım elemanlar da mevcuttur:
  1. Database Buffer Cache(Veritabanı Tampon Belleği): Veritabanından SQL sorguları yardımıyla getirilen veriler burada tutulur. Kullanıcıların eriştiği en son sonuçlar önbellekte tutulur. Bu sonuçlar veri blokları (data block) halinde bulunur. Son kullanılan verilerle birlikte çok kullanılan verileri de tutar.
  2. Redo Log Buffer: DML(insert, update, delete, merge sorguları) ve DDL(create, alter, drop, rename, truncate sorguları) sorguları sonucu diske yazılmadan önce burada tutulurlar. Daha sonra fiziksel bölge olan Redo Log Dosyalarına alınırlar. Bu buffer'ın öncelikli ve en önemli amacı recovery (kurtarma) işlemidir. DDL ve DML ile veritabanı üzerinde yapılan değişikliklerin kaydı burada tutulur. 
  3. Shared Pool(Paylaşım Havuzu): Veritabanı kullanıcıları tarafından paylaşımlı olarak kullanılan bölgedir. En son çalıştırılan         SQL sorgusu tutulur. Burada bir takım yapılar saklanır. Bu yapılar:
    • Data Dictionary: Adından da anlaşılacağı üzere metadatayı, kullanıcı hesap bilgilerini, kullanıcı erişim yetkilerini, fiziksel dosya isimlerini tutar. Metadata burada önemli bir kavram olup verinin verisi anlamına gelir. Bir veriye ait bilgileri ifade eder.
    • Library Cache: Son çalıştırılan SQL komutlarını ve çalıştırma planlarını tutar. Bir instance çalıştığı zaman ORACLE Shared Pool içeriğini kontrol ederek kullanılan bir sorguya ait sonuçların daha önceden kullanıldığını veya kullanılmadığını keşfeder. Eğer kullanılmışsa performansın artmasını sağlamak için zaten önbellekte var olan verileri fiziksel diske gitmeden kullanır.
  4. Large Pool: Sunucu giriş/çıkış işlemleri, eşzamanlı çalışan paralel sorgu işlemleri için bellek ayrımı, veritabanını restore etme ve back up (geri dönüş noktası) oluşturma gibi fazla bellek gerektiren durumlarda kullanılır. İsteğe bağlı olarak aktive olur. 
  5. Java Pool: Java Sanal Makinesindeki (JVM) verilerin ve kodların tutulduğu alandır. 
  6. Stream Pool: ORACLE streams tarafından kullanılan bölgedir. İlgili uygulama (SQL*PLUS ve Enterprise Manager) aracılığıyla instance başlatılırsa gereken veriler burada tutulur. 
B. PGA: Paylaşımsız bölgedir. Arkaplan prosesleri veya Server prosesleri çalıştığı anda oluşturulurlar. Her bir proses kendine ait bir alana sahiptir. PGA da veri ve kontrol bilgileri barındırır(SGA'da olduğu gibi). Diğer bir deyişle sunucu işlemleri için veri ve kontrol bilgilerini içerir. Bir sunucu işlemi başladığı anda PGA da otomatik olarak başlamış demektir. Fiziksel olarak; bir kullanıcı ve onun uygulamaları için ayrılan bellek bölgesini tanımlar. Bu bölge temelde üç bölümden ibarettir. Bunlar;

  1. Stack Space(Yığın Uzayı): Her bir instance diğer deyişle oturuma ait değişkenleri (dizi v.b.) tutan kısımdır.
  2. Session Information(Bağlantı Bilgisi): Bağlantıya ait bilgiler... SGA'da da depolanabilir.
  3. Özel SQL Alanı: Farklı amaçla kullanılan değişkenlerin tutulduğu bölgedir.

...Daha fazla uzatmadan burada noktalayarak bir sonraki yazıda  kaldığımız yerden(1.2 Proses Birimleri) devam edeceğimi belirtmek isterim..

İyi çalışmalar...

Hiç yorum yok:

Yorum Gönder