Home / MAKALELER / Veri Tabanı / Oracle SGA Yapısı

Oracle SGA Yapısı

Fiziksel Yapı

Control file,data file ve redologlar database’in fiziksel yapısını oluşturmaktadırlar.

sqa

Memory Yapısı

SGA ve PGA dediğimiz yani sistem tarafı ve kullancı tarafını oluşturan memory yapısıdır.

SGA instance başlatıldığında oluşmaktadır.PGA ise Kullancı tarafından gelen User Prosesine karşılık oluşturlan Server Prosesi zamanında oluşma

SGA(System Global Area)

Bir tane Oracle Instance’ın ihtiyacı olan control ve veri bilgilerinin tutulduğu bellek alanıdır.Paylaşıma açıktır. Oracle Instance açıldığında açılır ve Instance kapatıldığında sisteme geri verilir. Her Instance’ın bir SGA sı vardır. Sisteme bağlanan kullanıcılar bu SGA’daki bilgiyi paylaşırlar. Optimum performans için SGA’nın oldukça büyük olması gerekir, tabi ana bellek boyutunu aşmamak kaydıyla. Böylelikle bellekte daha fazla veri tutulur, bud a disk okuma yazmasını azaltır. SGA’da ki bilgiler, veri tiplerine gore categorize edilmiş bir şekilde farklı altbellek yapılarında saklanır.

SGA’nın büyüklüğü SGA_MAX_SIZE ile belirlenebilir.

SQL > SHOW SGA;

Total System Global Area 36437964 bytes

Fixed Size 6543794 bytes

Variable Size 19521536 bytes

Database Buffers 16777216 bytes

Redo Buffers 73728 bytes

SGA’nın yapısını ise DB_CACHE_SIZE,LOG_BUFFER,SHARED_POOL_SIZE ve LARGE_POOL_SIZE oluşturmaktadır.

SHARED POOL

Shared Pool, Oracle’da SQL sorgularının ve PLSQL lerin çalıştırılmak için kullandığı bilgileri içermenin yanısıra sorguların ayrıştırılması ve sorgunun çalışması için ihtiyacı olan çalışma planının hazırlandığı yerdir. İşletilen sorgular bu alanda saklanır. Ayni sorgu tekrardan çalıştırılmak istendiğinde bu çalistirma plani dogrudan uygulanabilir. Büyüklüğü SHARED_POOL_SIZE parametresi ile belirlenir.Varsayılan olarak 32 bit sistemler için 8MB, 64 bit sistemler için 64MB’dır.

Paylasilmis SQL Alani, SGA içindeki Paylasilmis Havuz ‘un bir parçasidir.

Paylasilmis Havuz;

SQL ve PL/SQL deyimlerini

SQL ve PL/SQL deyimlerinin ayristirilmis hallerini

SQL ve PL/SQL deyimleri için çalistirma planlarini

veri sözlügü (data dictionary) önbellegini (cache) içerir.

SQL > ALTER SYSTEM SET SHARED_POOL_SIZE = 64M;

Burada dikkat edilmesi gerek ayarlanan bu büyüklük SGA nın büyüklüğünü etkileyeceği için asla toplam SGA değeri SGA_MAX_SIZE’ı aşmamalıdır.

LİBRARY CACHE

Library Cache Shared Pool’un bir parçasıdır.Sık kullanılan SQL ve PL/SQL cümlelerinin durduğu yerdir.

Yönetimi LRU(Last Recently Used) algoritmasına göre olmaktadır.

Shared SQL ve PL / SQL ifadelerini saklamaktadır.

DATA DİCTİONARY CACHE

“Data Dictionary” bilgileri Oracle tarafından çok sık kullanıldığından hafızada tutulması mantıklıdır.İşte bu bilgilerin hafıza da tutulduğu yere “dictionary cache” denir.Bu bilgiler bir de “library cache”‘te de tutulmaktadır.Her iki alana tüm kullanıcı işlemleri ulaşmaktadır.

Hem Library Cache hemde Dictionary Cache’in büyüklüğünü değiştirmek için SHARED_POOL_SIZE ile oynanmalıdır.

DATABASE BUFFER CACHE

Burada Datafile’dan okunan veriler tutulur. Kendi içerisinde mantıksal olarak ayrılmıştır. Database’ e bağlanıp işlem yapan kullanıcılar bu alanı kullanırlar. Burada gerçekleşen işlemlerin belirli bir sistematikte olması gerekmektedir. Buffer Cache’ te bunu sağlamak için Write List ve Last Recently Used(LRU) listeleri bulunur.

