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.
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.
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 Area | Dedicated Server | Shared Server |
---|---|---|
Nature of session memory | Private | Shared |
Location of the persistent area | PGA | SGA |
Location of part of the run-time area for SELECT statements | PGA | PGA |
Location of the run-time area for DML/DDL statements | PGA | PGA |
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)
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