Oracle Database Server ‘ın çalısmasını saglayan ve disklerde yer alan data file dosyalarına erişimi saglayan bileşene INSTANCE denir.
Instance RAM üzerinde ki SGA ve çeşitli bakground processlerinden(arkaplan işlemleri) oluşur.
Oracle veritabanında instance RAM üzerinde belirli alanları kullanım için ayırır ve çeşitli background processlerini kullanarak veritabanının çalısmasını saglar.
Instance Oracle başlatıldıgı zaman ilgili makinenın RAM ’inden gerektigi kadarını alır,kapatıldıgı zaman da geri bırakır.
SYSTEM GLOBAL AREA(SGA)
Oracle veritabanının RAM üzerinde ki Shared Memory(Paylaşılan bellek) alanın da kendisine ayırıp kurdugu alanın adıdır.
Oracle Instance çalıştırıldıgı zaman ilgili makinenin Ram ‘inden daha önce Oracle init.ora dosyasında tanımlanan deger kadar bellek alır ,toplam SGA büyüklügü de “SGA_MAX_SIZE” degerini aşamaz.
Veritabanı kaldırıldıgında(başlatıldıgında) Oracle SGA ‘yı oluşturur ve kapandıgın da yok eder.
Yüksek performansın saglanabilmesi için SGA ‘nın olabildigince büyük olması gerekir çünkü SGA büyük olursa bu alanda daha fazla veri depolanabilir ve fiziksel diske erişim az oldugundan hız artışı saglamış oluruz.
NOT : SGA alanının büyüklügünü verirken işletim sisteminin ihtiyaç duyacagı bellege de dikkat etmeliyiz kaş yaparken göz çıkartmayalım :D.
Çalışmakta olan Oracle veritabanın da SGA bileşenlerini aşagıda ki view ‘den görebiliriz.
Select * from V$SGA_DYNAMIC_COMPONENTS ; |
SGA ‘nın büyüklügünü aşagıda ki komuttan ögrenebiliriz
Show SGA ; |
SGA bileşenlerini aşagıda ki şekilde sıralayabiliriz.
- Database Buffer Cache
- Log Buffer
- Shared Pool
- Large Pool
- Java Pool
DATABASE BUFFER CACHE(Veritabanı Tamponu)
Kullanıcılar DML(INSERT,UPDATE ..) işlemleri yaptıkları zaman oluşan degişiklikler dogrudan data file ‘lere yazılmazlar bunun yerine ilk olarak Database Buffer Cache ‘e yazılır.Aynı şekilde SELECT sorgusuyla veri okunacagı zaman da data file istenilen veri bulunur ve database buffer cache ‘e kopyalanır.Böylece bu verilere tekrar erişilmek istenirse RAM ‘e yerleşmiş oldukları için çok daha hızlı bir erişim gerçekleştirilir.
Peki database buffer cache ‘daki veri data file ‘e ne zaman yazılır buna Oracle ‘ın kendisi karar verir ancak COMMIT komutunu kullanırsak database buffer cache Deki veriler ,verilerin kalıcılıgı garanti altına almak için redo log dosyalarına yazar ve ondan sonra da Oracle uygun bir zamanda data file dosyalarına yazar.
Database buffer cache ‘in boyutu performans açısından çok önemlidir bu yüzden işletim sistemi ve Oracle Instance için gerekli bellegi ayırdıktan sonra database buffer cache için ne kadar yüksek bellek verirsek o kadar iyidir.
“DB_CACHE_SIZE” ile database buffer cache ‘in boyutunu ayarlayabiliriz.
Peki database buffer cache dolarsa ne olacak o zamanda database buffer cache ‘deki bazı veriler silinecek yeni veriler yazılacaktır.Hangi verilerin silinecegini kararını ise LRU(Least Recently Used) isminde bir algoritma karar vermektedir.Bu algoritma az kullanılan verileri siler ve yeni veriler ekler bu duruma “cache miss” denilir.
LOG BUFFER(Log Tamponu)
Çok sık aralıklarla verilerin giriş-çıkış yaptıkları bellek alanıdır.Bu alana yazılan veriler Örn.: bir tabloda degiştirilen bir satrın tamamı degil de sadece degişilen sütunların yeni hali yazılır zaten eski hali de UNDO tablolarına yazılır.
COMMIT komutunun çalıştırılmasından sonra ise LGWR(Log Writer) isimli bakground processi log bufferdaki veriyi redo log dosyalarına yazar.
NOT : LGWR log buffer daki verileri gerçek zamanlı olarak redo log dosyalarına yazar ve bu işlem tamamlanana kadar veritabanı askıda kalır ve yeni DML işlemi yapılmasına izin vermez.Bu sebeple log buffer’a fazla yer ayırmamalıyız kı bu işlem uzun sürmesin.
SHARED POOL(Paylaşılan Havuz)
Shared Pool dinamik bir SGA bileşenidir.”SHARED_POOL_SIZE” parametresinin degeri ayarlanarak boyutu degiştirilebilir.
Shared pool kendi içinde alt bileşenlere ayrılmaktadır ;
- Library Cache
- Data Dictionary Cache
- Result Cache
- User Global Area
Library Cache : Yakın geçmişte çalıştırılan SQL kodlarının derlenmiş ve sonuç vermeye hazır biçim de depolandıgı bellek alanıdır.
Data Dictionary Cache : En son erişilen nesnelerin tanımlarının depolandıgı bellek alanıdır.Yani Data dictionary ‘e ait olan objelerin bellekte tutulmasını saglar.
Result Cache : Bu alanın amacı SQL sorgusunun sonuçlarının ve PL/SQL fonksiyon sonuçlarının cach ‘lenmesini saglamaktır.Amaç tekrar çalıştırıldıgın da daha hızlı çalışması.
User Global Area : Oracle ‘ın shared sunucusu için gerekli baglantı bigilerini tutmaktadır.Large Pool ‘ada bellekten yer ayrılmamışsa large poolun görevlerini de yapar.
LARGE POOL(Geniş Havuz)
Veritabanı üzerinde çalıştırılacak büyük işlemler için bu bellek kullanılır.
Large pool içerisinde shared sunucular için baglantı bilgileri,I/O sunucu görevleri,RMAN için I/O slove bufferları,RAC ortamında çalışan parelel işlemler ve ASM ‘de otamatik olarak yönetilebilmektedir.
JAVA POOL(Java Havuz)
Veritabanına saklanmış olan java tabanlı prosodürlere sahip iseniz bu prosodürler java pool ‘u kullanır.Java pool sadece java prosodürler başlatılırken tanımlama bilgilerinin başlatılması için kullanılmaktadır.
PROGRAM GLOBAL AREA(PGA)
Oracle veritabanına baglanan her kullanıcı için sistem RAM’inden private area(paylaşılmayan alan) bir bellek ayırır bu alana PGA denilir.
Her bir oturumun veritabanından aldıgı ve veritabanına gönderdigi bilgiler o oturuma aittir.Bir kullanıcının diger kullanıcının oturumunda ki verileri görmesi mümkün degildir.PGA kendisi için gerekli bellegi kullanıcı processi başlatıldıgı zaman sistem RAM’inden alır,kullanıcı işlemi tamamlayınca da geri bırakır.
Oracle veritabanında PGA yapısının görüntülemek için aşagıda ki view ‘i kullanabiliriz.
Select * from V$PGASTAT order by value ; |
BACKGROUND PROCESSES(Arkaplan Prosesleri)
Oracle Instance başlatıldıgı andan kapatıldıgı ana kadar çalışmakta olan bir takım prosesler vardır,bunlar Oracle veritabanının işlevlerini yerine getirmesini saglmaktadır.Her bir proses belirli bir görevden sorumludur.(RAM yönetimini gerçekleştiren proseslerden,veritabanının yedegini alırken kullanılan prosesler vb.)
Oracle da yer alan arkaplan proseslerden bir kısmı mutlaka çalışması gerekirken bir kısmı opsiyoneldir ihtiyaç halinde çalıştırılır.
Zorunlu olan arkaplan prosesler ;
- DBWn
- LGWR
- CKPT
- PMON
- SMON
Opsiyonel olan arkaplan prosesleri ;
1) ARCn 11) FBDA
2) RECO 12) Qnnn
3) Dnnn 13) ASMB
4) Jnnn 14) RBAL
5) QMNn 15) MMAN
6) SNPn 16) MMON
7) CJQn 17) MMNL
8 ) DİAG 18) RVWR
9) DİA0 19) CTWR
10) EMNC
Bu arkaplan prosesleri UNIX,Linux gibi işletim sistemlerinde tek tek görebilmek mümkünken, Windows işletim sisteminde “oracle.exe” isimli sadece bir tane proses görebiliriz.Tek tek gözükmez ve veritabanı kapnırsa bu da kapanacaktır.
Arkaplanda çalışmakta olan işlemleri listelemek için aşagıda ki view’i kullanabiliriz ;
Select program from V$PROCESS order by program; |
Arkaplanda çalışmakta olan prosesleri ve açıklamalarını aşagıda ki view’dende görebiliriz.
Select * from V$BGPROCESS ; |
DATABASE WRITER(DBWn)-(Veritabanı Yazıcısı)
Bu prosesin amacı eklenen,silinen ya da degişiklik yapılan blokları buffer cacheden alarak ilgili veri dosyalarına yazmaktır.Biraz açacak olursak kullanıcılar veriler üzerinde degişiklik yaparlar ancak degişiklikler verilerin saklanmakta oldugu data file dosyalarına anında işlenmezler.Kullanıcıların gerçekleştirdikleri tüm degişikliklere ait degişim verileri(delta verisi) öncelikle SGA içinde yer alan log buffer alanına ve ardından LGWR işlemiyle online redo log dosyalarına yazılır.Daha sonra DBWn degişmiş olan verileri data file dosyalarına kaydeder.
DBWn prosesinin sonunda ki n harfi,birden çok Database Writer prosesinin aynı anda çalışabilecegini belirtir.Proses isimleri n yerine 1-9 veya a-j arası karakterler gelir .(Örn.:DBW2,DBWb vb.)Oracle Instance’i çalıştırdıgımız da varsayılan olarak DBW0 prosesi çalışmaktadır.Oracle “init.ora” dosyasında yer alan “DB_WRITER_PROCESSES” parametresi ile kaç adet DBWn çalışacagını belirleyebiliriz.
Buffer cache’de biriken degişmiş veriler DBWn prosesi tarafından datafile dosyalarına hemen yazılmadıgını söylemiştik,DBWn en az erişilen ve en son erişilme zamanın üzerinden en fazla geçmiş olan blokları datafile dosyalarına yazmaya çalışır.Bunun sebebi de sık erişilip sık sık degiştirilen verileri her seferinde data file dosyalarına yazmayarak performans artışı saglıyor olması.
DBWn prosesin çalısmasını tetikleyen bazı faktörler söz konusudur bunlar ;
- Öncelikle buffer cachede yeni verilerin yerleştirilecegi boş blok yoksa DBWn anında en az kullanılan bazı kirli(dirty) blokları yazmaya başlar.
- Veritabı kapanırken
- Bir zamanaşımı oluştugunda.
- Ya da sistem de FULL CHECKPOINT komutunu kullanılırsak anında DBWn tüm kirli(dirty) verileri data file’e yazar.
- Ya da sistemde parçalı checkpoint yapılırsa DBWn bazı kirli verileri datafile’e yazar.Parçalı checkpointi tetikleyen bazı faktörler.
- Bir tablespace BEGIN BACKUP komutuyla yedek moduna alındıgında.
- Bir tablespace READ ONLY moduna alındıgında.
- Bir tablespace veya ona baglı bir datafile dosyası offline moda alındıgında.
- Bir tablo düşürülürse(silinirse) veya TRUNCATE işlemi yapılırsa
LOG WRITER(LGWR)-(Log Yazıcısı)
LGWR prosesi log bufferda alanında yer alan verilerin disk üzerinde ki redo log dosyalarına yazılmasında sorumludur.Redo log dosyasına yazılan veriler,veritabanında verinin kalıcı olmasını temin ettikleri için LGWR önemli bir prosesdir.
LGWR aşagıda ki durumlarda tetiklenir ve yazma işlemine başlar ;
- COMMIT komutu çalıştırılır ise
- Log buffer üçte bir oranında dolar ise
- Her 3 saniyede bir
- 1 megabayt redo kaydı olmus ise
- DBWn datafile dosyalarına yazmaya başladıgı zaman
Anlık da olsan LGWR işlemini tamamlayıp görevini bitirene kadar Oracle veritabanı askıda kalacaktır.
CHECKPOINT(CKPT)-(Degişme Noktası)
Checkpoint prosesi Instance arızası durumunda Instance kurtarma süresini azaltmak için yardımcı olur.Checkpoint olayı gerçekleştigi zaman DBW prosesi buffer cachede ki verileri datafile ‘e yazar ve control file dosyasını günceller.Checkpoint olayı bir redolog geçişi sırasında tetiklenmekte ve çalışmaktadır.
Checkpoint yapmak için aşagıda ki komutda kullanılabilir ;
Alter system Checkpoint ; |
Full checkpoint çok zaman aldıgından istersek partiol checkpoint(parçalı checkpoint)’de yapabiliriz.Parçalı checkpointi tablespace’e,datafile ‘e uygulayabiliriz.
NOT : Checkpoint çok sık aralılarla meydana gelirse sürekli olarak diskte ki dosyalar güncellendiginden sistemde yavaşlama olabilir.Eger checkpoint olayı çok az aralıklar ile meydan gelirse de bu durum Instance arızası durumunda geri kurtarma işleminin süresini uzatacaktır.
SYSTEM MONITOR(SMON)-(Sistem Analizi)
Veritabanının NOMOUNT modunda başlamasının ardından OPEN modunda tam açıldıgı ana kadar gerçekleştirilmesi gereken denetim işlemlerini SMON prosesi yürütür.
Biraz açacak olursak Oracle ilk açıldıgında “init.ora” dosyasını okuyacaktır ve bu aşama veritabanının NOMOUNT modda oldugu aşamadır.Bunun ardından SMON controlfile dosyasına erişir ve burada ki bilgilerin geçerliligini denetler bu süreç başarıyla tamamlanırsa MOUNT moda geçer.Daha sonra ise SMON,veritabanına ait tüm datafile dosyalarının yerlerini kontrol eder yerlerinde olup olmadıklarına bakar,SMON bu denetlemeden sonra son olarak da redo log dosyalarının konumlarını ve içeriklerini kontrol eder.Tüm denetlemelerin başarıyla sonuçlanmasıyla birlikte veritabanı kullanıma açılır yani OPEN moda geçer.
NOT : SMON aynı zaman da Oracle ‘ın bir hata sonucu kapanması sonucunda açılırken devreye girer ve redo log dosyaları sayesinde recovery işlemini yapar.
SMON aynı zamanda kullanılmayan geçici parçaları(temporary segment) temizlemekte ve birleştirmektedir.
PROCESS MONITOR(PMON )-(İşlem Analizi)
PMON herhangi bir user(kullanıcı) prosesi bozuldugunda o prosesin kurtarılmasını saglamaktadır.PMON bozulan prosesin kullandıgı bellegi ve kaynakları temizlemekte ve proses tarafından tutulan kaynakları serbest bırakılmasından sorumludur.
PMON aynı zamanda dispatcher ve sunucu işlemlerini kontrol eder ve kapandıklarında yeniden çalıştırır/PMON periyodik olarak çalıştırılır ve uyarılır.
ARCHIVER(ARCn)-(Yedekleyici)
Bu proses Oracle Archive log modunda çalıştıgı zaman ,online redo log dosyalarının üzerine tekrar yazılmadan başka bir yere kopyalamasını yedeklemesini saglamaktadır.Çalışma mantıgına bakacak olursak veritabanımızda birden fazla redo log dosyası olacagından ilk redo log dosyamıza yazma işlemi bittiginde artık log bufferdan gelen veriler 2. Redo log dosyasına yazacak bu sıradada ARCn prosesi 1.redo log dosyasının kopyasını alacak ve bu şekilde veri güvenligi daha da güçlenmiş olacak.
NOT : ARCn prosesinin çalışması için veritabanının mutlaka Archive log modda olması gerekir.
NOT : Birden fazla ARCn prosesi aynı anda çalışabilir.
MEMORY MANAGER(MMAN)-(Bellek Yönetimi)
Oracle veritabanında arkaplan görevlerini yürütmekle yükümlü olan arkaplan prosesidir.Biraz açacak olursak Oracle 11g database server ile bellek yönetimi daha da gelişti,veritabanın kurulumu esnasında veya sonradan yapılandırmak suretiyle Oracle Instance tarafından kullanılabilecek en yüksek SGA ve PGA degerlerini bildirip ihtiyaca göre dagılım ve kullanım yönetimi yapılması işini tamamen Oracle’a bırakabilmekteyiz.İstersel Oracle Instance toplam kullanmasını istedigimiz RAM miktarını verip SGA ve PGA arasında ki dagılımı bile yönettirebiliriz.
MMAN aynı zamanda Oracle için ayrılan fakat kullanılmayan RAM bellegini ,işletim sistemine devreder ve ihtiyaç harinde geri alabilir.
MANAGEBILITY MONITOR(MMON)
Oracle veritabanının arka planda yürütmesi gereken bakım ve izleme görevlerini gerçekleştirmesinden sorumludur.Oracle MMON prosesini kullanarak kullanım istatistiklerini ,performans istatistiklerini ve otomatik bakım için gerekli bilgileri toplar
MMON işleminin görevi SGA bellek alanında bulunan kullanıma hazır ve bakıma yönelik istatiksel bilgileri her saat başında veritabanına yazmaktır.MMON tarafından SGA bellek alanından toplanan bu bilgiler data dictionary bölgesine yazılırlar.Varsayılan olarak 8 gün burada saklanılırlar.
MMON işlemi çalıştıgı her seferde,SGA bellek alanından istatiksel bilgiler toplamanın yanısıra,Oracle ADDM(Automatic Database Diagnostics Monitor) bileşinini de tetikleyerek çalışmasına sebep olur.ADDM çalıştıgı zaman data dictionary bölgesine en son yazılan istatiksel bilgileriyler bir önce ki seferde yazılmış olanları karşılaştırarak bir performans hesaplaması yapar.Gerekli görürse DBA için uyarılar oluşturabilir.
SPACE MANAGEMENT COORDINATOR(SMCO)(Alan Yönetim Koordinatörü)
SMCO arkaplan prosesi fiziksel disklerde yer alan ve Oracle’ın kullanmakta oldugu datafile dosyalarının boyut ve kapasite yönetiminden sorumludur.Oracle veritabanına yeni veriler eklendikçe datafile dosyalarının boyut olarak artması gerekecektir,benzer şekilde silinen verilerin daha önce kullanmış oldukları datafile içinde ki bloklarıda tekrar kullanılabilir hale getirir.
RECOVERER PROCESS(RECO)-(Geri Kurtarıcı)
Dagıtık veritabanında sistem ve ag hatalarından dolayı kaynaklanan problemler dolayısı ile beklemekte olan işlemleri düzenler.Uzak sunucuya baglanmakta sıkıntı yaşarsa artan aralıklarla yzak sunucuya baglanmayı dener.Belli aralıklarla yerel RECO uzakta ki veritabanına baglanıp yerelde ki dagıtık işlemlerle ilgili “COMMIT” ve “ROLLBACK” işlemlerini yapmaktadır.
JOB QUEUE PROCESSES(Jnnn)-(İş Kuyrugu İşlemleri)
Job Queue Processe atılan işlerin belirlenen zamanlarda çalışmasını saglar.İşlem sırasıyla aşagıda ki şekilde gerçekleşir.
- JOBS tablosundan zamanı gelmiş yapılacak işleri seçer.
- Dinamik olarak işleri yürüten bir köle iş kurugu(slave job queue) oluşturulur.
- Job Queue Process seçilen işlerden birini çalıştırır.(Senkron olarak)
- Seçilecek iş yoksa uyku moduna geçer ve daha sonra periyodik olarak “iş var mı” diye denetler.
QUEUE MONITOR PROCESSES(QMNn)
Gelişmiş kuyrukları denetler ve bir mesaj elverişli hale geldiginde bekleyeneleri haberdar ederler.Ayrıca kuyruk oluşturulmasından da sorumludur.
Yazar : Mustafa Bektaş Tepe
Java && Oracle