SQL Server’ın temel işleyişi, veritabanı yönetim sisteminin kullanıcı isteklerine hızlı ve doğru bir şekilde yanıt vermesi üzerine kuruludur. Client-Server mimarisi, bu yapının kalbinde yer alır. Client (istemci) tarafı, veritabanıyla etkileşim kurmak isteyen kullanıcılar ya da uygulamalar tarafından temsil edilirken, server (sunucu) tarafı SQL Server’ın kendisidir. Server (sunucu), clientden (istemciden) gelen sorguları işler, veritabanından verileri alır ve sonucu cliente (istemciye) geri gönderir. Bu işleyişin düzgün olması için SQL Server hem fiziksel hem de yazılımsal düzeyde optimizasyonlar yapar.
Client-Server İlişkisi
SQL Server’ın client-server ilişkisi, TCP/IP protokolü üzerinde çalışır. Client (istemci) bir sorgu gönderdiğinde, server (sunucu) bu sorguyu alır, işler ve veritabanından gerekli bilgileri alarak cliente (istemciye) geri döner. Bu modelin en büyük avantajı, client (istemci) tarafının hafif olmasıdır; tüm ağır iş yükü server (sunucu) tarafından gerçekleştirilir.
Bu yapı, birçok farklı kullanıcının ya da uygulamanın aynı anda SQL Server ile etkileşim kurmasına olanak tanır. Özellikle çok kullanıcıya hizmet veren kurumsal ortamlarda, SQL Server’ın eşzamanlı işleme kapasitesi çok önemlidir.
SQL ve T-SQL Arasındaki Farklar
SQL, tüm veritabanı yönetim sistemleri için standart bir dildir. Veri tanımlama, veri manipülasyonu ve veri kontrolü için temel komutları içerir. Örneğin:
- SELECT: Veritabanından veri çekmek
- INSERT: Veritabanına veri eklemek
- UPDATE: Mevcut veriyi güncellemek
- DELETE: Veriyi silmek
Ancak, T-SQL (Transact-SQL), SQL Server’a özgü komutlar ve fonksiyonlar içerir. Döngüler, koşullar ve hata ayıklama gibi programlama özellikleri ekleyerek SQL’in işlevselliğini genişletir. T-SQL ayrıca stored procedures ve triggers gibi SQL Server’a özel yapılar oluşturulmasını sağlar. Bu programlama yetenekleri sayesinde daha karmaşık işlemler ve süreçler SQL Server içerisinde otomatik hale getirilebilir.
Performans ve Optimizasyon
Veritabanı performansı, uygulama hızını ve verimliliğini doğrudan etkiler. Özellikle büyük veri tabanları ile çalışan sistemlerde, performansı etkileyen unsurların iyi anlaşılması ve yönetilmesi hayati önem taşır. Bu noktada, SQL Server’ın çeşitli performans ölçütleri ve bileşenlerini optimize etmek için çeşitli yaklaşımlar bulunmaktadır.
1 – AVG Disk Queue Length
Disk Kuyruğu Uzunluğu, SQL Server’ın diskteki işlemleri ne kadar süre beklettiğini gösterir. Yüksek disk kuyruk uzunlukları, disklerin yetersiz kaldığını ve SQL Server’ın diske olan erişim süresinin arttığını gösterir. Bu sorunu çözmek için:
- Daha hızlı diskler (örneğin SSD’ler) kullanılabilir.
- Veri sıkıştırma ve indeks optimizasyonu gibi teknikler ile diske olan erişim ihtiyacı azaltılabilir.
2 – İndeks Bozulması (Fragmantasyon)
SQL Server’daki indeksler, sorguların daha hızlı çalışmasını sağlar. Ancak, zamanla indeksler parçalanabilir (fragmentation) ve bu da sorguların daha yavaş çalışmasına neden olur. İndeks bozulmasını anlamak ve çözmek için:
- Index Rebuild ve Index Reorganize işlemleri düzenli olarak yapılmalıdır.
- Bu işlemler sayesinde indekslerin yapısı düzenlenir ve veri erişim hızları artar.
3 – Page Life Expectancy (PLE)
Page Life Expectancy, bellekte tutulan veri sayfalarının ömrünü ölçer. Yüksek PLE değerleri, verilerin uzun süre bellekte tutulduğunu ve SQL Server’ın disk erişimine daha az ihtiyaç duyduğunu gösterir. PLE değeri düşükse, bu, belleğin yetersiz olduğunu ve SQL Server’ın sürekli olarak diske erişmek zorunda kaldığını gösterir. Bu durumu iyileştirmek için:
- Daha fazla RAM eklemek,
- Sık kullanılan verileri bellekte tutmak için buffer pool extensions kullanmak etkili olabilir.
4 – RAM Bus Hızı
RAM bus hızı, verinin bellekte ne kadar hızlı işlenebileceğini belirler. SQL Server’ın büyük veri kümeleriyle çalışması gerektiğinde, yüksek RAM bus hızları sorgu yanıt sürelerini ciddi şekilde iyileştirir. Özellikle büyük veri analizleri yapıldığında ya da real-time veritabanı işlemlerinde, hızlı bir RAM veri akışı performans farkı yaratabilir.
5 – CPU Çekirdek Sayısı
SQL Server, çok çekirdekli işlemciler kullanarak paralel işlemleri gerçekleştirebilir. Sorguların aynı anda birçok çekirdek üzerinde çalışması, performansı büyük ölçüde artırır. Bu, özellikle yüksek işlem gücü gerektiren raporlama, analiz ve büyük veri işlemleri için önemli hale gelir. SQL Server’ın çekirdek kullanımını optimize etmek için:
- Paralel işleme ayarlarını optimize etmek,
- CPU affinity ayarlarını dikkatli yönetmek gereklidir.
Performans Altında Diğer Faktörler
Performansı iyileştirmek için yukarıdaki başlıklara ek olarak, çeşitli ayar ve yapılandırmalara dikkat edilmesi gerekir:
- TempDB Optimizasyonu: TempDB, SQL Server’ın geçici veriler için kullandığı veritabanıdır. TempDB’nin performansı yavaşsa, tüm SQL Server performansı etkilenebilir. Bu yüzden TempDB’yi farklı bir disk üzerinde tutmak veya birden fazla dosya oluşturmak performansı artırabilir.
- Transaction Log Management: Transaction log dosyalarının boyutunun kontrolsüz büyümesi, SQL Server’ın performansını yavaşlatabilir. Transaction log backup işlemleri ile bu dosyaların düzenli olarak yedeklenmesi, log boyutunu kontrol altında tutar.
- Veritabanı Otomasyonu ve İşlem Planları: SQL Server’daki performans sorunlarını önlemek için SQL Server Agent kullanarak düzenli bakım görevleri tanımlanabilir. Bu görevler arasında backup, rebuild index ve update statistics gibi işlemler yer alır.
Bu yapı ve faktörlerin doğru anlaşılması ve optimize edilmesi, SQL Server’ın en yüksek performansla çalışmasını sağlayacaktır.
Yukarıdaki bölümde SQL Server’ın çalışma mantığını ve performans optimizasyonunu açıkladık. Bu bölümde ise akılda kalıcığını artırmak adına konuyu daha somut bir örnekle anlatmak istedim. Şimdi bu karmaşık konuyu basitleştirip, gerçek hayatla bağdaştırabileceğimiz bir senaryo üzerinden anlatmaya çalışacağım. Bu senaryo, SQL Server’ı bir restoran mutfağı ile karşılaştırarak açıklayacaktır.
SQL Server’ın Bir Restoran Mutfağı Olarak Çalışması
Senaryo: SQL Server’ı, bir restoranın mutfağı gibi düşünebiliriz. Müşteriler (client-istemciler) restorana gelir ve sipariş verir. Restoranın mutfağı (server-sunucu) ise bu siparişleri alır, işler ve yemekleri hazırlayarak müşterilere sunar. Restoranın performansı, müşteri memnuniyetini doğrudan etkiler.
Şimdi bu senaryoya göre SQL Server’ın çalışma mantığını açıklayalım.
1 – İstemci-Sunucu İlişkisi (Müşteri-Mutfak İlişkisi)
- Restoran müşterileri (istemciler) bir yemek siparişi verir (SQL sorgusu).
- Bu sipariş mutfağa (SQL Server’a) gider ve burada şefler (SQL motoru) yemekleri hazırlar.
- Şefler, siparişin (sorgunun) hangi malzemeleri (veri) içerdiğine göre mutfakta hazırlık yapar ve sonunda yemek müşteriye sunulur.
Bu, SQL Server’da istemciden gelen sorgunun işlenmesi ve sonuçların istemciye geri döndürülmesi sürecine benzer.
2 – SQL ve T-SQL Arasındaki Fark (Standart Yemek Tarifleri vs. Şefin Özel Tarifleri)
SQL, restoranın mutfağında kullanılan standart tariflerdir. Örneğin, bir müşteri makarna siparişi verdiğinde, mutfakta herkesin bildiği standart bir makarna tarifi vardır. Bu tarif, her restoranın menüsünde bulunur. İşte bu, SQL’in temel komutlarıdır; veri ekleme (INSERT), veri çekme (SELECT) gibi.
T-SQL ise şefin yaratıcılığını konuşturduğu özel tariflerdir. Örneğin, bir müşteri “spesiyal makarna” siparişi verdiğinde, şef kendi özel malzemelerini ve yöntemlerini kullanarak bu tarifi uygular. Döngüler, koşullu ifadeler ve stored procedure’ler gibi T-SQL özellikleri bu özel tarifler gibidir.
3 – Performans Optimizasyonu: Restoranın Mutfak Düzeni
Şimdi restoranın mutfak düzeninin ne kadar iyi olduğuna bakalım. Mutfak düzeni, performansı doğrudan etkiler. Eğer mutfakta her şey dağınıksa, şefler malzemeleri bulmakta zorlanır ve siparişler gecikir. Aynı şekilde, SQL Server’da veri düzgün organize edilmezse, sorguların işlenmesi daha uzun sürebilir.
AVG Disk Queue Length (Yemek Malzemeleri Stoklama)
- Mutfağın kilerinde (disk) malzemeler vardır. Eğer şef sürekli olarak kilerde malzeme aramak zorunda kalıyorsa, yemeklerin hazırlanması yavaşlar.
- Eğer kilerde bir kuyruk varsa, şeflerin beklemesi gerekir. Bu da restoranın yavaşlamasına neden olur. Bu yüzden, kilerde malzeme bulundurmak önemlidir (daha hızlı diskler kullanmak gibi).
İndeks Bozulması (Fragmantasyon) (Malzemelerin Düzeni)
- Mutfakta tüm malzemeler düzgün sıralanmış olmalıdır. Eğer makarna kutuları karışık bir şekilde yerleştirilmişse, şefler makarnayı bulmak için vakit kaybeder.
- Bu nedenle, malzemeler düzenli olarak dizilmeli (index rebuild/reorganize) ve şeflerin erişimine hazır hale getirilmelidir.
Page Life Expectancy (Malzemelerin Hazır Beklemesi)
- Bazı malzemeler sürekli kullanılır; örneğin tuz, un gibi temel malzemeler hep mutfakta hazır tutulur (RAM’de saklanan veri).
- Eğer mutfakta bu malzemeler hazırda bulunmazsa, şef her seferinde kilerden almak zorunda kalır (disk erişimi), bu da zaman kaybına neden olur. O yüzden temel malzemelerin mutfakta, el altında tutulması gerekir (yüksek PLE).
RAM Bus Hızı (Şeflerin Hızı)
- Şeflerin elindeki bıçaklar ne kadar kaliteli ve keskinse, yemek o kadar hızlı hazırlanır. RAM’in hızını şeflerin hızına benzetebiliriz. Yüksek RAM bus hızı, verilerin hızlıca işlenmesini sağlar, tıpkı bir şefin hızlıca malzemeleri doğraması gibi.
CPU Çekirdek Sayısı (Birden Fazla Şefin Aynı Anda Çalışması)
- Restoranın mutfağında birden fazla şef varsa, aynı anda birçok sipariş hazırlanabilir. Aynı şekilde, SQL Server’da birden fazla CPU çekirdeği varsa, birçok işlem aynı anda yapılabilir.
- Büyük restoranlarda (büyük veritabanlarında) birden fazla şefin birlikte çalışması, işlerin hızlanmasını sağlar.
4 – Diğer Performans Unsurları: Restoranın Genel İşleyişi
- TempDB (Geçici İşlemler): Restoranda her gün birçok kısa süreli iş yapılır, örneğin, bir garnitür hazırlanır ve sonra servis edilir. TempDB, SQL Server’ın bu kısa süreli işlerini gerçekleştirdiği bir mutfak bölmesidir.
- Transaction Log Management: Restorandaki her sipariş bir kayıt defterine yazılır. Bu, şeflerin ne kadar iş yaptığını gösterir. Eğer bu defter kontrolsüz büyürse, işlerin yavaşlamasına neden olur (transaction logların büyümesi).