Diskimizi maksimum performansta kullanabiliyor muyuz?

Bu makaleyi anlamak için aşağıdaki kavramları bilmemiz gerekir.

Page: SQL Server storage’daki en temel birimdir. Her Page 8 KB alandan oluşur.

Extent: Fiziksel olarak sıralı 8 page’in bir araya gelmesiyle oluşur. Boyutları 64 KB’tır. Extentler, page’lerin verimli bir şekilde yönetilmesine yardımcı olur. Extentler kendi aralarında ikiye ayrılır.

Mixed Extent: Farklı nesnelere ait page’lerin bir araya gelmesiyle oluşur.

Uniform Extent: Aynı nesneye ait 8 page’in bir araya gelmesiyle oluşur.

Allocation Unit Size: Bir dosyayı tutmak için diskte ayrılan en küçük alandır. Default 4 KB olarak gelir. SQL Server için tavsiye edilen best practice 64 KB’tır.

SQL Server’ın 1 Uniform Extent(64 kb) veri okumak istediğini düşünelim. Ve bu verinin memory’de olmadığını varsayalım. Eğer diskimizi formatlarken allocation unit size’ı 4 KB olarak seçtiysek, bu okuma işlemini gerçekleştirebilmek için 64/4=16kere diske erişmesi gerekecek. Diske fazladan yapılacak her erişim performansı azaltacaktır. Diskimizi, allocation unit size’ı 64 KB olacak şekilde formatladığımızda ise, SQL Server 1 Uniform Extent(64 KB) okumak istediğinde 64/64=1 kere diske erişmesi gerekecek. Veri boyutu arttıkça bu işlemin performansa etkisi giderek artacaktır. Diskinizin şu anda kullanmakta olduğu Allocation Unit Size’ını cmd komut satırına aşağıdaki komutu yazarak öğrenebilirsiniz.

fsutil fsinfo ntfsinfo o:

“o” yazan yere diskinizin ismini yazmalısınız. Çıkan sonuçta Bytes Per Cluster: yazan yerde allocation unit size’ı görebilirsiniz. Aşağıda görüldüğü gibi diskimiz allocation unit size’ı 65536 byte (64 KB) olacak şekilde formatlanmış.

Aşağıda diskimizi formatlarken allocation unit size’ı nasıl seçeceğimizi görebilirsiniz.

Diskimiz üzerinde sağ tıklayıp Format diyoruz. Daha sonra açılan pencereden hemen yanındaki resimdeki gibi Allocation Unit Size’ı 64 KB olarak seçiyoruz. Tabi bu işlemi yapmadan önce diskinizdeki veriyi başka bir yere kopyalamayı unutmayın. Özellikle veritabanı dosyaları varsa bu işlemi yapmadan önce veritabanlarınızı başka bir diske taşımanız gerekir

Loading

2 Comments

  1. Selam,

    Cok iyi yazilmis bir yorum. Bir sorum olacak asagidaki bilgi ile ilgili;
    O zaman RAID 5 disk varsa ve minum 3 disk varsa, yazi yazma (write) isi icin 16X3 = 48 defa yazma islemi mi yapmis olacak “cache controller”? Ve okuma islemini kac defa yapmis olacaklar?

    “Eğer diskimizi formatlarken allocation unit size’ı 4 KB olarak seçtiysek, bu okuma işlemini gerçekleştirebilmek için 64/4=16kere diske erişmesi gerekecek.”

    Tesekkurler,
    Celal

    1. NURULLAH ÇAKIR says:

      RAID yapısı ile ilgili detaylı bilgiyi aşağıdaki linkteki makalede bulabilirsiniz.

      http://www.veritabani.gen.tr/2016/11/21/raid-yapisi/

      özet olarak 3 disk kullanarak RAID 5 yaptıysanız RAID 5’i 2+1 şeklinde yapmış olacaksınız. Dolayısıyla 2 diske verinin kendisi 3.diske’de paritesi yazılacak. Eğer ntfs sistemde diski formatlarken allocation unit size’ı 4 kb olarak seçtiyseniz ve sql server üzerinden bu diske yazma işlemini yapacaksanız ve yaptığınız yazma işlemi 64 KB veri içerecekse diske yazarken her 4kb’lık alan bittiğinde, 4kb boyutunda yeni bir alan allocate edilecek ve 64 kb’ın tamamı diske yazılana kadar 4kb ‘lık alan allocate edilmeye devam edecek. Bu yüzden allocation unit size oluşturulurken microsoft’un sql server için tavsiye ettiği gibi 64kb olarak set etmenizi tavsiye ederim.

      okuma işleminde parite okunmayacağı için yazma performansına göre daha iyi bir performans elde edersiniz.

Leave Your Comment