20 Ocak 2011 Perşembe

"Checkpoint Position & Incremental Checkpoint"

Merhaba,

Oracle veritabanı üzerinde "checkpoint" adını verdiğimiz bir arka plan görevi bulunmaktadır ve CKPT olarak temsil edilmektedir. Bu arka plan görevinin amacı SCN değerini kontrol dosyasına ve datafile blok başlığına yazmaktır. Bir diğer görevi ise asenkron ve paralel çalışabilen DBWn görevini tetikleyerek, buffer cache'deki dirty buffer'ların datafile'lara yazılmasını emretmektir.

CKPT her üç saniyede bir SCN'yi kontrol dosyasına iletir ve yazar. Bu süre daha uzun veya daha kısa olabilir. CKPT bunu yaparken DBWn tetiklenmez, yalnızca kontrol dosyasına gerekli bilgi verilir. CKPT'nin ne zaman tetiklenebileceğini siz yönetebilirsiniz. CKPT'nin sürekli tetiklendiği durumlarda veritabanı üzerinde ve sistem genelinde bir yavaşlık olabilir ancak veritabanımız bu oran kadar daha tutarlı olacaktır zira kontrol dosyasının bildiği SCN bilgileri, datafile blok başlıklarında da olacak ve olası bir instance recovery durumda MTTR süresi kısalacaktır. CKPT'nin çok uzun aralıklarla tetiklenmesi de MTTR süresini uzatacak ve olası instance recovery durumlarında süreç uzayacaktır. Bunun dışında her log geçişlerinde CKPT tetiklenmektedir. LGWR ise bu tetikleme ile redolog buffer'daki verileri redolog'lara, DBWn datafile'lara yazmadan yazacaktır.

alert_.log dosyasının içerik örneğini göstermem gerekirse;


Beginning log switch checkpoint up to RBA [0x174b7.2.10], SCN: 41480096864
Thu Jan 20 00:30:04 2011
Thread 1 advanced to log sequence 95415 (LGWR switch)
  Current log# 2 seq# 95415 mem# 0: /db/optima/redolog/redo02a.log
  Current log# 2 seq# 95415 mem# 1: /db/optima/redolog/redo02b.log
Thu Jan 20 00:35:50 2011
Incremental checkpoint up to RBA [0x174b6.d559d.0], current log tail at RBA [0x174b7.3a3b9.0]
Thu Jan 20 00:36:16 2011
Completed checkpoint up to RBA [0x174b7.2.10], SCN: 41480096864

Öncelikle sormanız gereken soru alert_SID.log dosyasının içerisinde nasıl oluyor da checkpoint hareketlerini görebiliyoruz?

SQL> show parameter log_checkpoints_to_alert

NAME                                 TYPE                             VALUE
------------------------------------ -------------------------------- ------------------------------
log_checkpoints_to_alert             boolean                          TRUE

Bu komut TRUE iken artımlı checkpoint ve checkpoint tamamlanması mesajları alert.log dosyasına yazılacaktır.

Checkpoint Position & Incremental Checkpoint

SCN akışı oldukça önemlidir ve redo, kontrol dosyası ve datafile blok başlıkları içerisinde bu bilgi bulunmaktadır. Olası instance başarısızlıklarında redo içerisindeki SCN bilgisi, recovery için kullanılmaktadır. Redo içerisindeki SCN ile kontrol dosyası içerisindeki SCN senkron olarak ilerlemekte ve bu sebepten dolayı da redo grubunun tamamının kaybolması, veritabanının çarkını bozmaktadır. DBWn görevi bu SCN akışını takip etmek ve bu akış sırasına göre dirty blokları yazmaktır. Bunun dışında SGA memory yapısı içerisindeki SCN'yi de güncelleyerek, en son kaldığı noktayı sinyal olarak iletmektedir. Bunun amacı ise olası instance recovery durumlarında hangi noktanın net olarak datafile'lara iletildiği ve başarılı olduğu bilgisini Oracle instance'ına söylemektir. Redo ise DBWn'in kaldığı yere göre roll forward yapacak ve instance tutarlı bir şekilde açılacaktır. Bu akışın herhangi bir noktasında kopma meydana gelmesi ciddi bir kayıpla sonlanabilir. İşte bu işlemlerinin tamamına "incremental checkpoint" denmekte, "Checkpoint Position" ise redonun hangi SCN'ye sahip olduğu noktasındaki instance checkpoint pozisyonudur . Incremental checkpoint kontrol edilebilir mi? Cevap evet;

SQL> show parameter log_checkpoint_timeout

NAME                                 TYPE                             VALUE
------------------------------------ -------------------------------- ------------------------------
log_checkpoint_timeout               integer                          1200

Bu parametrenin amacı incremental checkpoint zamanının 1200 saniye olacağını göstermektir. 1200 saniye aşıldığı zaman DBWn asenkron yazma işlemi yapacak ve hiç bir dirty buffer'ın buffer cache'de kalmayacağı garanti altına alınacak ve incremental checkpoint gerçekleşecektir. 

SQL> show parameter log_checkpoint_interval

NAME                                 TYPE                             VALUE
------------------------------------ -------------------------------- ------------------------------
log_checkpoint_interval              integer                          0

Yukarıdaki parametrenin amacı ise CKPT'nin kontrolünü ve ne zaman çalışacağı bilgisini Oracle instance'ına öğretmektir. Normal şartlar altında her redolog geçişlerinde CKPT tetiklenir ve DBWn yazma işlemini yapar, CKPT SCN bilgisini kontrol dosyasına ve datafile blok başlıklarına yazar. Sıfır olarak atandığı durumlarda bu devre dışıdır ve akış normal sürmektedir. Bu değer işletim sistemi blok sayısını ifade eder ve redolog'un boyutu ile doğrudan ilgilidir. Bir grup üyesinin boyutundan daha düşük bir değer verirseniz, bir log geçişi olmadan CKPT tetiklenecektir. Daha yüksek verilirse CKPT redolog geçişleri sırasında tetiklenecektir. 

SHUTDOWN ABORT veya veritabanının dismount, close edilemediği durumlarda instance recovery kaçınılmazdır. Bu sebepten dolayı shutdown abort öncesinde CKPT'nin tetiklenmiş olması işinize yarayacaktır ancak kontrol dışı kaldığınız durumlarda CKPT'nin ve redolog'ların boyutunun sizin için önemi büyük ve düzgün ayarlanmış olması gerekmekte. Geçtiğimiz haftaki eğitimde bir Oracle DBA'in Enterprise Manager Performans ekranındaki veritabanı performans ölçüm grafiklerine neden "öküzün trene baktığı" gibi baktığını konuşmuştuk. Bir nedenini bu CKPT, redolog ve DBWn işlemlerinin durumunu izlemek olarak kullanabiliriz. Sonuç olarak bir veritabanı yöneticisinin görevleri arasında performans yönetimi ve veritabanının en iyi şekilde, hızlı ve efektif çalışmasının düzenlenmesi de bulunmaktadır.

İyi çalışmalar dilerim.

Ogan

Hiç yorum yok:

Takip et: @oganozdogan