Write List : Üzerinde değişilik yapılmış fakat henüz Datafile’a yazılmamış tampon alanlar(dirty buffers)ın tutulduğu listedir.

LRU List : Free Buffers(Boş tampon alanları) ve henüz write list’ e gönderilmemiş dirty buffer bilgilerini tutar. Ayrıca o an işlem gören ‘pinned buffer’ alanlarını tutar.

“Write List” , “dirty buffer” olarak adlandırılan üzerinde değişiklik yapılmış ama diske(datafile’a) henüz yazılmamış tampon alanları tutar.LRU listesi ise boş tampon alanları (free buffers) ,henüz “write list”‘e gönderilmemiş “dirty buffer” alan bilgilerini ve “pinned buffer” denilen o an işlem gören alanları tutar.

Herhangi bir database kullanıcısının, veriyi okuma isteği olduğunda cache’e bakılır. Eğer veri buradaysa hafızadan direk okunur(cache hit). Eğer yoksa, veri ilgili data bloktan okunur(cache miss). Fakat bunun için evvela hafızada boş alan bulunması lazımdır. Bunun kontrolü için LRU list e bakılır.Arama yapılırken listedeki dirty buffer alanları write list’e alınır. Boş alan bulunduğu taktirde bu alan LRU list’in sonuna atılarak veri bu alanda okunur. Arama işlemi boş alanan bulunana kadar veya tanımlanan bir eşik değere ulaşıncaya kadar surer. Eşik değere ulaşıldığında eğer hala boş alan bulunamamışsa arama sonlandırılır ve DBW0, dirty buffer alanlarının diske yazılması için arka plan prosesine (background prosess) sinyal gönderir.

DB_BLOCK_SIZE parametresi ile blokların büyüklüğü hakkında bilgi edinebiliriz.

Bu parametre sonradan değişmemekte database oluşturulurken ayarlanmaktadır.

Bunun dışında,

DB_CACHE_SIZE = Default olarak cache’in buffer size’ını vermektedir.Sıfır verilmemelidir.

DB_KEEP_CACHE_SIZE = blokların default olarak ne kadar tutulacağını verir.

DB_RECYCLE_CACHE_SIZE = Kullanılamayn blokların boyutunu tutmaktadır.

parametreleri mevcuttur.

SQL > ALTER SYSTEM SET DB_CACHE_SIZE = 96M; ile büyüklük değiştirilebilmektedir.

REDOLOG BUFFER CACHE

Dml ve ddl sorgularından sonra oluşan değişikliklerin hafızada saklandığı alandır. İstenildiğinde bu değişikliklerin geri alınması ve ihtiyaç duyuldugu takdirde recovery işlemleri için kullanılır. Sıralı ve doldugunda başa dönecek şekilde bir yapısı vardir.

Bu alanda tutulan bilgiler “Log Writer Process(LGWR)” ile redo log dosyalarına yazılır.LOG_BUFFER parametresi redo log alanının büyüklüğünü belirler.Büyük değer alması I/O mailiyeti düşürür.

LARGE POOL

Veri yedekleme ve kurtarma, sunucu okuma yazma işlemleri, oturum belleği ve birden fazla veritabanı üzerinde çalışan hareketler(Oracle XA) gibi işlerde kullanmak üzere tahsis edilen opsiyonel bir alandır.

Fakat en önemli görevi database üzerinde yedekleme ve kurtarma operasyonlarına zemin oluşturmasıdır. Boyutu LARGE_POOL_SIZE parametresi ile belirlenir.

SQL > ALTER SYSTEM SET LARGE_POOL_SIZE = 64M;

Oracle üzerinde backup ve recovery operasyonlarında aktif olarak yer alan RMAN(Recovery Manager) Large Pool parametresi ile beraber BACKUP_DISK_IO= n ve BACKUP_TAPE_IO_SLAVE = TRUE parametreleri set edilebilir.

JAVA POOL

Java kodlarının veritabanı içerisinde anlamlandırılması için kullanılmaktadır.PL/SQL kodlarına benzer biçimde database içinde saklanmaktadır.Boyutu JAVA_POOL_SIZE ile belirlenmektedir.

About Yusuf Arslan

Sakarya Üniversitesi Bilgisayar Mühendisliği bölümünü bitirdikten sonra kariyerine Datawarehouse-Database Uzmanı olarak devam etmektedir Sitenin kurucusu ve yazarıdır. yusufarslanbm@gmail.com adresinden bana ulaşabilirsiniz.

İlginizi Çekebilir

SQL Server ile Veri Şifreleme

Bilgi teknolojilerinde verinin güvenliği çok kritik bir öneme sahiptir. Önemli verileri korumak için ekstra bir …

Bir Cevap Yazın