24 Ağustos 2012 Cuma


                                              Oracle SGA and PGA Yapısı
Oracle database Instance memory şu bölümlerden oluşur.1)Program code
2)Bağlı olan session bilgileri
3)Program çalışması sırasında gerekli olan bilgiler(query sonucu fetch edilen data)
4)Processler arası iletişim ve paylaşılan bilgiler
5)Cachelenmiş data (data block redo logs)

Oracle database instance oluşturulduğunda belirli bir memory alanı bu instance için ayrılır.Bu memory alanı
şu bölümlerden oluşur.


Software Code Areas:Burada oracle database code ları saklanır.Bu alan staticdir.Sadece database software update veya reinstall durumunda değişir.Bu alan işletim sistemine bağlı olarak değişkenlik gösterir.Bu alan read-only dir.

System Global Area(SGA):Oracle database instance için gerekli olan control bilgileri ve bu instance için gerekli olan data tutulur.SGA bütün serverlar  ve background processler tarafından ortak olarak kullanılır.Instance başlatıldığında Oracle database otomatik olarak SGA alanını allocate eder.Instance kapatıldığında ise SGA deallocate edilir. Her instance kendi SGA alanına sahiptir.Bu alan database operasyonları sırasında read write işlemleri  için kullanılır.SGA genel olarak database ve instance bilgilerini içerir.Background processlerin ihtiyacı olan access bilgilerini içerir.SGA şunları içerir;

SQL> SHOW SGA  komutuyla SGA boyutunu görebiliriz.

1)Database Buffer Cache:Datafiledan okunan data blockların kopyası tutulur.Bütün kullanıcılar aynı anda bu alanı kullanır.

2)Redo Log Buffer: Bu alanda database içerisinde  yapılan değişiklikler tutulur.İhtiyaç duyulursa bu bilgiler recovery için kullanılabilinir.LGWR background process SGA daki redo logları disk üzerindeki aktif redo log dosyalarına yazar. log_buffer parametresi ile  bu alanın büyüklüğünü belirtir.

3)Shared Pool: Bu alan library cache, dictionary cache, result cache ve control yapılarını bulundurur.İşletilen sorgular için gerekli olan bilgiler bu alanda tutulur.Shared_pool_size parametresi ile bu alanın büyüklüğü belirlebir. Default olarak 32 bit sistemlerde 8MB 64 bit sistemlerde 64MB dır

alter system set shared_pool_size=64M;

4)Large Pool: Bu alan opsiyonel olarak memory alanına ek olarak oluşturulabilir.Veri yedekleme ve kurtarma, I/O işlemleri için oluşturulmuştur.large_pool_size parametresiyle  bu alanın boyutu belirlenir.

alter system set large_pool_size=64M

5)Java Pool: JVM ve sessionlara özel java kodlarını barındırmak için kullanılır.java_pool_size parametresiyle bu alanın boyutu belirlenir.

6)Stream Pool:Bu alan oracle stream leri tarafından kullanılır.Bu alan zero olarak set edilir. Oracle stream ler kullanılacağı zaman dinamik olarak size arttırılır.

SGA değeri yetmediği durumlarda;
1)Performans düşüşü
2)Out of memory hataları
3)I/O işlemlerin artması gibi problemler yaşanır.

Program Global Area(PGA):Burada server process leri için gerekli olan kontrol bilgileri ve data lar bulunur.Bu alan nonshareddir.Her server process için bir tane PGA vardır.Bütün PGA ların toplamı bize instance PGA size verir.Biz set ederken toplam PGA alanını set ederiz.Database ihtiyaca göre server process lere PGA dağıtır.

Not:Bu alan küçük verilirse bir noktadan sonra sessionların bağlntısında sorunlar yaşanabilir.

Bu alan genel olarak iki bölümde incelenir;


a)Session Memory:  Session değişkenlerini ve sessionla alakalı diğer bilgileri tutmak için kullanılır.

b)Private SQL Area: Sorgulama bilgileri, bind değişken gibi bilgileri bulundurur.Her sessiona ait bir private sql area oluşturulur.Her kullanıcı sql sorgularını  shared sql area yı kullanan kendi private sql area sına gönderir.Bütün private sql  area tek bir shared sql area ile ilişkilendirilmiştir.Private sql area nın konumu connectionnun tipine göre değişir.Session dedicated server yolu ile bağlanırsa private sql area PGA nın içinde shared server  ile bağlanırsa SGA nın içinde yer alır.