4 Ağustos 2011 Perşembe

System Global Area (SGA) Nedir?

System Global Area denilen veritabanımızın Instance' da yer alan ve içinde shared Pool, large Pool, Database Buffer Cache, Java Pool, Stream Pool ve database ile bu yapılarla arka planda faaliyet gösteren SMON, PMON, CKPT,DBWRn, LGWR gibi back ground proces' lerden oluşan Memory' deki ayrılmış bölgedir.



Database Instance iki bölümden oluşur. Birisi SGA, diğeri ise PGA(program global area). PGA konusuna ayrı bir konu alarak ele alacağımdan şimdilik SGA ile ilgili bilgiler vermek istiyorum. Database Instance'nın Memory'e yüklenmesi Veritabanının çalışmasındaki ilk safhadır.Yani Database ilk açılışında başlangıç parametrelerine göre açılacaktır. Ve bu açılışta bu değerler memory' de instance oluşturacaktır.

Önemli sayacağımız konulardan bir tanesi de SGA' nın yönetimidir. SGA_TARGET initilization parametresine verilen değerle SGA' nin Memory de ne kadar yer allocate(ayrılacağını) edeceğini belirlemiş oluruz. Örneğin SGA_TARGET=2G dersek memory'de 2GB lik bir hafızayı SGA ve bileşenleri için ayırmış olacağız. Diğer bir husus, SGA bileşenleri nasıl yönetilecek? otomatik mi yoksa manuel mi? yani Large Pool yada shared Pool un memorydeki boyutu nasıl olacak. işte buna bizim karar vermemiz gerekiyor.Automatic Shared Memory Management (ASMM) şayet SGA için aktif edilirse SGA_TARGET parametresine bir değer verilir. SGA bileşenleri database çalışma esnasında ihtiyaca göre paylaşımlı olarak bu değeri kullanırlar.Direct I/O işlemleri ve Backup işlemi belleğin Large Pool bileşeninde gerçekleşeceğinden işlemin daha hızlı gerçekleşmesi için daha fazla belleğe ihtiyaç duyacağından diğer bileşenlerde daha az işlem yapılıyorsa o bileşenlerden belleğin bir kısmı alınıp large pool' a o anlık dahil edilir.
SGA_TARGET parametresini 2GB vermişsek ve ASMM enabled ise de SGA bileşenlerini sorguladığımızda şayet bu bileşenler için bir alt değer set etmemişsek, değerleri 0 sıfır görülecektir.
Temel olarak SGA bileşenlerini inceleyecek olursak;
Shared Pool:içerisinde Library cache,Data dictionary cache vardır.
Library Cache, SQL statementlerin Execution planları ve yol haritaları bulunur.Execution planlar, optimizer tarafından toplanan istatistiklere göre oluşturulur. Sorgu sonucunun daha hızlı çalışması için kullanılır.Database performansını ciddi ölçüde etkiler.
Data Dictionary cache ise o anda alınan SQL statement için yetki, rol, erişim izni, hangi indexi kullanacak gibi dataların kontrol edildiği yerdir.
Bu bileşenin bellek miktarını SHARED_POOL_SIZE parametresiyle belli edebiliriz.
Database Buffer Cache: çalışacak SQL statement yada statementler şayet bu bellek bloklarında yok ise datafile de okunarak buraya getirilerek çalıştırılır. İçerisinde SQL statementlerinin çalıştırılma sıklığına göre takip eden bir LRU algoritması vardır. İsteğe görede SQL statementini sakla diyebilirsiniz.DB_BUFFER_CACHE_SIZE parametresiyle bellek alanı verebiliriz yada öğrenebiliriz.
Java Pool : java paketlerini bulundurur. JAVA_POOL_SIZE parametresi ile değer verebiliriz yada öğrenebiliriz.
Large Pool : I/O işlemlerinin , Backup-Recovery işlemlerinin, direct read-write işlemlerinin yapıldığı bileşendir. Örneğin elimizde çok büyük bir datanın güncellenmesi gerekiyor. Ve bu dataya baktığımızda buffer cache deki boş alandan daha fazla bir boyuta sahipse yapılan işlemler buffer cache değil, Large pool da yapılır. yani datafile direkt erişim sağlanır.
LARGE_POOL_SIZE parametresi ile bellek boyutunu öğrenebiliriz. yada belirli bir değer set edebiliriz.
Redo Log buffer cache: database de yapılan tüm değişiklikler redo log bufferda tutulur. örneğin siz bir insert işlemi yaptınız. yapılan değişiklik redolog buffer cache de tutulur. LGWR processini tetikleyen bir olay olduğunda redolog bufferi kalıcı olarak redolog dosyalarına yazılır ve redolog buffercache boşaltılır, yeni değişiklikleri yazmaya tekrar başlar.
Redo loglar database de bir recovery işleminde gerekli olan dosyalardır. Database' deki önemli olmazsa olmaz 3 dosyadan birisidir.
Stream Pool: ise streaming işlemleri için yani lokalde yada lokal dışındaki başka bir yere database replikasyonu esnasında data gönderme/alma işleminde kullanılan bileşendir.

Makaleme başlarken ilk başta database mimarisi ile ilgili temel kavramların tanıtılmasını ve anlaşılmasının iyi olacağını kanaatindeyim.Fazlada ayrıntıya girmeden temel düzeyde bırakmak istedim. Umarım yararlı olmuştur.


0 yorum:

Yorum Gönder