Makale Özeti

Ne kadar performansa ihtiyacınız var? “Bir veritabanın performansı” denilince akla o veritabanına bir sorgu gönderildiğinde cevabı ne kadar zamanda alabildiğiniz gelir. Performans, “İdeal sorgu performansı, sorgu gönderildikten 700ms sonra alınan cevaptır” gibi bir cümle ile özetlenemez, çünkü “performanslı veritabanı – hızlı sorgu” yapılan işe, gönderilen sorguya, veritabanını kaç kişi kullanacağına ve en önemlisi sizin ihtiyacınıza göre değişen bir olgudur.

Makale

“Bir veritabanın performansı” denilince akla o veritabanına bir sorgu gönderildiğinde cevabı ne kadar zamanda alabildiğiniz gelir. Performans, “İdeal sorgu performansı, sorgu gönderildikten 700ms sonra alınan cevaptır” gibi bir cümle ile özetlenemez, çünkü “performanslı veritabanı – hızlı sorgu” yapılan işe, gönderilen sorguya, veritabanını kaç kişi kullanacağına ve en önemlisi sizin ihtiyacınıza göre değişen bir olgudur.

 

Bir web uygulaması kullanırken SQL server’ınızın bulunduğu sunucu çok performanslı olsa bile uygulamanın sunulduğu web sunucusu performanssız ise kullanıcıya bu “performanssız bir uygulama” olarak yansır, bunun tam tersi de mümkündür, SQL server’a sorgu çok hızlı bir şekilde iletildiği halde SQL server’ın sorgunun cevabını döndürmesi çok uzun sürerse, yine kullanıcıya bu “performanssız bir uygulama” olarak yansır. Düşünmemiz gereken başka bir konu da iş kurallarımızı uyguladığımız katmandır. Web sunucumuz ve SQL çok hızlı işlem yapıyor olsa bile, uygulamamız oldukça karışık iş kuralları uygulamayı gerektiriyorsa, bu katmanda da performanssızlık söz konusu olabilir.

 

Dolayısıyla, bir web uygulamasının performansını arttırmak demek her 3 katmanda da performansın gerektiği kadar arttırılmasıyla ilgilidir.

 

Yabancı olanlarınız için “3 katmanlı uygulama geliştirme” cümlesiyle neyi kastettiğimi biraz açmak istiyorum.

 

Profesyonel bir uygulama yazarken uygulamayı 3 tane mantıksal katmana bölünmüş gibi düşünebiliriz. Bu katmanlardan 1.’si uygulamayı kullanan kullanıcıya en yakın olan, 3.’sü en uzak olan katman olarak düşünmeliyiz.

 

1. katman, sunum katmanıdır ve kullanıcıya en yakın olan katmandır. Genelde uygulamanın sunumu bu katmanda yapılır. Günümüzde web uygulamarının yaygınlaşması ile 1. katmanın kullanıcılara uygulamayı sunan “web server” ‘lar olduğunu düşünebiliriz.

2. katman iş kurallarınızı ve mantığını uyguladığınız katmandır (DLL’ler, component’ler v.s. bulunduğu katmandır).

3. katman ise –data- veri katmanıdır ve dataların fiziksel olarak saklandığı, sql sunucu motorunun çalıştığı katmandır.

 

Microsoft her 3 katmanın da optimizasyonu ile ilgili birçok enterprise düzeyde ürün ve optimizasyon teknikleri sunmaktadır.

 

Sizlere 3. katmandan başlayarak her ay bu katmanların bir tanesini size tanıtacağım ve o katmanla ile ilgili optimizasyon tekniklerinin neler olduğuna değineceğim.

 

Not: Bahsedeceğim performans arttırımı daha çok sunucu düzeyinde olacak, sunucu düzeyinde performansın arttırımı dışında yazdığınız kodun da performansının arttırılması söz konusudur.

 

Veri Katmanı – Data Tier  Optimizasyonu (3. TIER)

 

Veri katmanı kullanıcıya en uzak olan, SQL Server’ın kurulu bulunduğu katmandır. Uygulama ile ilgili verilerin saklanması, verilerin indexlenmesi, diskten okunması, diske yazılması bu katmanda olur. SQL servisleri de bu katmanda çalışırlar.

 

Günümüzde veritabanı yöneticileri çok kısa süre içinde “yüzlerce gigabyte”’lık veritabanlarının optimizasyonu ile karşı karşıya kalabiliyorlar. Veri katmanını optimize etmek için ilk olarak SQL Server’in verileri fiziksel olarak nasıl sakladığını anlamamız gerekiyor.

 

Veritabanının Eşit Olarak Disklere Bölünmesi

 

SQL Server varsayılan olarak bir veritabanı ile ilgili tüm verileri disk üzerinde tek bir (C:\Program Files\Microsoft SQL Server\MSSQL\Data aldında .MDF uzantılı) dosya içinde saklar. Yani siz bir veritabanında 1000 tane 50 GB’lık tablo da açsanız, 5000 tane stored procedure de oluştursanız, varsayılan olarak bunların tamamı tek bir dosyada saklanır.

 

Optimizasyon için ilk olarak yapmanız gereken şey bu verileri farklı disklere bölmektir. Örneğin 500GB’lık bir veritabanınız varsa, bu veritabanını tek bir .MDF dosyasında tutmak yerine 5 ayrı diskteki 5 ayrı dosyada tutarsanız performansınız oldukça artacaktır. Peki bunu nasıl yapabiliriz?

 

Veritabanınızın üzerine sağ klikleyip “özellikler / data files” e tıkladığınızda o veritabanını oluşturan dosyaları göreceksiniz.

 

Yukarıdaki örnekte alperonsoy adlı vertiabanını oluşturan dosyayı görüyorsunuz. “Location”  bölümünde yazan, alperonsoy vertiabanını oluşturan dosya, gördüğünüz gibi uzantısı .MDF. .MDF dosyalar SQL de vertiabanlarını oluşturan “primary data file – birincil veri dosyaları” dır. Her veritabanı ilk oluşturulduğunda bir tane .MDF file’ı vardır.

“File Name” bölümünde ise dosyanın mantıksal ismi görünmektedir, mantıksal isim herhangi birşey olabilir. En sağda ise veritabanını oluşturan .MDF dosyasının dahil olduğu dosya grubunu görüyorsunuz, varsayılan ismi “PRIMARY” dir. Dikkat ederseniz bu veritabanı C: sürüsücü altında alperonsoy_Data.MDF adında tek bir dosyada tutuluyor. Bu demektirki, veritabanı 500GB’a bile ulaşsa tek bir diskte tutulacak ve zamanla performansı oldukça düşecek. Ben sunucuma ikinci bir disk takıyorum ve bu diski D: olarak tanıtıyorum. Alperonsoy veritabanımı ise yarı yarıya C: ve D: disklerine bölüştürmek istiyorum :