MySQL'de Yavaş Sorguları Tespit Etme ve Index Optimizasyonu
Veritabanı Darboğazlarını (Bottleneck) Çözme Rehberi
Özellikle forum sistemleri veya anlık kimlik doğrulama yapan Radius (AAA) sunucuları gibi yüksek okuma/yazma (I/O) oranına sahip veritabanlarında, donanımı (RAM/CPU) artırmak sorunu sadece erteler. Asıl çözüm sorgu optimizasyonudur.
Yavaş Sorguları (Slow Queries) Nasıl Buluruz?
MySQL konfigürasyon dosyasında (my.cnf veya mysqld.cnf) slow query log özelliğini açmak ilk adımdır:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
Bu ayar, 2 saniyeden uzun süren tüm sorguları log dosyasına yazar. Daha sonra mysqldumpslow aracı ile bu logları analiz edip, en çok tekrar eden ve en uzun süren sorguları tespit edebilirsiniz.
EXPLAIN Komutu ve Index Kullanımı
Sorunlu sorguyu bulduktan sonra başına EXPLAIN yazarak çalıştırın. Çıkan tabloda type sütunu ALL değerini gösteriyorsa, veritabanınız Full Table Scan (Tüm Tabloyu Tarama) yapıyor demektir. Milyonlarca satırlık bir tabloda bu işlem diski felç eder.
Doğru Indexleme: Sıkça `WHERE`, `ORDER BY` veya `JOIN` işlemlerinde kullanılan sütunlara (Örneğin: `user_id`, `created_at`) Index (Anahtar) eklemek arama sürelerini milisaniyelere düşürür.
Composite Index (Birleşik Anahtar): Eğer sorgunuzda birden fazla şart varsa (`WHERE status='active' AND category_id=5`), bu iki sütunu kapsayan tek bir Composite Index oluşturmak performansı katlar. Ancak gereksiz her indexin INSERT ve UPDATE işlemlerini yavaşlatacağını unutmayın.
Veritabanı kilitlenmelerini (Deadlock) çözmek için InnoDb motorunda hangi izolasyon seviyelerini (Isolation Levels) tercih ediyorsunuz?
Yavaş sorguları tespit ederken EXPLAIN komutundaki "Full Table Scan" uyarısını görmek her zaman hayat kurtarır. İndeksleme şart!
Cevap yazmak için giriş yapmalısınız.
Giriş Yap