Yazılımcı veritabanını ne kadar bilmeli?

İyi bir yazılımcı veritabanını ne kadar iyi bilmeli? “Hayır ben kod yazarım veritabanından anlamasam da olur” mu denmeli. Yoksa bir veritabanı uzmanı kadar veritabanını bilmeli mi?

Tecrübelerime dayanarak, bir yazılım uzmanının mutlaka veritabanını iyi bilmesi gerekir diyebilirim. Peki siz bir yazılımcı olarak ben veritabanını iyi biliyorum, tablo yaratabiliyorum , Stored Procedure yazabiliyorum diyebilir misiniz? Hatta ben sıfırdan bir veritabanı yaratırım fonksiyonda yazarım mı diyorsunuz. Bir yazılımcı olarak bunları ister istemez öğreniyorsunuz. Tablo yaratıp, ilgili tabloya kayıt ekleyebiliyor, güncelleyebiliyor, diliyor ve kayıtları alabiliyorsunuz. Eğer uygulamanızın veritabanı çok büyük değilse veritabanı bilginizi kimse ölçmeyecektir. Çünkü yazdığınız sorgular mutlaka sorunsuz çalışacaktır. Tablo eklemeniz yeni Stored Procedure’lar yaratmanız sistemi etkileyemecektir.


Peki veritabanınız büyüdü, artık performans sorunuyla karşı karşıya kaldınız, sisteminiz yavaş çalışıyor, müşterileriniz şikayet ediyor. Stres altına girdiniz artık. Peki aynı kodlarla 1 hafta önce çok güzel çalışıyordu. Ne oldu? Veritabanınız güzel bir şekilde çalışırken bir anda sekteye uğraması hiçde şaşılacak bir şey değildir. Zamanı geldiğinde bu darboğazdan nasıl çıkabileceğinizi biliyorsanız en fazla 1 hafta boyunca sıkıntı çeker geceleri mesaiye kalır sorunu halledersiniz. Ama bu 3 ay sonra, müşterilerinizin sizi arayıp sistem yavaş demesini engellemez. Zaten yazılım dünyasında hiç bir problem yoktur ki çözümü tek ve kesin olsunç Her uygulamanın yapısı gereği çözümleri farklıdır. Peki veritabanımız artık geç cevap veriyorsa neler yapılabilir.

  1. Tabloların indexlerini kontrol edin. Mutlaka her tablonuzda index olmalı. Fakat bu demek değildir ki her sütuna index koyalım. Gerektiği yerde index koymalıyız. Yoksa bu seferde yarattığınız gereksiz indexleri silmek için uğraşırsınız.
  2. Arama sorgularınızı kontrol edin. Gereksiz tablo birleştirmeleri yapmayın. Gereksiz alanları almayın. Ya da kolay olsun diye SELECT * FROM TABLE şeklinde verileri çekmeyin.
  3. Olabildiğince update işlemlerinden kaçının. Örneğin; haberin okunma sayısının yer aldığı sütunu sürekli güncellemeyin. Bir tabloya kayıt ekleyin ve belli aralıklarla okunma sayısını toplu olarak güncelleyin. Veritabanı işlemleri içerisinde, update işlemi diğer tüm işlemlerden daha yavaştır.
  4. Eğer herhangi bir kritere göre kayıt sayısına ihtiyacınız varsa
    SELECT Count(*) FROM TableName şeklinde almayın. Bunun yerine
    SELECT rows FROM sysindexes WHERE id = OBJECT_ID(‘TableName’) AND indid = 2
  5. Sorgularınızın başında SET NOCOUNT ON kullanın. Sorgu çektiğinizde toplam etkilenen kayıt sayısı da hesaplanır. Bunun hesaplanmasını iptal edin. Boşuna network trafiği yaratmayın. Zaten istemci bu bilgiyi göremeyecektir.
  6. Mümkün olduğunca Having, Group by ve Order By kullanmaktan kaçının.
  7. Tablolar arasındaki birleştirme (JOIN) işlemlerini string ifadeler üzerinden yapmayın. Mutlaka integer alanlar üzerinden join yapın.
  8. Mümkün olduğunca string ifadeler üzerinden filtreleme yapmayın. Bunun yerine integer değerler kullanın.

Örneğin SELECT FirstName, LastName FROM Users WHERE City = ‘ISTANBUL’ yerine
SELECT FirstName, LastName FROM Users WHERE CityID = 34
sorgusunu kullanın.

Bunun gibi bir çok ipuçları sıralayabilirim.

Yazılımcı olduğuzda bir şekilde tablo yaratıp ondan kayıt çekebilirsiniz. Çalışacaktır da. Bunu her yazılımcı yapabilecek kabiliyettedir. Sizin yaratacağınız fark diğer yazılımcıdan daha hızlı ve performanslı çalışacak şekilde bunları yapmanızdır. Eğer bir sorgu yazdığınızda kendi kendinize ben bunu daha hızlı çalışacak şekilde nasıl yazarım sorunusu kendi kendinize sormalısınız. Genelde bundan daha hızlı çalışamaz en performanslı şekilde yazdım dersiniz, ama mutlaka en iyisi her zaman vardır. Tabi en iyisi var diye sürekli olarak optimize etmeye çalışmamalısınz. Optimum çalışacak şekilde yazmanız yeterli olacaktır. Bunun için sorgularınızda mutlaka ExecutionPlan’ına bakın. En fazla nerde takılmış. Bunu bulun ve burayı optimize etmeye çalışın.

Bu konu üzerine söylenecek çok şeyler var. Ama şimdilik bu kadar.

ALINTIDIR : Serkan KARAARSLAN

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir