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

The learning never ends

Merhaba MastersOfSql Okuyucuları;

Usta Yoda'nın kendisi burada olmasa da öğretilerini unutmamamız lazım değil mi? Belki bu söz O'na ait değil :) yine de ifadesi güzel değil mi? "The learning never ends"



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”

SQL Server Configuration Manager Cannot connect to WMI provider Hatası

Merhaba MastersOfSql Okuyucuları;

Gün geçmiyor ki gittiğimiz bir müşteride hatayla karşılaşmayalım :):) Herşey yolunda gitse biz nasıl kazanacağız değil mi? iş te bunlar hep Dark Side ların yüzünden :) 

Aslında yapmak istediğimiz SQL Server'ın Database Engine servis kullanıcısı değiştirmekti (bunun önemini ayrıca yazacağız) her DBA gibi yapmamız gereken şekilde giderek Start --> Configuration Manager diyoruz ve hooop karşımızda bir hata; 

Cannot connect to WMI provider. You do not have permission or the server is unreachable. Note that you can only manage SQL Server 2005 and later servers with SQL Server Configuration Manager. Invalid class [0x80041010]

haydaaa evet bu hatayı biliyoruz daha öncede karşılaşmıştık ve bir kaç çözümü vardı bunları deniyoruz bununla birlikte nafile :( o zaman nöronlarımızı biraz daha kurcalayarak çok eski bilgilerimize başvuralım diyerek kara kaplı USB mizi search etmeye başvuruyoruz ve yıllar öncede çözdüğümüz çözümü buluyoruz aslında bu daha çok SQL Server upgrade olunca olurdu peki bu sefer niye olmuş diye bakarken evet sunucu upgrade olmuş.

O zaman kollarımızı sıvayarak işe koyulalım.

Yapmamız gereken ilk iş bozulan "mof" dosyasının yolunu bularak bunu tekrar register etmektir.  Bizim sunucumuz SQL Server 2014 e upgrade edildiğini bildiğimizden dolayı aşağıdaki komutu Run a yazarak çalıştırıyoruz 

mofcomp "C:\Program Files (x86)\Microsoft SQL Server\120\Shared\sqlmgmproviderxpsp2up.mof"
Sunucunuzun versiyonuna göre "120" yazan yeri değiştirerek bunu yapabilirsiniz.
Microsoft SQL Server Versiyon   Build Number
Microsoft SQL Server 2017          140
Microsoft SQL Server 2016          130
Microsoft SQL Server 2014          120
Microsoft SQL Server 2012          110
Microsoft SQL Server 2008 R2       100
Microsoft SQL Server 2008          100
Microsoft SQL Server 2005           90


Tekrar SQL Server Configuration Manager ı açtığımızda bu sefer açıldığını göreceksiniz. 

SQL Server 2012 den 2014 e upgrade yapılmış.



Bir konumuzu da böylece bitirmiş olduk şimdilik tattoine gezegenine geri dönüp biraz Sith avlayalım :) 

Güç sizinle olsun...