17 Şubat 2012 Cuma

Program Global Area (PGA) Nedir?


Daha önceki ilk makalemde,  Oracle'ın  kullanacağı bellek yapısını SGA(System Global Area) ve PGA (Program Global Area) olarak   iki bölüme ayırır demiştik. SGA ile ilgili genel bilgileri http://muhammetucar.blogspot.com/2011/08/sga.html  makalemizde vermiştik. Umarım yararlı olmuştur. Şimdi uzun bir aradan sonra PGA ile ilgili genel bilgileri paylaşmak istedim.
PGA,  Oracle kullanan her bir process (server process)için bellekte  reserve edilen alandır.Kullanıcı  tarafından gelen isteğe User proses,  user prosesi oracle serverde karşılayan process de server proces s ‘ dir.
Aşağıda bir veritabanı kullanıcısı tarafından  talep edilen bir sql cümlesini olduğunu düşünelim. Oracle Net yardımı ile Client tarafında oluşturulmuş bir  “User process1” olduğunu varsayalım.Gelen talep doğrultusunda server tarafında Listener(dinleyici) aşamasını geçtikten sonra  Oracle server tarafında  bir “Server process1” isimli process oluşacaktır.





Ve yazımızın başında demiştik ki, her server process için bir PGA alanı oluşacaktır. Ve bu server process için bellekte bir alan ayrılacaktır. Toplam PGA alanı ise her bir server process tarafından ayrılan alanların toplamıdır. Ve PGA_AGGREGATE_TARGET parametresi ile set edilebilir.Aşağıdaki resimde PGA alanı ve bileşenleri ve server process ile bağlantısı verilmiştir.

PGA yapısı:

PrivateSQL AREA:Bağlı olan tüm session(oturumların) bir SQL Work Area alanı vardır. SQL bind bilgisi burada yer alır.
Her bir Kullanıcı ağer aynı Sql cümlesini talep ederse bu cümleler için aynı paylaştırılmış (Shared SQL Area) alanı kullanacaklardır.
Private Sql Area nın yeri bağlantının şekline göre de değişir. İki şekilde oracle Server' a bağlanabilir. Shared Server ve Dedicated server şeklinde. Eğer shared server yöntemini kullanırsanız private sql area SGA içerisinde yer alacaktır. Bildiğimiz gibi SGA içinde shared pool and Large pool vardır. Eğer Large pool başlangıçta set edilmemişse(bir değer verilmemişse) o zaman Bu User Global Area dediğimiz kısım Shared Pool 'da mevki bulacaktır.Aksi takdirde Large pool 'u kullanacaktır.

Dedicated yapıda ise PGA içerisinde olacaktır.
Private SQL Area alanı Runtime(çalışma anında) Area ve Persistent(kalıcı) Area olarak iki şekilde bilgi tutulur. Runtime esnasında sorgu çalıştırma durumu bilgisi(Qurey sonucuna erişim bilgisi gibi vb. ) Buradaki bilgiler sorgu iptal edildiğinde yada sorgu sonucu fetch edildiğinde  silinir.
Diğer kalıcı bölüm ise,  bind variable değerlerinin kalıcı olarak saklandığı yerdir. imleç kapatıldığında bu alan serbest bırakılır. İmleç açıldığında bind variable değerleri tekrar yüklenir.



Memory AreaDedicated ServerShared Server
Nature of session memoryPrivateShared
Location of the persistent areaPGASGA
Location of part of the run-time area for SELECT statementsPGAPGA
Location of the run-time area for DML/DDL statementsPGAPGA
Source: Oracle

CURSOR(imleç): Oracle Sessionların talepleri için kullandığı işaretlerdir. Bir SQL sorgusu çalıştırıldığı zaman onun için bir cursor oluşturulur. Sorgu sonucunda dataların getirilmesi dataya bilgi gönderilmesi gibi önceliklerin ve işlemlerin yapılması işlemlerini Cursor sağlar. Yani siz bir işlem yaptırmak istiyorsanız bir imleç oluşturup  işlemlerinizi ona yaptırısınız.Derleme açısından bakıldığında imleçler önemli olduklarından imleç görüldüğü yerde işlemlerin öncelikli yapılması esastır.

SQL WORK AREA: 
         Birleştirme(hash-join) ve sıralama(order by, group by) komutları gibi işlemlr için ayrılmış büyük bir alandır. Örnek olarak istenilen sorgu sonucunda  bir sıralama talebi varsa , database buffer cahce ‘ den getirilen verileri sıralamak için bir alana ihtiyaç olacaktır.Ve bulan da “sort area” yada “Work area” olarak bilinir. Bir diğer örnek ise, birden fazla tabloyu join edeceğiz. Burada en büyük  tablo bu alana getirilir. Sonra diğerleri ve bu alanda da join işlemi yapılır. Bu  alanda yapılan işlem kadarcık mı diye düşünürseniz  önemli bir işlem daha yapılır. Bitmap indeks oluşturma ve birleştirme işlemleri için kullanılan önemli alandır. Datawarehouse sistemlerde sorgu performansını artırmak için b tree indeksler yerine Bitmap index kullanılır demiştik daha önceki makalelerimizde. Bakınız.(http://muhammetucar.blogspot.com/2012/01/oracle-indexes-2.html)

Sql Work Area alanının normal koşullarda yeterli büyüklükte alana sahiptir. Yeterli büyüklükte değilse sql için response time süresinin uzaması demektir. Bu da performansı negatif yönde etkiler.



0 yorum:

Yorum Gönder