12 Şubat 2008 Salı

SGA & PGA

PGA, yani Program Global Area ya da Process Global Area bir çeşit memory'dir ve Oracle'a her bağlanan kullanıcıya bir miktar ayrılır (varsayılan 5M). Data ve control bilgilerini tutar.
"pga_aggregate_target" parametresi ile dinamik olarak(veritabanı spfile ile başlatıldıysa) ayarlanabilir. PGA düşük verilirse, veritabanına yeni sessionların bağlanması sıkıntı yaratabilir.


SGA, yani System(Shared) Global Area. Oracle instance'ının veri ve kontrol bilgilerini tutan memory gruplarından oluşur. SGA'in bileşenleri ise,
1) Buffer cache (db_cache_size)
2) Redo Log buffer (log_buffer)
3) Shared pool (shared_pool_size)
4) Java pool (java_pool_size)
5) Streams pool (streams_pool_size)
6) Large pool (large_pool_size)


SGA değerlerinin az atanması sonucu oluşabilecek durumlar;
1) I/O'ların artması,
2) Performansın düşmesi,
3) Out of memory hataları.


SGA değerlerinin çok atanması sonucu oluşabilecek durumlar;
1) RAM'in kaybı,
2) Kötü ayarlanması.


Buffer Cache: Bu yapı, Oracle'ın değiştirilen query'lerinin tutulduğu alandır. İçerisinde transactionlar sonucu fiziksel veri dosyalarından (datafile) alınan bilgileri tutar. Oracle bir query'i ilk defa çalıştırdığında bu bir "Physical I/O"'dur. Bu veri, buffer cache'de saklanır. Sonra ki sorguda bu alandan getirilir ve bir "Logical I/O" olur. Kesinlikle çok daha hızlıdır. Buffer cache'in miktarının çok olması saklanan verilerin artmasına ve fiziksel okuma boyutunun düşmesine sebep olabilir. Dolayısıyla performans artabilir. Veritabanı üzerine yapılan güncellemeler buffer cache'de "Dirty buffer" olarak saklanır. Zamanı geldiği zamanda fiziksel dosyaları yazılır. Commit edilmesi buffer cache'deki verileri datafile'lara yazmaz ! Veritabanı açıldığı ve çalıştığı zamanlarda bu alanları kontrol eden background processler vardır (Bknz. SMON, DBWR,CKPT). Bu değer genelde yüksek tutulmaya çalışılır.
Redo Log Buffer: Bu yapı veritabanı üzerinde olan her değişikliği saklar ve en geç üç saniyede bir "Online Redo Log" dosyalarına yazar. Genelde 5-12 M arası bir değer alır. Yüksek ya da düşük olması bekleme olaylarının oluşmasına sebep olabilir.
Shared Pool: SQL ve PL/SQL kodlarının çalışma planlarının oluşturulduğu alandır (Bknz. Bind Variable, Cursor Sharing). Oracle veritabanın ve kullanıcının bütün çalışma planlarının parse edildiği yerdir.
Java Pool: Java procedure'lerinin kullanıldığı alandır. Oracle üzerinde herhangi bir java kodu çalıştırılıyor ise bu memory belirli bir miktarda set edilmelidir.
Streams Pool: Bu alan Oracle'ın streams component'leri içindir. Eğer set edilmezse ve kullanılıyorsa Shared Pool'un %10'u kadar değer alır.
Large Pool: I/O server processleri ve backup/restore operasyonları için ayrılmış alandır (RMAN operasyonları gibi).
Oracle bu değerleri çoğu zaman veritabanı yöneticisinin ayarlamasını beklemez. Aslında bu değerleri dinamik olarak ayarlayacak bir yapıya sahiptir.
SGA_MAX_SIZE: Oracle'ın startup komutu verildiği zaman işletim sisteminden alacağı toplam RAM'i gösterir. Bu RAM'in yetmediği durumlarda Oracle daha fazla RAM alabilir. Eğer LOCK_SGA parametresi TRUE olarak set edildi ise daha fazla RAM alamaz!
SGA_TARGET: Bu parametreki değeri SGA_MAX_SIZE parametresi ile aynı değerde set edersek, Oracle SGA'in componentlerinin otomatik olarak o anki kullanıma göre set edilmesine sağlar. Ve DBA olarak müdahale edilecek durumların azalmasını sağlar. Yoğunlukla kullanılan bir yapıdır. Sonuç olarak DBA'in sürekli bu parametreleri takip etme gibi bir sanşı olmayabilir. SGA_TARGET tanımlanmışken SGA'in bileşenleri 0 dışında bir değere ayarlanmışsa, Oracle o değerden daha düşük ayarlamaz.


SGA ve PGA değerlerinin ilk olarak atanması üzerine çalışmak gerekebilir. 32 bit sistemlerde SGA değerini 1.7G üzerine çıkarmak mümkün değildir. Fakat bir takım ayarlardan sonra bu değer çok ufakda olsa arttırılabilir. 64 bit sistemlerde ise sınırlama yoktur.
SGA ve PGA değerlerinin Oracle tarafından tavsiye edildiği X$, yani sys.v_$, yani v$ viewları ise şunlardır:
v$pgastat, v$pga_target_advice, v$pga_target_advice_histogram.
v$sga, v$sgastat, v$sgainfo, v$sga_dynamic_components, v$sga_target_advice.


İyi çalışmalar,


Ogan

2 yorum:

Adsız dedi ki...

çok güzel bir anlatım olmuş. elinize sağlık

Aykut Alp Erol dedi ki...

güzel paylaşım

Takip et: @oganozdogan