4 Eylül 2014 Perşembe

Vaka Analizi-Sql Server Performans Problemi

Bu yazımda sizlere destek verdiğim firmalardan birinde karşıma çıkan SQL Server'da her zaman için karşılaşabileceğiniz ve çözümü çok basit olan problemlerden birini anlatmak istiyorum.

Geçen hafta destek için gittiğim firmanın birinden beni aradılar. Sistemlerinin çok yavaş olduğunu gelip analiz etmem gerektiği söylendi. Öncelikle  firmanın yapısından bahsedecek olursak firma sunucu üzerinde sanallaştırma yapısı olarak HYPER-V kullanıyor. 2 TB lık bir storageları var diskler Raid10 olarak yapılandırılmış. Sanal makinalardan bir taneside SQL Server'ın olduğu makina. SQL Server 2008 R2 standart kurulu durumda. SQL Serverı ERP sistemleri ve Mobile Satış Sistemleri için kullanıyorlar.

Firmanın bana bildirdiği hata son bir haftadır çok yavaş çalıştıklarını özellikle kayıt yaparken çok yavaş kaydettiği sistemlerinin artık kaldırmadığı ve yeni bir server ile storage almayı planladıklarını söylediler.

Sistem kaynaklarına ve bilgisayarların  durumlarını incelediğimde çok olağan üstü bir performans beklemediğimin farkındaydım ancak durma seviyesinde bir yavaşlama yoktu. Yanlız kullandıkları ERP programında kayıt işlerken söyledikleri gibi çok yavaş kayıt yapıyordu.

Ben problemin Mobile Satış sisteminden ERP sistemine veri aktarımından kaynaklandığını düşündüm ancak aksi gibi veri aktarımı esnasında kaydetme problemi yoktu. Aksine bu insert işlemi esnasında sistem süper çalışıyordu.

Yaptığım daha derinden :) incelemelerde problemin SQL Serverda olduğunun tespit ettim. SQL Serverda farklı firmalara ait 20 ila 40 GB arasında farklı firmalarına ait databaseler vardır.  SQL Server'daki problem yeni açmış oldukları firmanın kullanmış olduğu databaseydi. Aklıma Turgay SAHTIYAN hocanın makalesi geldi. Veritabanı Otomatik Büyümeleri Kontrolünüz Altında Olsun (Database Auto Growth)  makalesi tam bu problemi ifade ediyordu. Database boyutu 21 GB olmuş ve Autogrowth özelliği aktif olduğu için 1 MB büyüyordu. Bu özellik aktif olduğu için hata vermiyordu ancak performans olumsuz etkilenmişti.

SQL Serverda bulunan Auto Growth özelliği aktifse bu özellik sayesinde veritabanı dosyaları dolduğunda sistem tarafından oransal veya boyutsal olarak bizim belirlediğimiz şekilde büyüyebilir. Autogrowth işlemi diskte yeni bir alan ayırdığı için kaynak tüketimi fazla olan bir işlemdir. Büyümenin boyutlarına göre bu işlem 1-5 saniye sürebilir.  Büyüme tamamlanana kadar ilgili dosyaya gelen okuma ve yazma istekleri bekletildiği için performans sıkıntısı doğacaktır.

Best practice olarak dosyaların büyümesinin  Auto Growth değilde DBAlerin kontrolü altında yapılması önerilir ancak plansız büyümelere karşı yinede Auto Growth özelliği aktif olmalıdır.  Ayrıntıları Turgay Hocanın makalede okuyabilirsiniz.

Bu konuda bende 20 GB olan MDF dosyasını 30 GB ve 50 GB olan log dosyasını ise 80 GB çıkardım. Sistemi tekrar incelediğimde problem ortadan kalkmıştı. Ancak yinede hazır el atmışken sistemleri yenileme kararıda aldık.

Sql Server DateTime Veri Tipindeki Datayı Türkçe Formatında Göstermek

  SQL'de tarihleri farklı formatlarda göstermek için FORMAT fonksiyonunu kullanabilirsiniz. Türkçe kısa tarih formatı genellikle "...