Görsel: Pixabay · Pixabay Lisansı
Yanlış ilk hamle
Yavaşlık fark edildiğinde ilk düşünülen şey sunucuyu büyütmektir. Bu genellikle pahalı ve geçici bir çözümdür.
Çoğu vakada sorun kaynak yetersizliği değil, birkaç kötü sorgudur. Büyütme, sorunu gizler ve bir süre sonra tekrar eder.
Adım bir: yavaş sorguları bulun
Veritabanı sistemleri, uzun süren sorguları kaydeder. Bu kaydı açın ve en çok süre tüketen sorguları listeleyin.
Genellikle şaşırtıcı bir sonuç çıkar: toplam yükün büyük bölümü az sayıda sorgudan gelir.
Sıralamayı tek seferlik süreye göre değil, toplam etkiye göre yapın. Saniyede yüzlerce kez çalışan orta hızlı bir sorgu, nadiren çalışan yavaş bir sorgudan daha zararlıdır.
Adım iki: indeks eksikliği
En yaygın sebep budur. Filtreleme ve sıralama yapılan sütunlarda indeks yoksa, veritabanı tüm tabloyu taramak zorunda kalır.
Sorgu planını inceleyin; tam tablo taraması görüyorsanız indeks eksiktir.
Ancak her sütuna indeks eklemeyin. Her indeks yazma işlemini yavaşlatır ve yer kaplar. Gerçekten kullanılan sorgulara göre ekleyin.
Adım üç: çoklu sorgu problemi
Uygulama katmanında sık görülen bir hatadır: liste çekilir, sonra listedeki her kayıt için ayrı sorgu çalıştırılır.
Yüz kayıtlık bir sayfa yüz bir sorgu üretir. Her biri hızlı olsa bile toplam süre kabul edilemez hale gelir.
Çözüm, ilişkili veriyi tek sorguda birlikte çekmektir. Bu sorun, veritabanı büyüdükçe değil, veri çoğaldıkça ortaya çıkar; bu yüzden test ortamında fark edilmez.
Adım dört: gereksiz veri çekmek
Yalnız ihtiyaç duyulan sütunları seçin. Tüm sütunları çekmek, özellikle büyük metin alanları varsa ağ ve bellek israfıdır.
Sayfalama kullanın. Binlerce kaydı çekip uygulamada filtrelemek yaygın ve maliyetli bir hatadır.
Adım beş: kilitlenme ve uzun işlemler
Uzun süren yazma işlemleri, diğer sorguları bekletir.
Toplu güncellemeleri parçalara bölün. Tek seferde yüz bin satır güncellemek, sistemi dakikalarca kilitleyebilir.
Rapor sorgularını canlı veritabanı yerine kopya üzerinde çalıştırmak, yoğun sistemlerde belirgin rahatlama sağlar.
Önbellek
Sık okunan ve nadiren değişen veriler önbelleğe alınabilir.
Önbellek temizleme kuralı baştan tanımlanmalıdır. Veri değiştiğinde önbellek temizlenmezse, kullanıcılar eski veriyi görür ve bu daha büyük bir sorundur.
Veritabanını doğrudan değiştirdiğinizde uygulama önbelleği bundan haberdar olmaz; bu durumda uygulamanın yeniden başlatılması gerekir.
Ölçün ve doğrulayın
Her değişiklikten sonra ölçün. Tahmine dayalı optimizasyon, sorunu başka yere taşımaktan ibaret kalabilir.
Bağlantı havuzu ayarları
Veritabanı bağlantıları pahalı kaynaklardır ve havuzdan yönetilir.
Havuz boyutu çok küçükse istekler bekler, çok büyükse veritabanı gereksiz yük altında kalır.
Bağlantı sızıntıları sinsi bir sorundur: kapatılmayan bağlantılar zamanla havuzu tüketir ve uygulama aniden yanıt vermez hale gelir.
Aktif bağlantı sayısını izleyin; sürekli artan bir eğri, sızıntının işaretidir.
Bakım işleri
İstatistiklerin güncel tutulması, sorgu planlarının doğru seçilmesi için gereklidir.
İndekslerin parçalanması zamanla performansı düşürür; dönemsel bakım gerekir.
Eski kayıtların arşivlenmesi, sorgu hızını doğrudan etkiler. Sürekli büyüyen tablolar bir noktada her sorguyu yavaşlatır.
Bakım işlerini düşük trafikli saatlerde zamanlayın ve süresini izleyin; uzayan bakım işleri kesintiye dönüşebilir.
Sık sorulanlar
İndeks eklemek her zaman iyi midir?
Hayır. Okuma sorgularını hızlandırır ancak her yazma işleminde güncellenmesi gerekir. Kullanılmayan indeksler yalnız maliyet üretir; düzenli olarak gözden geçirip kullanılmayanları kaldırın.
Yavaşlık aniden başladıysa sebebi ne olabilir?
Genellikle veri hacminin bir eşiği geçmesi veya yeni bir özelliğin getirdiği sorgu. Son dağıtımı ve veri büyümesini birlikte inceleyin; sorgu kayıtları çoğunlukla sebebi doğrudan gösterir.
Veritabanını ayrı sunucuya taşımalı mıyım?
Uygulama ve veritabanı aynı sunucuda kaynak için yarışıyorsa evet. Ancak ayırma ağ gecikmesi ekler; önce sorgu optimizasyonu yapılmadan alınan ayırma kararı genellikle beklenen faydayı vermez.



