Tags
Dictionary cache, Oracle, Oracle Architecture, Oracle Bellek Yapısı, Program Global Area, System Global Area
Merhaba Arkadaşlar, Bu yazımızda Oracle veritabanı mimarisinde Memory yapısından bahsedeceğim.Oracle veri tabanı RDBMS ilişkisel veritabanıdır. İlişkisel veritabanı Primary ve Foreign key alanları ile tabloları ilişkilendiren veritabanlarıdır. Oracle’da verilerimizi saklayabileceğimiz iki veritabanı tipi vardır. OLTP(Online transaction processing) ve DWH(Data warehouse ).OLTP’de sürekli transaction(insert,update,delete) işlemleri yapılır. Küçük tablolar kullanılır. Tablolar arası ilişkiler çok fazladır.OLTP ye örnek olarak ATM sistemlerini gösterebiliriz.DWH ‘da raporlama üzerine kuruludur.Neredeyse Transaction yapılmaz.Büyük tablolar kullanılır(Daha çok sorgu yapıldığı için) .Oracle veritabanı mimarisi üç yapıdan oluşur. Bellek yapısı(Memory), İşlemler(Processes) ve Depolama yapısı(Storage).
Bellek(Memory) Yapısı
En sık erişilen veriler disk yerine bellekten getirilir.Sistemin bu şekilde çalışması performans için önemlidir. Oracle veritabanı bellek yapısı iki alandan oluşur.Sistem Global Alanı(System Global Area) ve Program Global Alanı(Program Global Area).
1-System Global Area
SGA paylaşılmış bellek alanı olarak bilinir(Shared Memory Area).Veritabanına bağlanan tüm sessionlar SGA alanını kullanırlar. Server ve arka plan işlemleri (Background Processes) SGA alanı içinde yer almaz. Her veritabanının kendine ait bir SGA alanı vardır.Bu alan Oracle veritabanı tarafından sunucumuzdaki fiziksel bellek üzerinden tahsis edilir(allocate).Bu alan veritabanı kapatılıncaya kadar başka işlemler için kullanılamaz.Veri Tabanı Açılırken SGA alanınn büyüklüğünü “Total System Global Area” olarak ekranda görebilirsiniz. Bu alanlar Veritabanı kurulurken 3 farklı şekilde ayarlanabilir.Bunlar: Automatic memory management,Automatic Shared memory management ve Manual memory management.
A-Database Buffer Cache
Kullanıcılar tarafından sık kullanılan veri blokları bu alanda tutulur.Bu alanın önemi ortak kullanılan veritabanlarında bir kullanıcının sorgusu eğer başka kullanıcı tarafından ‘da sorgulanmışsa bu alanda yer alacağından veriye erişim daha hızlı olur.O yüzde Database Buffer Cache “Tampon Bölge” olarakta adlandırılır.Veritabanında yapılan DML(Update,Delete,Insert) işlemlerinde değişen veri blokları ilk önce bu alana yazılır(Dirty Blocks).Check Point işlemi yapılmadan ve Cache dolmadığı sürece Database Buffer Cache alanı diske yazılmaz. Diskdeki Data filelara yazma işlemini Database writer(DBW) arka plan işlemi gerçekleştirir.
B-Redo Log Buffer
Veritabanı üzerinde yapılan Select harici(transaction) bütün işlemlerin bilgisi bu alanda tutulur.Bu tampon bölgede tutulan bilgiler Log writer(LGWR) arka plan işlemi ile disk üzerindeki Online redo log dosyalarına yazılır. Veritabanında gerçekleştirilen her Transaction bu alanda saklanır.
C-Shared Pool
Paylaşılmış SQL alanı,Oracle ‘ın özel SQL deyimlerini çalıştırmak için kullandığı bilgileri içerir.Parse edilen Sql ifadeleri,Sql çalışma(execution) planları,derlenmiş PL/SQL kodlarının bulunduğu alandır.
Shared Pool Alt Bileşenleri;Library Cache,Data Dictionary Cache,Server Result Cache dir.
a-Library Cache
Library Cache Shared Pool’un bir parçasıdır.Parse edilmiş unique Sql cümlelerini,Sql çalışma planlarını,derlenmiş PL/SQL kodları bu alanda saklanır.Oracle Veritabanında çalıştırılan bir Sql sorgusu daha önce kullanılıp kullanılmadığı Library Cache alanında kontrol edilir(iki kodun bire bir aynı olması şartıyla). Eğer daha önceden kullanışmışsa yani Library Cache içinde SQL shared area alanında bulunuyorsa bu kod kullanılır.Daha önceden kullanılmayan bir sorgu ise bu sorgu parse edilir ve çalışma planı Library Cache alanına kaydedilir.Library Cache alanı dolduğunda kullanılmayan eski Sql kodlarının yerine yeni parse edilenler eklenir.
b-Data Dictionary Cache
Veritabanımızdaki objeler hakkında detaylı bilginin tutulduğu yerdir.Tabloların kolonlar,tabloya kimlerin erişebileceği gibi bilgiler bu alanda bulunur.Örneğin, Sqlplus hr/hr gibi veritabanına bağlantı yapmaya çalıştığımızda böyle bir kullanıcı var mı? yada bir Sql komutu çalıştırıldığında kullanıcının yetkisi var mı? gibi kontroller bu alanda yapılır.
c-Server Result Cache
Veritabanımızda çalıştırdığımız sorguların sonuçları bu alanda saklanır.Çok kullanılan bir hesaplama sorgusu sürekli hesaplanmak yerine buradan sürekli çağrılır.Yalnız bir transaction işlemi yapıldığında bu sonuç değeri iptal olur ve yeni hesaplama yapılarak tekrar kaydedilir.Sorgularımızda RESULT_CACHE kullanarak sorgumuzun Server Result Cache alanında saklanmasını sağlayabiliriz.
D-Large Pool
Yedekleme mekanizması varsa bu alan önemlidir.Backup alma,export/import,paralel SQL sorguları çalıştırmak için kullanılır.
E-Java Pool
Oracle veritabanında java kodlarımızı direk derleyebiliriz.Veri tabanımızda çalışan java kodlarımız varsa, en sık kullanılan java kodları bu bellek alanında saklanır.
F-Streams Pool
Oracle Streams tarafından kullanılan ve kuyruk mesajlarının kaydedildiği alandır.
2-Program Global Area
PGA diye adlandırdığımız bu bölüm private olarak bilinir,paylaşılmamış bellek alanıdır.Bir server process başlatıldığı zaman,server fiziksel belleğinden PGA bellek alanı tahsis edilir.Bu işlem bitene kadar bellek kullanılır,işlem bittikten sonra bellek geri bırakılır.Her server processin ve background processin kendine ait PGA alanı vardır.PGA bileşenlerinden Private SQL Area bir Sql sorgusu çalıştığında değişken değerlerini,durum bilgisini,sorgu çalışma alanlarını vs. bilgisini tutar.Yoğun bellek işlemleri için PGA bileşenlerinden Sql Work Alanı kullanılır.Oturuma özel değişkenlerin tutulduğu alan Session Memory.
Arkadaşlar bu yazımızda SGA ve PGA alanlarını anlatmaya çalıştık. Sonraki yazımızda Process Yapısını anlatacağız.