3 – Oracle Bellek Mimarisi

Oracle Eğitimleri - Oracle Bellek Mimarisi

Bu bölümde Oracle’ın üç ana bellek yapısına göz atacağız: SGA, PGA ve UGA.

Oracle Bellek Mimarisi
Oracle Bellek Mimarisi

Resim Kaynak: YILDIRIM, Ö. (2011) Oracle Database Mimarisi http://4.bp.blogspot.com/-PaPui9Z1x_8/TeiNvK1t4oI/AAAAAAAAABA/ovIE3F3GjPg/s1600/s2_oracle_db_memory_architecture.png

PGA ve UGA

PGA (Process Global Area), Process için özel bir bellek alanıdır. Daha önce açıkladığımız gibi Oracle her bir client için bir process (Windows işletim sisteminde thread) açmaktadır. Her bir process’in işlemi içinde ayrılan bir bellek alanı vardır ve bu diğer process’ler tarafından erişilemezdir. Bu bellek tahsisi işlemi C’deki malloc() veya memmap() fonksiyonları ile yapılmaktadır. SGA (System Global Area)’de bellek instance başladığı anda tahsis ediliyorken, PGA ancak bir talep durumunda tahsis edilir.

UGA (User Global Area) ise Oracle instance oturum açtığınız an oluşturulur. Session’lar bu bellek ile yönetilirler. Eğer Shared Server bağlantı kullanılıyorsa, session’ların bir yerde saklanması mecburidir, ancak bu şekilde talepler bir sıraya sokulabilir ve yetkisi var mı yok mu bu şekilde anlaşılabilir. Eğer Dedicated Server bağlantı kullanılıyorsa session UGA’de tutulur, UGA session aynı zamanda PGA üzerinde tutulur, çünkü tamamen yalıtılmış ve kişiye özel bir process söz konusudur.

PGA bellek, genellikle sort, bitmap merge ve hash işlemleri için kullanılır. PGA iki şekilde yönetilebilir, manuel veya otomatik. Otomatik PGA yönetimi için iki parametre set etmemiz gerekiyor:

  • PGA_AGGREGATE_TARGET parametresi ile PGA tahsisi başladığı anda kullanabileceği bellek değeri set edilir.
  • MEMORY_TARGET parametresi ile SGA ve PGA için toplam ayrılacak bellek miktarı set edilir. Bu değere göre database PGA için ayrılacak değeri kendisi konfigüre eder.

Varsayılan olarak PGA yönetimi otomatik moddadır; ama manuel de yapmak mümkündür.

SGA

Her Oracle instance, SGA (System Global Area) olarak isimlendirilen büyük bir belleğe sahiptir. Tüm Oracle proces’ler bilgiyi SGA üzerinden alır, bu yüzden oldukça büyük bir bellek alanından bahsediyoruz.

SGA çeşitli havuzlara (pool) bölünmüştür. Şimdi önemlilerini görelim:

  • Java Pool: JVM (Java Virtual Machine) için ayrılan belleği sabit tutar.
  • Large Pool: Shared server bağlantılarda session belleğini tutar, buffer’da paralel execution işlemleri için mesajlaşma işleminde kullanılır ve RMAN’in backup işleminde disk I/O’su için de buffer olarak kullanılır.
  • Shared Pool: Cursor’lar, stored procedure’ler, state objeler, dictionary cache ve birçok veri biti üzerinde tutulur.
  • Streams Pool: Data Sharing tool tarafından kulanılan özel bir havuzdur.
  • The “Null” Pool: Gerçek bir adı yoktur. Database block buffer cache, redo log buffer ve SGA sabit alanı için kullanılır.
SGA Mimarisi
SGA Mimarisi

Resim Kaynak: YILDIRIM, Ö. (2011) Oracle Database Mimarisi http://4.bp.blogspot.com/-PaPui9Z1x_8/TeiNvK1t4oI/AAAAAAAAABA/ovIE3F3GjPg/s1600/s2_oracle_db_memory_architecture.png

SGA boyutuna etki eden parametreler şöyledir:

  • JAVA_POOL_SIZE: Java Pool boyutunu belirler.
  • SHARED_POOL_SIZE: Shared Pool boyutunu belirler.
  • LARGE_POOL_SIZE: Large Pool boyutunu belirler.
  • DB_*_CACHE_SIZE: Bu cache_size parametresinde 8 farklı buffer cache kontrolü mümkündür.
  • LOG_BUFFER: Redo Log buffer’ı bir noktaya kadar kontrol altında tutar.
  • SGA_TARGET: Otomatik SGA bellek yönetimi için kullanılır. Oracle 10g ve üzerinde vardır.
  • SGA_MAX_SIZE: Database çalıştığında SGA için en yüksek kullanabileceği bellek değerini belirler.
  • MEMORY_TARGET: PGA ve SGA’in otomatik bellek yönetimi için kullanılır.
  • MEMORY_MAX_SIZE: Otomatik bellek yönetiminin en yüksek değerini belirlemek için kullanılır. SGA_MAX_SIZE belirlenmişse buradaki değere göre kalan kısmı PGA için ayrılır.

Redo Log Buffer

