Exchange Database Mimarisi Hakkında

closeBu yazı 5 yıl 9 ay 5 gün önce yayınlanmış olduğundan güncelliğini yitirmiş veya içeriğindeki bilgilerin geçerliliği kaybolmuş olabilir. Herhangi bir yanlış anlaşılmadan bu site sorumlu değildir.

Exchange mimarisinde kullanılan database yapısının çalışması hakkında kısa bilgi vermek istiyorum.

Exchange’de gönderilen, alınan mesajlar, calendar ve benzeri önemli bilgiler database üzerinde saklanır. Exchange database olarak Extensible Storage Engine (ESE) teknolojisini kullanır. ESE veya bazen JET database olarak adlandırılan bu database işlemsel (transactional) bir database mimarisine sahiptir. Exchange ESE versiyonları:

  • Exchange Server 5.5 – ESE97
  • Exchange Server 2000/2003 – ESE98
  • Exchange Server 2007/2010 – ESE

Yeni bir Mailbox Database ekleyip; mount ettiğiniz zaman aşağıdaki dosyalar otomatik olarak yaratılır.

  • Database_ismi.edb – Mailbox Database’imiz.
  • E##.log – Transactional logging için kullanılan log dosyası.
  • E##tmp.log – Temp log dosyası.
  • E##.chk – Checkpoint dosyası. Database ve Log dosyaları arasındaki ilişkiyi takip eder.
  • E##res00001.jrs ve E##res00002.jrs – Mailbox’ın bulunduğu diskin dolması durumu oluşursa diye tutulan log dosyaları.
  • Tmp.edb – Transaction sırasında kullanılan database

Bu dosyaların hepsinin database’in çalışmasında kritik rolü bulunmaktadır. Bu dosyaların işlevlerini daha iyi anlamak için database ve Exchange Server araşındaki veri akışını anlamamız gerekiyor. Exchange 2010’da veri 32KB’lık bloklar halinde işlenir ve bunlara aynı zamanda “page” denir. (Exchange 2007 8kb, Exchange 2003 4kb’lık bloklar kullanıyordu) Exchange  bu veriyi işlemeyi tamamladığı anda log dosyasına yazar. Exchange bir daha bu bilgiye ihtiyaç duyarsa diye memory’de tutulmaya devam eder. Ancak bu page uzun süre kullanılmadığı zaman veya Exchange checkpoint sırasında güncelleme  yaparsa bu veri database’e yazılır. Bu nedenle bilinmesi gereken en önemli noktalardan biri log dosyalarında tutulan verinin database’in önünde olduğudur.

Veri database’e yazıldığında checkpoint yeni veya güncellenmiş page ile ilgili güncellenir. Checkpoint bilgisi chk uzantılı checkpoint dosyasında tutulur.

Özet olarak:

[singlepic id=143 w=320 h=240 float=]

  1. Veri memory’de işlenir ve page lere bölünür.
  2. Güncellenen page ler log dosyasına yazılır.
  3. Exchange’in bu page lere ihtiyacı yoksa database’e yazılır.
  4. Checkpoint güncellenir. (Checkpoint loglanan bilginin ne kadarının database’e yazıldığı bilgisini tutar)

Birazda log dosyalarından bahsedelim. Exchange page üzerinde çalışırken, page milisaniyeler içinde log dosyasına yazılır. Verinin memory’de tutulması hızlı erişim için iyi ama en ufak bir problemde bu veri kaybolabilir. Bu nedenle log’a yazıldıktan sonra sunucunuz yansa bile eğer diski kurtarabiliyorsanız veri kaybı olmayacaktır. Exchange bu page’e ihtiyacı olmayana kadar memory’de tutmaya devam eder.

Kullanılan log dosyası E##.log’dur ve log dolduğu zaman E## sonuna hexadecimal bir değer eklenerek kaydedilir. (örneğin E000000007.log, unutulmaması gereken bir konuda E000000009’dan sonra E00000000A gelir). Hangi hexadecimal değerin ekleneceği E##.log’da tutulur bunu bulmak için Eseutil ile bu log dosyasının header bilgisine bakmanız gerekiyor. (Mounted durumdayken bakamazsınız).

Checkpoint dosyası ise en son database’e yazılan page’i işaret eder ve Exchange başka bir page’i database’e işlediğinde  checkpoint dosyasında bilgi güncellenir. Exchange Database ile page arasındaki fark checkpoint depth (derinliği) olarak adlandırılır. Bu değer varsayılan olarak 20’dir. Checkpoint sayesinde Exchange database’e yazmadan önce bekler ve toplu bir yazım yapar bu sayede database üzerindeki yazma işlemi daha efektif olur.

Çok fazla ayrıntıya girmeden Exchange Database yapısı hakkında biraz bilgi verdim. Umarım anlaşılır olmuştur.

Bu yazıyı yazmamda yardımcı olan Jaap Wesselius’a çok teşekkür ederim. Thank you Jaap for helping me on this article.

Yayınlayan: Serkan Varoğlu

Yıldız Teknik Üniversitesi Elektrik Mühendisliğini bitirdim. Türkiye'de birçok farklı sektör ve firmada Sistem Yöneticiği yaptım. Bermudada 3 yıla yakın danışmanlık yaptıktan sonra şu anda İrlanda'da çalışma hayatıma devam ediyorum.