PoolByte

MySQL indeks rehberi: Yavaş sorguyu ölçerek iyileştirin

· PoolByte Technology

MySQL indeks rehberi: Yavaş sorguyu ölçerek iyileştirin

MySQL indeks kullanımı, veritabanının belirli kayıtları bulma biçimini etkileyebilir. Yavaş bir sipariş listesi veya ürün aramasında önce hangi sorgunun çalıştığını anlamak gerekir; rastgele indeks eklemek doğru başlangıç değildir. Bu rehber, uygulama geliştiricisiyle birlikte sorguyu incelemek ve değişikliğin etkisini kontrollü ölçmek için bir çalışma yöntemi sunar.

Yavaş işlemi yeniden üretilebilir hale getirin

“Site bazen yavaş” ifadesi veritabanına ait bir teşhis değildir. İşlem adı, tarih aralığı, kullanılan filtre, veri büyüklüğü ve tekrar adımları kaydedilsin. Örneğin yönetim panelinde belirli müşterinin son siparişlerini açmak ile bütün siparişleri dışa aktarmak farklı iş yükleridir. Aynı ekranda görünen yavaşlığın ağ veya haricî hizmet kaynaklı olabileceğini de değerlendirin.

Geliştirici, işlemin çalıştırdığı sorguları ve çağrı sayısını incelemelidir. Tek bir yavaş sorgu kadar, her satır için yeniden sorgu çalıştırılması da gecikme yaratabilir. Hassas veriler içeren sorgu kayıtlarını herkesin erişebildiği dizine yazmayın. Müşteri bilgisi paylaşmadan örnek sorgu ve şema üzerinden çalışma yapılabilir.

İndeks bir maliyet dengesi oluşturur

İndeksler uygun sorgularda kayıt bulmaya yardımcı olabilir; ayrıca depolama ve yazma maliyeti oluşturur. Her sütuna indeks eklemek iyi bir optimizasyon değildir. MySQL'in indeks optimizasyonu dokümanı bu dengeyi ele alır. Kullanılan veritabanı sürümü ve tablo yapısı da değerlendirmeye dahil edilmelidir.

Bir örnekte sipariş listesi müşteri kimliğine göre filtrelenip tarihe göre sıralanabilir. Geliştirici, bu kullanım için mevcut indeksleri ve birden fazla sütundan oluşan indeks olasılığını inceleyebilir. Bu örnek bütün mağazalar için aynı indeks önerisi değildir. Tablo büyüklüğü, veri dağılımı ve başka sorguların ihtiyaçları seçimde önem taşır.

EXPLAIN ile sorgu planını inceleyin

EXPLAIN, veritabanının sorguyu nasıl yürütmeyi planladığına ilişkin bilgi verir. Aşağıdaki örnek yalnız eğitim amaçlıdır; tablo ve sütun adları örnektir:

EXPLAIN
SELECT id, created_at
FROM example_orders
WHERE customer_id = 123
ORDER BY created_at DESC
LIMIT 20;

Plan çıktısı tek başına gerçek süre ölçümü değildir. Tahmini satır sayısı, seçilen indeks ve erişim biçimi birlikte yorumlanır. EXPLAIN ANALYZE gibi farklı seçeneklerin sorguyu gerçekten çalıştırabildiğini hesaba katın; üretim üzerinde rastgele çalıştırmayın. Sürümünüze uygun davranışı MySQL EXPLAIN dokümanından kontrol edin.

Karşılaştırmayı aynı koşullarda yapın

Değişiklik öncesi ve sonrası aynı sorgu, aynı örnek veri ve benzer yük koşulu kullanılmalıdır. Birinci ölçüm soğuk, ikinci ölçüm önbellekten geliyorsa farkı yalnız indekse bağlamak yanıltıcı olabilir. Tek bir sonucu değil, birkaç tekrarın davranışını kaydedin. Süre yanında işlenen kayıt sayısını ve sistem yükünü de gözlemleyin.

Kontrol kümesine okuma işlemi kadar yazma işlemleri de dahil edilsin. Ürün listesi hızlanırken toplu ürün güncellemesi yavaşlayabilir. Değişikliğin iş açısından önemli yolları iyileştirip iyileştirmediğine bakın. “Yüzde yüz hızlanma” gibi bir sonuç yayımlamak için ölçüm yöntemi ve koşulları gerekir; başka projeye aynı sonucu vaat etmeyin.

Şema değişikliğini operasyon olarak planlayın

Canlı tabloya indeks eklemek, veri hacmi ve motor davranışına göre kaynak tüketebilir veya işlemleri etkileyebilir. Bakım penceresi, geri dönüş adımı ve yeterli disk alanı geliştirici tarafından değerlendirilmelidir. Yedek bulunması önemlidir; fakat yedeği geri yüklemek canlıya sonradan gelen veriyi kaybettirebilir. Değişiklik planı bu riski açıkça ele almalıdır.

Bir yönetim panelindeki “optimize” düğmesini sorgu analizinin yerine kullanmayın. Tablonun genel bakımı ile belirli sorgunun doğru indeks kullanması ayrı konulardır. Yetkiniz sınırlıysa sunucu ayarlarını değiştirmeye çalışmadan sorgu örneği, zaman bilgisi ve uygulama yolu ile sağlayıcıdan inceleme isteyin.

Geliştiriciye iletilecek kısa kayıt

  • Yavaşlayan işlem ve tam tekrar adımları.
  • Veri hacmi ile kullanılan filtre ve sıralama.
  • Hassas değerleri çıkarılmış sorgu örneği.
  • Mevcut indeksler ve sorgu planı değerlendirmesi.
  • Önce ve sonra ölçüm koşulları.
  • Yazma işlemleri, disk kullanımı ve geri dönüş kontrolü.

Veritabanı optimizasyonu her yavaşlığı çözmez. Uygulamanın başka katmanları için hosting kaynakları rehberini inceleyebilirsiniz. Projenizin iş yükünü PoolByte'a ileterek uygun altyapı kapsamını değerlendirebilir, web hosting seçeneklerine bakabilirsiniz. İndeks kararını gerçek şema ve ölçüme dayandırmak, tahmine göre paket büyütmekten daha açıklayıcı bir teşhis sağlar.