Redo buffer, Online Redo Log dosyalarının diske yazılmadan önce cache’lendiği yerdir. Bellekten belleğe aktarım, bellekten diske aktarımdan daha hızlı olduğu için database operasyonları burada tutulur. Veriler uzun süre buffer’da tutulmazlar. LGWR belirli aralıklarla belirli bir datayı alıp diske işler. Bu yüzden log dosyaları çok yüksek transaction’lar gerçekleşmiyorsa kolay kolay dolmayacaktır.

Block Buffer Cache

Oracle, verileri diske yazmadan ve diskten veri okuduktan sonra veri block’larını burada saklar. Bu yüzden bizim için oldukça önemli bir alandır. Eğer bu alan çok küçük olursa büyük boyutlu data istediğimizde sorgumuz asla sonlanmayacaktır, çünkü bellekte gerekli alanı grant edemeyecektir.

Shared Pool

Shared Pool özellikle performans ve ölçeklenebilirlik açısından oldukça kritik öneme sahiptir. Küçük bir shared pool sistemi işlemez hale getirebilir. Çok fazla büyük bir shared pool’da aynı etkiyi yaratabilir. Kısacası doğru kullanılmadığı taktirde çok ciddi sıkıntılara yol açacaktır.

Shared Pool’da aslında ne yapılıyor diye sorarsak, sorguların sonucunda dönen dataların block’ları burada saklanmaktadır.  Bir execution plan da burada saklanır. Bir sorgu yazıp gönderdiğiniz zaman parse işleminde yol hesabına kadar tüm plan burada saklanarak sonraki benzer sorgular için de aynı yol kullanılır, tabii istatistiklerin bu planı değiştirdiğini ve sık sık yenilenmek zorunda olduğunu unutmamak lazım!

Execution plan çıkarma işleminde optimizasyon sağlaması için sorgulamalar esnasında koşulların parametrelerle girilmesinin sabit bir veri girilmesinden daha uygun olduğu ortaya çıkmıştır. Çünkü yol hesabı yapılırken parametrenin içeriğinden ziyade sql cümleciğine göre yol hesabı yapılıyor, yeni bir sql işletildiğinde aynı syntax (söz dizimi) var ise yeniden execution planlar çıkartılmıyor, mevcut olanı kullanılıyor. Bu da performans için oldukça önemli bir artı sağlıyor.

Large Pool

Large Pool aslında adı kadar büyük değildir. Shared Pool üzerinde gerçekleştirilen işlemler esnasında yeterince büyük memory yoksa Large Pool’dan faydalanılır, bunun için adı large olarak konmuştur.

Shared Pool üzerinde büyük boyutlu bir işlem gerçekleşirse o zaman Large Pool’da malloc() fonksiyonu ile yeni bellek alanı tahsis edilir, tahsis işleminden sonra işlem biterse free() fonksiyonu ile de bellek temizlenir ve yeniden kullanım için hazır halde tutulur.

Large Pool’un kullanıldığı spesifik işlemler ise şöyledir:

  • Shared Server bağlantı sağlandığında SGA ve UGA bölgelerini birbirinden ayırır.
  • Paralel sorgular yürütülürken aradaki mesajlaşma ve koordinasyonu sağlar.
  • RMAN tarafından backup yapılırken disk I/O buffer olarak kullanılır.

Java Pool

Oracle üzerinde Java kodlarının işletilmesini sağlayan havuzdur. Havuz içerisinde Java kodları yığın mantığı ile çalışmaktadır. JAVA_POOL_SIZE parametresi ile tahsis edilecek bellek miktarı ayarlanabilmektedir.

Oracle, dedicated server bağlantı modunda ise Java Pool, session başına paylaşına java class’ları belleğe yüklemektedir. Bunlar genellikle 4 ve 8 KB class’lar halinde yüklenirler. Session bilgileri bildiğini gibi normalde UGA üzerinde saklanmaktadır; ama dedicated server bağlantıda UGA, PGA üzerinde tutulmaktadır. Yüklenen classlar ise SGA üzerinde tutulacaktır.

Streams Pool

İlk defa Oracle 10g ile gelen yeni bir özelliktir. Oracle Data Sharing Tool ile veri replikasyon işlemlerini gerçekleştirmek için kullanılmaktadır. Dataların taşınması esnasında mesajlaşma ve koordinasyon işlemleri için bilgiler bu havuzda tutulurlar. Stream edilen datalar bellekte kuyruklanırlar yani yığın yapısı halinde data stream edilir. Burada özellikle disk yavaşlıklarının önüne geçmek için bellekten faydalanmak söz konusudur.

0
0

Patreon

üzerinden bize destek olabilirsiniz!

.

Birlikten kuvvet doğar! Sizde #patreon üzerinden bizim yanımızda olabilirsiniz. Yaptığımız gönüllü çalışmaları arttırmak için bize destek olun.

Ücretli ve Ücretsiz Eğitimler

Türkiye'nin en büyük veri bilimi topluluğu ile kariyerinizi inşa edin.

Data Science Earth

Data Science Earth ekibi, üst düzey Veri Bilim çözümleri üretmek amacı ile toplanmış akademisyenler ve uzmanlardan oluşmaktadır. Öncelikli olarak veri bilincini geliştirmeyi ve küreselleşen rekabet ortamında verinin gücünün doğru kullanılmasını sağlamayı amaçlamaktadır.

Sponsor

QuestionPro 35 farklı soru seçim özelliği ile anket çalışmalarımıza güç katmaktadır.