20 Aralık 2010 Pazartesi

Oracle İşlemleri (Process)

Merhabalar,


Bir Oracle instance'ını yönetmek için birçok arkaplan işlemi bulunmaktadır (background process). 5 tane işlem bir Oracle instance'ı için zorunludur ve diğerleri opsiyoneldir. Opsiyonel olan arkaplan işlemleri, veritabanı üzerinde kullanılan özelliklere göre değişiklik göstermektedir.


Olmazsa olmaz işlemler;


1) DBWn
2) LGWR
3) CKPT
4) PMON
5) SMON


Olmasa da olabilecek, opsiyonel işlemler;


1) ARCn
2) RECO
3) ASMB
4) RBAL
5) CJQn
6) Jnnn
7) QMNn
8) DIAG
9) DIA0
10) EMNC
11) FBDA
12) Qnnn
13) Dnnn
14) Snnn
15) MMAN
16) MMON
17) MMNL
18) RVWR
19) CTWR


Bir instance için koşturulan bütün arkaplan işlemlerini *nix sistemler üzerinden ps -ef komutu ile görebiliyorsunuz ve buna ek olarak Oracle'dan da V$BGPROCESS görüntüsünden de inceleme şansınız var.


SQL> SELECT name, description
2 FROM V$BGPROCESS;



NAME  DESCRIPTION
----- ----------------------------------------------------------------
PMON  process cleanup
DIAG  diagnosibility process
FMON  File Mapping Monitor Process
PSP0  process spawner 0
LMON  global enqueue service monitor
LMD0  global enqueue service daemon 0
LMS0  global cache service process 0
LMS1  global cache service process 1
....
....

Bir instance için zorunlu olan arkaplan görevlerinin detayları ile devam edecek olursak;

1) Database Writer (DBWn)

DBWn'nin amacı dirty buffer içerisinde bulunan içeriğin fiziksel veri dosyalarına yazılmasını sağlamaktır. Varsayılan olarak Oracle yalnız 1 tane database writer işlemi çalıştırır. Bu sayıyı arttırmak elimizdedir ve 20'ye kadar database writer koşturabiliriz. Bu da performansı arttıracaktır yalnız önemli bir not, toplam CPU adedinden fazla tanımlanan database writer işlemlerinin bir faydası olmacaktır. Burada kullanacağımız parametre DB_WRITER_PROCESSES parametresidir ve bu parametreye 1-20 arasında bir sayı verebiliyorsunuz.

DBWn işlemi modifiye edilmiş olan buffer blok'larını diske yazarak, buffer cache üzerinde daha fazla buffer bulunmasına yardımcı olur. Bütün bu yazma işlemleri bir yığın olarak gruplanır ve işleme alınır. Bunun tabii ki en önemli sebebi ise disk üzerindeki çekişmeleri (contention) azaltmak.

DBWn aşağıdaki durumlar meydana geldiği zaman, modifiye edilmiş olan buffer'ları fiziksel veri dosyaları içerisine yazmaktadır;

1) Bir serbest buffer için çok fazla arama yapıldığı zaman.
2) Buffer cache üzerinde modifiye ve commit edilmiş buffer'ların boyutu çok fazla olduğu zaman.
3) Veritabanı genelinde bir Checkpoint (CKPT) işlemi çalıştığı zaman.
4) Shutdown abort dışında kalan bir yöntem ile veritabanı kapatıldığı zaman.
5) Bir tablespace backup moduna veya offline'a alındığı zaman.
6) Bir segment kaldırıldığı zaman.

2) Checkpoint (CKPT)

Bir checkpoint, DBWn işleminin bütün dirty buffer'ları veri dosyalarına yazdığı zamandır. Bir checkpoint oluştuğu zaman, Oracle bu checkpoint işlemini kayda almak için bütün veri dosyalarının başlıklarını ve kontrol dosyasını günceller. Bu güncelleme CKPT işlemi tarafından yapılmaktadır.
Checkpoint'ler bir instance kurtarımı durumunda zamanı kısaltmaya yardımcı olmaktadırlar. Eğer checkpoint'ler çok sık oluşmaktaysa disk çekişmeleri veri dosyaları için bir problem teşkil etmeye başlayacaktır. 
Checkpoint olayı otomatik olarak, bir redo log geçişi yapıldıktan sonra tetiklenmekte ve çalıştırılmaktadır. Checkpoint'in tetiklenmesini beklemek zorunda değiliz;

SQL> ALTER SYSTEM CHECKPOINT [GLOBAL]; --> RAC instance'ları için GLOBAL kullanılabilir.

3) Log Writer (LGWR)

Log writer işleminin amacı SGA içerisinde redolog buffer'dan ilgili blokları alıp, online redo log'lara yazmak. LGWR yazma işlemini sürdürdüğü sırada Oracle log buffer'a yeni bilgi girişi yapabilmektedir. Eğer redo log dosyaları çoğaltılmış (multiplexed) ise LGWR bütün dosyalara aynı anda yazmaktadır.

Hangi durumlarda LGWR tetiklenmektedir?

1) Her 3 saniyede bir.
2) Log buffer 1 MB bilgiye sahip olduğu zaman.
3) Herhangi bir kullanıcı bir transaction'ı commit ettiği zaman.
4) Redo log buffer'ın 1/3'ü dolu olduğu zaman.
5) Veritabanı checkpoint oluştuğu zaman.

Bir commit gönderildiği zaman commit edilen bilgi direkt olarak online redo log'lara yazılır ve varlığı kesinleştirilir. Herhangi bir felaket veya kurtarma durumunda da online redolog'lardaki bilgiler kullanılır ve veri kaybedilmemiş olur. LGWR'ın çalışma prensibi ile ilgili bir değişiklik yapılamamaktadır.

4) Process Monitor (PMON)

Process Monitor'ün amacı başarısız olan kullanıcı işlemlerini temizlemektir ve kaynakların serbest kalmasını sağlamaktır. Kullanıcı tarafından alınan bütün kilitler de bıraktırılır. PMON periyodik olarak uyanır ve herhangi bir işlem yapması gerekiyor mu kontrol eder. PMON ayrıca birkaç opsiyonel arka plan işleminin kontrolünü de yapar ve başarısız oldukları zaman yeniden başlatır.

5) System Monitor (SMON)

System monitor işlemi bir instance veya kazar (crash) kurtarma işlemi gerçekleştirir. Bu işlem veritabanı başlangıcında gerçekleşir ve online redo log'ları kullanır. SMON ayrıca tablespace'lerin üzerindeki geçici segmentlerin temizlenmesinden de sorumludur. 

SMON işlemi periyodik olarak uyanır ve kendisine ihtiyaç olup olmadığını kontrol eder.

Yukarıdaki 5 işlemin varlığını sürdüremediği bir Oracle instance'ı olamaz zira diğer opsiyoneller olmadan da işler yürümektedir. DBWn, LGWR, CKPT, PMON veya SMON'un bir sebepten dolayı yapması gerekenleri yapamadığı durumda Oracle instance'ını ani olarak kapatma yetkisi bulunmaktadır. Küçük bir örnek;

ORA-00600: internal error code, arguments: [4194], [35], [34], [], [], [], [], [] 
SMON: terminating instance due to error 600 
Instance terminated by SMON, pid = 28429 

Thu Apr 19 16:52:05 2007
LGWR: terminating instance due to error 472
Instance terminated by LGWR, pid = 2604
9

İyi çalışmalar.

Ogan

Hiç yorum yok:

Takip et: @oganozdogan