Masters Of SQL

SQL Server ile ilgili bilgiler, hayata dair paylaşımlar ve birazda eğlence tabii...
Deadlock’sız, Blocking’siz, Contention’sız günler diliyoruz :)
Sysadmin sizinle olsun

SQL Server IO Test

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”