Kısa cevap: Çoğu zaman değil. Yavaş veritabanının en yaygın sebebi eksik indeks ve kötü yazılmış sorgudur; disk üçüncü sıradadır. Suçluyu bulmanın sırası şu: önce yavaş sorgu kaydını açın, sonra indeksleri kontrol edin, en son diske bakın. Aşağıda her adımın nasıl yapıldığı var.
Site yavaşladığında ilk akla gelen daha güçlü donanım almaktır. Ama indeksi eksik bir sorgu, en hızlı diskte bile yavaş çalışır; disk değiştirmek o durumda sadece maliyeti artırır.
1. Yavaş sorgu kaydını açın
MySQL ve MariaDB, belirlediğiniz süreden uzun süren sorguları ayrı bir dosyaya yazabilir. Bu kayıt açılmadan yapılan her tahmin körlemedir.
Kaydı açtıktan sonra bir gün bekleyin ve dosyaya bakın. Genelde şaşırtıcı bir sonuç çıkar: sitenin tamamını yavaşlatan şey, günde binlerce kez çağrılan tek bir sorgudur.
Aradığınız şey en uzun süren sorgu değil, süre çarpı çağrı sayısı en yüksek olan sorgudur. On saniye süren ama günde bir çalışan bir rapor sorgusu sorun değildir; yarım saniye süren ama her sayfa açılışında çalışan bir sorgu sorundur.
2. İndeksleri kontrol edin
Yavaş veritabanı vakalarının büyük kısmı burada çözülür. İndeks, veritabanının aradığı satırı tarayarak değil doğrudan bulmasını sağlar. İndeks yoksa tablo baştan sona okunur.
Bunun etkisi tablo büyüdükçe katlanır. Bin satırlı tabloda indeks eksikliği hissedilmez, yüz bin satırda site durur. Yani "eskiden hızlıydı" diyen sitelerde sebep genelde budur: veri büyüdü, indeks eklenmedi.
Şüphelendiğiniz sorgunun başına EXPLAIN yazıp çalıştırın. Çıktıda tam tablo taraması görüyorsanız o sorgunun kullandığı sütuna indeks gerekiyor demektir.
3. Bellek ayarlarına bakın
Veritabanı, sık kullanılan veriyi bellekte tutar. Bellek havuzu küçükse aynı veri sürekli diskten okunur ve disk suçlu gibi görünür, oysa sorun ayardır.
Sunucunuzun belleği yeterliyse veritabanı önbelleğine ayrılan alanı büyütmek, disk değiştirmekten çok daha etkili ve ücretsiz bir kazançtır. Bu ayarın doğru değeri sunucunun toplam belleğine ve üzerinde çalışan diğer servislere bağlıdır.
4. En son diske bakın
İlk üç adım temizse sıra diske gelir. Disk kaynaklı bir darboğazın belirtisi şudur: sorgular kendi başına hızlı çalışıyor ama eşzamanlı istek arttığında hepsi birden yavaşlıyor.
Bunun sebebi kuyruğa girmedir. Disk aynı anda gelen istek sayısını karşılayamadığında istekler sıraya girer ve bekleme süresi toplanır. Bu noktada NVMe ile SATA arasındaki komut kuyruğu farkı doğrudan hissedilir; farkın nereden geldiğini NVMe ile SATA SSD farkı yazısında anlattık.
Paylaşımlı hostingte durum
Paylaşımlı hosting üzerinde çalışıyorsanız yavaş sorgu kaydına ve bellek ayarlarına erişiminiz olmayabilir. Bu durumda elinizde kalan iki araç vardır: sorguları ve indeksleri düzeltmek, ve önbellek kullanmak.
Önbellek, veritabanına hiç gitmeden sayfayı sunar. Yani en yavaş sorgu bile önbelleklenmiş bir sayfada devre dışı kalır. WordPress için seçenekleri WordPress önbellek eklentileri yazısında karşılaştırdık.
Veritabanı sunucusu ayarlarına erişmeniz gerekiyorsa root erişimi olan bir ortama geçmeniz gerekir; gereksinimleri veritabanı sunucusu gereksinimleri yazısında listeledik.
Sıralamayı bozmayın
Bu dört adımı sırayla uygulamanın sebebi maliyettir. İndeks eklemek ücretsizdir ve dakikalar alır. Bellek ayarı değiştirmek ücretsizdir. Disk ya da sunucu yükseltmek para ve zaman ister.
Sıralamayı tersten yapan çoğu kişi daha güçlü sunucuya geçer, birkaç ay sonra aynı yavaşlıkla karşılaşır ve sorunun donanımda olmadığını anlar. Veri büyümeye devam ettiği için indekssiz sorgu yeni sunucuyu da yakalar.
Sık Sorulan Sorular
Veritabanı yavaşsa ilk neye bakmalıyım?
Yavaş sorgu kaydına. Belirlediğiniz süreden uzun süren sorguları dosyaya yazdırın, bir gün bekleyin ve süre çarpı çağrı sayısı en yüksek olan sorguyu bulun.
İndeks eksikliği nasıl anlaşılır?
Şüphelendiğiniz sorgunun başına EXPLAIN yazıp çalıştırın. Çıktıda tam tablo taraması görünüyorsa o sorgunun kullandığı sütuna indeks gerekiyor demektir.
Site eskiden hızlıydı, şimdi neden yavaş?
Genelde veri büyüdü ama indeks eklenmedi. İndeks eksikliğinin etkisi tablo büyüdükçe katlanır; bin satırda hissedilmez, yüz bin satırda site durur.
Disk kaynaklı darboğazın belirtisi nedir?
Sorgular tek başına hızlı çalışıyor ama eşzamanlı istek arttığında hepsi birden yavaşlıyorsa disk kuyruğa giriyor demektir. Bu, komut kuyruğu sınırının hissedildiği durumdur.
Daha güçlü sunucu almak çözer mi?
İndeks eksikliği varsa çözmez. Veri büyümeye devam ettiği için indekssiz sorgu yeni sunucuyu da yakalar. Önce sorgu ve indeks tarafını düzeltin, donanımı en son değerlendirin.
Paylaşımlı hostingte ne yapabilirim?
Sorguları ve indeksleri düzeltmek, bir de önbellek kullanmak. Önbellek veritabanına hiç gitmeden sayfayı sunar, yani en yavaş sorgu bile önbelleklenmiş sayfada devre dışı kalır.



