16 Eylül 2010 Perşembe

LGWR, CKPT, DBWR ve LOG_BUFFER

Merhaba,

Bir oracle veritabanı arka plan görevi olan LGWR'ın (log writer) amacı log buffer'daki bulunan ve online redo log'lara yazılmayı bekleyen bilgileri online redo log'lara aktarmaktır.

LGWR görevi bu işlemi 4 farklı aşama tetiklendiği zaman gerçekleştirmektedir;

1) Her 3 saniyede bir redo log buffer'ı,
2) Redo log buffer'ın 1/3'ü dolduğu zaman,
3) Redo log buffer 1 megabyte olduğu zaman,
4) Herhangi biri "commit" ederse,

Redo log buffer boşaltılır ve online redo log'lara veriler aktarılır. Online redo log gruplarının boyutlandırması ne kadar önemli ise redo log buffer'ın da boyutlandırılması o kadar önemlidir. Hatalı boyutlandırıldıkları durumlarda veritabanın bekleme olayları meydana gelmektedir.

Aslında DBWR ve LGWR birbiri ile senkronize çalışmaktadır diyebiliriz zira bir transaction içerisinde iken devreye ilk giren görev LGWR'dır. LGWR'ın online redo log'lara yazdığı transaction kayıtları CKPT görevinin tetiklenmesi ve DBWR aracılığı ile fiziksel veri dosyalarına yazılmaktadır. Dolayısıyla bu döngü içerisinde bir aksama meydana geliyorsa, diğerleri de mutlaka etkilenecek demektir.

LGWR'ı CKPT ve DBWR'dan ayıran bir özellik ise yukarı saydığım 4 maddenin değiştirilemez ve değiştirilmesi de teklif edilemez olmasıdır :) Bu işleyişe log writer'ın kendine özel hareketleri de diyebiliriz ancak CKPT ve DBWR için aynı şey geçerli değildir. CKPT ve DBWR görevlerinin tuning'i yapılabilir ve belirli durumlarda da yapılması gerekmektedir.

Örneğin CKPT görevini elle çalıştırabilirsiniz;

SQL> ALTER SYSTEM CHECKPOINT [GLOBAL];

Aynı şekilde bir veritabanı üzerinde ne kadar DBWR çalışabileceğini sisteme gösterebilirsiniz;

SQL> ALTER SYSTEM SET DB_WRITER_PROCESSES=CPU_COUNT/8 SCOPE=SPFILE;

Veritabanının üzerinde bulunduğu sistemin CPU adedi bölü 8 bize kaç adet DBWR görevi olabileceğini göstermektedir. Bu sayıdan fazla da DBWR görevi tanımlanabilir.

İyi çalışmalar.

Ogan

2 yorum:

Savaş Külah dedi ki...

Merhaba,

Log Writer için Oracle veritabanında dar boğaza neden olan ve buna katlanmak zorunda olduğumuz tek noktadır desek yanlış bir yorum yapmış olmayız sanırım. DBWR verileri diske asenkron yazarken LGWR anlık olarak RAM'deki değişen blokları diske yazmak zorunda kalıyor.

Saygılar,
Savaş

Ogan Özdoğan dedi ki...

Katılıyorum ve yorum için teşekkür ederim.

Ogan

Takip et: @oganozdogan