Sevgili MastersOfSQL severler, ilk yazımla sizlere merhaba
demek istiyorum.
Nedir bu IO, input – giren, output’da çıkan data
diyebiliriz. SQL Server’ınıza yazılan ve okunan dataların giriş ve çıkışlarını
saniyede en fazla ne kadar yapabildiğini gösteren bir değerdir. Önemli midir?
Evet önemlidir 😊
Neden önemlidir kısaca anlatmaya çalışalım. Storage veya
disk alt yapınız, SQL Server’ınıza gelen çılgın SELECT cümlelerine cevap
veremediği zaman IO sebebiyle beklemeler yaşarsınız. Tabiki burada hemen
sorgularınızı gelişi güzel yazmamanız gerektiğini düşünmeye başlamanız gerekir.
Her bir SELECT sorgunuzun bir IO değeri olduğunu unutmayın,
buna nasıl bakarım derseniz, sorgunuzun başına;
SET STATISTICS IO ON parametresini yazarak, sorgunuz
çalıştıktan sonra ne kadar IO yaptığına dair değerleri görebilirsiniz.
Şimdi gelelim SQL Server sunucunuz üzerinde bu IO testleri
nasıl yapılıyor bir bakalım. Daha önceden SQLIO adında bir program
kullanıyorduk, Microsoft bunu DskSpd programı ile değiştirdi. Hem fiziksel hem
de sanal makinalarda test için kullanılabilir.
Programı aşağıdaki linkten indiriyoruz;
https://gallery.technet.microsoft.com/DiskSpd-a-robust-storage-6cd2f223
Komut satırından çalışan bir programdır, bu yüzden direk C
dizini altına DskSpd adında bir klasör açalım
C:\DskSPd
DiskSpd programı komut satırından çalışan bir program
olduğundan, komut satırını yönetici olarak açmakta fayda var.
Ufak bir hatırlatma, SQL datalarınızın bulunduğu diskleri
64k unit size olarak formatlamayı unutmayın. Neden 64k formatlanıyor diye merak
edenlere, başka bir makalede bunu anlatacağım.
DiskSpd’de kullanacağımız parametrelere göz atalım;
Örnek kod: DiskSpd.exe
-c100G –d300 -r -w0 -t8 -o8 -b8K -h -L E:\testdosyasi.dat
-
c (Test dosyası boyutu 100 gb)
-
d (Test süresi 300 saniye)
-
r (Random IO, eğer r parametresi yazılmaz ise ardışık
olarak testi yapar)
-
w (Testteki write yüzdesini belirler, w25 w50
gibi, w0 olarak bırakılırsa %100 read olarak test yapar)
-
t (Worker thread sayısını belirler, Core
sayısına göre bu değeri değiştirmekte fayda var)
-
o (Outstanding’İn den kısaltmasını alıyor, her
worker thread’e bağlı IO kuyruğu oluşturmak için kullanılıyor.
-
b (Blok size değeri veriliyor, her page 8kb
olduğundan, 8kb veya 64k kullanılıyor)
-
h (İşletim sistemi seviyesinde ve donanım
cachingi iptal etmek için kullanıyor, SQL server testinde bu parametre önemli)
-
L (test sırasındaki latency’i yakalıyor)
-
E:\testdosyasi (Test sırasında kullanılacak
dosyanın yolunu belirtiyoruz, hangi disk biriminde test yapacaksanız ona göre
değiştirmeniz gerekiyor)
Parametrelerden sonra yukardaki örnekte olan komutu
çalıştıralım.
IO -1
3gb lık testfile oluşturmuştum, 8 thread üzerinde IO’ları
ayrı ayrı gösteriyor, toplamda bu disk üzerinde %100 Read testinde Toplam Read
IO’su 31.000 olarak çıktı.
Şimdi de %30 Write yapan bir test yapalım
DiskSpd.exe -c3G –d300 -r
-w30 -t8 -o8 -b8K -h -L E:\testdosyasi.dat
Test ile bilgileri ilk olarak veriyor, software cache ve
hardware write cache disable durumda. Read ve write değerleri, block size,
random IO mu yoksa ardışık IO mu yapacağını Input parameters bölümünde
görebilirsiniz. Bundaki amaç farklı parametreler kullanıp yapacağınız testleri
kaydedip karşılaştırmak için kullanabilirsiniz.
IO -2
8 Corelu bir makinada bu testi yaptım, 8 thread olarak çalıştı,
ve 300 saniye boyunca tüm Cpu’lar %100 olarak çalıştı, test sonuçlarının en
başında Cpu yüzdelerini de görebiliyoruz. Eğer tüm cpular bu test sırasında
çalışmıyor ise, thread kısmını kontrol etmelisiniz.
IO - 3
Şimdi read ve write IO larına baktığımızda, aslında bu
disklerin toplam 30bin IO değeri verdiğini görüyoruz, thread ve test dosyası
ile biraz daha oynasak bile, aşağı yukarı bu değerleri göreceğiz.
IO - 4
Son olarak da latency değerlerine bakalım, eğer sizde de bu
kadar yüksek latency çıkıyorsa sotrage’inizde bir sorun vardır 😊
ben bu testi ssd’li bir laptopta yaptığımdan bu değerlerin çıkması gayet normal.
IO – 5
IO testlerimizi yaptık, storage’imizin ne kadar IO
vereceğini artık biliyoruz, mevcut yapınızdaki durumu yukardaki testler ile
artık görebileceksiniz. SQL Server’ınızın IO ları ile altyapınızın IO’larını
karşılaştırıp, IO ihtiyacınız var mı yok mu tespit edebilirsiniz. Mevcut durum
bu, peki yeni bir server ve storage alırken size kaç disk lazım olacak? Storage
planlamasını neye göre yapıyorsunuz? Maalesef bu planlama ver abi ordan 20
disk, 2 de SSD takalım hız olur diyerek geçiştiriyorlar. Günün sonunda yanlış
bir yatırımı kucağınızda buluyorsunuz 😊
Son paragraftaki soruların cevapları için bizi takip etmeye
devam edin 😊 Storage planlaması hakkında daha bir makale
yazacağım.
Obi-Wan Kenobi olarak ilk yazımda umarım faydalı olmuşumdur.
Üstadın dediği gibi “Güç sizinle olsun”