11 Aralık 2009 Cuma

Redolog dosyalarımın boyutunu nasıl değiştirebilirim?

Boyutu değiştirilmek istenen her redo log dosyasını içeren group ,
önce silinir sonra yeniden oluşturulur. Bu yöntemle redo log
dosyalarının yerleri ve isimleri de değiştirilebilir.
Bir log grubunu silebilmek için silmek istediğimiz grup statusu
INACTIVE olmalıdır. Redo log grubuna
ait her dosya birbirinin aynısı olacağı için büyüklükleri de aynı olmak zorundadır.
Farklı redo log gruplardaki dosyalar farklı büyüklükte olabilir.
Aşağıda örnek bir silme ve yeniden oluşturma işlemi gerçekleştirdim.

1. select * from v$log;

Bu sorguyla hangi log grubunun inactive olduğunu öğrenip
o log grubunu drop edeceğim.

2. alter database drop logfile group 1;

INACTIVE durumdaki redo log grubumu sildim.

3. alter database add logfile group 1 ('/u01/app/oracle/oradata/orcl/redo01a.log','/u01/app/oracle/oradata/orcl/redo01b.log') size 150m;

Burada yeni oluşturduğum redo log dosyasının boyutunu 150 mb olarak ayarladım.

Bu noktada 1 numaralı redo grubumuz için işlem tamam.
Şimdi log grobumuzu switch ederek diğer grupları da aynı şekilde
önce silip sonra yeniden oluşturarak işlemi tamamlayabiliriz.
Aşağıdaki sql leri çalıştırıp bir sonraki log file e geçebiliriz.

alter system switch logfile;

alter system checkpoint;

Redo log konusunda daha fazla bilgi
*************************************
Bir transaction, commit edildiğinde ; redo log file üzerinde bir fiziksel yazma gerçekleşir.
Commit istemi kontrolü kullanıcıya geri vermeden önce yazma işlemi tamamlanmak zorundadır.
Yazma işleminin çeşitli nedenlerle uzaması beklemeye neden olur. Redo log dosyalarının
boyutu bu beklemeyi etkileyen bileşenlerden birisidir.

Redo log I/O işlemleri eğer log dosyaları ayrı ve redo log dosyalarından başka veri içermeyen
bir fiziksel sürücüde ise optimize edilmiş olur. Eğer bu başarılabilirse,
yazma anında disk kafası zaten doğru konumda olduğundan
hareket ihtiyacı duymayacaktır ve yazma zamanı minimize edilmiş olur.
Çünkü log yazma işlemi bir sıralı yazma işlemidir ve sadece logwriter process i ile gerçekleştirilir.

Her hangibir veri kaybına karşı redo log dosyaları mirror edilebilir.
Bu Oracle tarafından yazılım tabanlı olarak yapılabileceği gibi (redo log multiplexing),
donanım temelli de olabilir. (RAID 1)

Redo log ların switch olması sonucu database checkpoint meydana gelir.
Checkpoint işlemi tamamlanmadan ilgili redo log grubu yeniden
kullanılabilir duruma (INACTIVE) gelmeyecektir. Bu nedenle büyük ve çok sayıda
redo log grubu olması daha iyi sonuç verebilir.Çok sayıda redo log grubu
oluşturulursa; redo log grubunun kendisinin içerdiği data aktif olarak
checkpointte kullanılırken, aynı redo log grubuna yeni redo log larının yazılması
ihtiyacının ortaya çıkma dolayısıyla wait oluşma ihtimali düşecektir.
Redo log dosyalarının büyütülmesi ise checkpoint oluşma sıklığını azaltacaktır.

Redo log dosyalarının uygun büyüklüğü transaction miktarına göre değişiklik gösterir.
Redo log dosyalarının boyutu sık sık log switch olayı meydana gelmeyecek kadar büyük olmalıdır.
64-256 mb aralığında 10-20 farklı redo log group olması alışılmadık bir durum değildir.

Genel tavsiye log switch sıklığının
15-20 dk. olması yönündedir. Redo log dosyasının boyutu konusundaki hesaplama
yoğun zamana göre yapılmalıdır.
v$log_history tablosunu kullanarak yoğun zamanlardaki log
değiştirme sıklığı kolayca incelenebilir.

select * from v$log_history
order by sequence# desc

Örneğin yoğun zamanda 7 dk aralıkla değişen 50 mb boyutunda log file lerimiz olsun.
Yeni log file buyukluğümüz yaklaşık 15-20 dk bir log switch
olmasını istediğimiz için 150 mb. civarinda olabilir.

Aşağıdaki sorgudan yola çıkarak, mevcut redo log gruplarını, member dosyaların yerlerini,
redo log dosyalarının boyutlarını ve son zamanlardaki log file değitirme sıklığını görebiliriz.

select l.sequence#,l.group#,l.bytes,lf.type,lf.member,l.first_time from v$log l, v$logfile lf
where l.group# = lf.group#
order by l.sequence#

Ayrıca "v$log" tablosundaki "status" alanı aşağıdaki değerleri alabilir.

UNUSED
*******************
Oracle daha once bu gruba hiç yazmamış.
Yeni yaratılan redo log grup için status.

CURRENT
*******************
Aktif olarak yazılan redo log grubu bu grup.
Log group drop edilemez.

ACTIVE
*******************
Oracle daha once bu gruba yazmış; yazılanlar instance recovery için gerekli.
Log group drop edilemez.

INACTIVE
*******************
Oracle daha once bu gruba yazmış; yazılanlar instance recovery için gerekli.
Log group drop edilebilir.

Konuyla ilgili aşağıdaki linkler de incelenebilir.

Ingilizce
****************
http://download.oracle.com/docs/cd/E11882_01/server.112/e10595/onlineredo002.htm

http://download.oracle.com/docs/cd/B10500_01/server.920/a96521/onlineredo.htm

Türkçe
****************
www.cagataycebi.com/oracle/oracle_redologs.pdf

http://www.gokhanatil.com/redo-log-dosyalarinin-boyutu-ne-kadar-olmali/

http://www.mysqlsupport.net/oracle-redo-log.html