Makale Özeti

SQL Server ile yada başka bir veritabanı sistemi üzerinde bir süredir çalışıyorsanız şu bilgi kafanıza işlemiştir artık, “sorgu performansı için index oluştur”. Bu bilgi hatalı değildir hatta çoğu durumda doğru index oluşturmak sorgu sürelerini çok çok aşağıya çekebilir. Ama olayı tersten düşünürsek asıl bulmamız gereken şey sorgu performansını düşüren sebeplerdir.

Makale

Temel Performans İpuçları

SQL Server ile yada başka bir veritabanı sistemi üzerinde bir süredir çalışıyorsanız şu bilgi kafanıza işlemiştir artık, “sorgu performansı için index oluştur”. Bu bilgi hatalı değildir hatta çoğu durumda doğru index oluşturmak sorgu sürelerini çok çok aşağıya çekebilir.

Ama olayı tersten düşünürsek asıl bulmamız gereken şey sorgu performansını düşüren sebeplerdir.

Öncelikle temel etmenlerin iyi ayarlanması gerekli.

Bunlar

  1. Donanım
  2. İşletim Sistemi
  3. SQL Server Ayarları

şeklinde sıralanabilir.

Sisteminize ve bağlantı yapacak kişi sayısına göre donanım seçimi öenmlidir. Doğru miktarda RAM ve işlemleri kaldırılabilecek sayıda CPU tercih edilmelidir. Tutulacak verinin büyüklüğüne göre sistemin RAID li diskler ile desteklenip desteklenmeyeceği ya da storage kullanılıp kullanılmayacağı burada önemli tercihler olmaktadır. Donanımınız ile uyumlu çalışabilecek bir işletim sistemi tercihi ve bu işletim sisteminin SQL Server performansını en üst düzeye çıkaracak şekilde konfigüre edilmesi de önem taşımaktadır. Bunlarla birlikte SQL Server ile birlikte kullanılmayacak servislerin kurulmaması ve kurulan servislerin işletim sisteminden ve donanımdan en üst düzeyde faydalanacak şekilde ayarlarının yapılması gerekmektedir.

Eğer SQL Server ın sorgu performansından şikayetçi iseniz ilk düşünmeniz gereken noktalar bunlar olmalıdır. Bu kısımlarda doğru tercihler yaptığınızdan eminseniz ise artık veritabanını incelemek gerekir.

Burada da ilk düşünülmesi gereken Veritabanı Tasarımı dır. Sisteminize ve yapılacak işlemlere uygun bir veritabanı tasarımı seçmek sorgu performansını çok üst düzeye taşıyabilir. Burada unutulmaması gereken is normalleştirme kurallarının üretim ortamında çok abartılmadan kullanılması gerektiğidir. Sistemde INSERT/DELETE/UPDATE mi yoksa SELECT işlemleri mi daha yoğun düzeyde yapılacak. Bu önemli bir ayrımdır ve buna göre OLTP yada Data Warehouse yapıları mı tercih edilmeli karar verilmelidir.

Bunlar dışında performansı eksi yönde etkileyebilecek diğer seçenekler aşağıda sıralanmıştır.

Hatalı İndexleme : Bu SQL server üzerinde en çok hata yapılan konu olarak göze çarpmaktadır. Gerektiği halde oluşturulmayan indexler olduğu kadar sisteme fayda getirmediği halde ekstra koyulan indexler de olabilir. Bu iki durumda da sorgularınız sistem kaynaklarını özellikle de Disk ve CPU uyu gereğinden fazla kullanmaya başlar. Burada indexlerin önce Tuning Advisor kullanılarak belirlenmesi önemli bir seçenek olarak karşınıza çıkabilir.

Hatalı Testler : SQL Server da test ortamı oluştururken genellikle çok az veri ile çalışılır ve gerçek ortamda reel veriler girilmeye başladıkça ve veritabanı şişirildikçe hatalar ortaya çıkar. Oysaki test ortamlarında yüksek veri ile çalışmak ve sistemi Profiler ile gözlemlemek çok daha etkili çözümlerin ortaya çıkmasını sağlar. Bu sayede reel çalışma ortamında daha az hata ile karşılaşabiliriz. Bu kadar veriyi nasıl gireriz diye düşünmeden temel döngüler hazırlayıp sisteme veri girişi yaptıktan sonra, sistemi kullanan yazılımların aktif hale getirilip kullanılması, yazılımların çalıştırdığı sorguların SQL Profiler ile takip edilmesi ve de SQL Profiler in sizlere verdiği trace sonuçlarının Tuning Advisor vasıtası ile incelenmesi hataları ve eksikleri bulmakda sizlere önemli bilgiler sağlar.

Hatalı Sorgular : Sonuca ulaşmak için yazılan hatalı sorgular örneğin gereği yokken join kullanmak SQL Server ın sorguyu çalıştırıken daha fazla işlem yapmasına ya da gereksiz döngüler kullanmasına yol açabilir. Bu işlemler sonucunda ise SQL Server sizin oluşturduğunuz index leri kullanmadan sorgunun sonucunu bulmaya çalışabilir. Sorguların doğru index leri kullanması performans açısından önemlidir. Bu sebeple sorgularınızı değerlendirirken execution plan larına bakmanız sorgudaki hataları görmenizi sağlar.

Cursor ve Döngüler : SQL Server işlemlerini sütun bazlı yapmayı tercih eder ve verileri küme halinde inceler. Sizlerinde sorgularınızı sütun bazlı yapmanız beklenmektedir. Ancak döngü ve Cursor lar sizleri sütun bazlı düşünmek yerine satır bazlı düşünmeye iter. SQL Server üzerinde çok çok zorunlu olmadıkça Cursor ve Döngü kullanımı performasını azaltan önemli bir etkendir. Sorgularınızda kolaya kaçarak Cursor ve Döngü kullanmak yerine diğer çözümlere yönelmeniz eğer çıkar bir yol yoksa son umut olarak cursor ları kullanmanız tavsiye edilir.

Database Log : SQL Server ın can damarı olan Transaction Log dosyalarını iyi ayarlamak çok fazla aktif sistemler de bunları MDF ve NDF dosyalarından ayırırarak fasklı disklere yerleştirmek önemlidir. Bu dosyaların genişleme gibi ayarlarının da tam anlamı ile yapılması veritabanı performansını arttıracaktır.

tempdb : SQL Server da üretilen tüm geçici veriler ve yazdığınız çoğu sorgu bu alanı kullanmaktadır. Bu sebeple tempdb veritabanın bakımı ve ayarları SQL Server sorguları için önem arz etmektedir.

Hatalı İstatistikler : SQL Server index kullanımında özellikle istatistik değerlerini inceler. Eğer bu istatistikler hatalı ise SQL Server indexlerden yeterince faydalanamaz.

Execution Plans : SQL Server da özellikle procedure ler execution plan lar oluştururak sorgunun şeklini ve nasıl çalışacağını belirlerler ancak sorgularda sürekli parametre değişimi bu execution plan larında sürekli compile edilmesine ve yeniden üretilmesine yol açarki bu da performans açısından negatif etki oluşturur. Execution Plan ların kullanımı sorgu performansı için olumlu iken hatalı kullanımları da bu etkiyi negatife çevirir.

 

Kısaca SQL Server performans değerlendirmesinde ezberinizi biraz bozmalı ve de index kelimesinin yanına Tuning Advisor,SQL Profiler, Execution Plan , Statistics , Fragmentation , Query Design gibi kelimeleri de alıp bu konuları da incelemeye başlamanız gereklidir.

Sedat SALMAN