Yavaş Sorgu Nedir ve Neden Önemlidir?
Veritabanı performansını iyileştirme konusunda ilk adım, hangi sorguların "yavaş" olduğunu tespit etmektir. MySQL, bu tip sorguları izlemek için oldukça güçlü bir araç sunar: Yavaş Sorgu Günlüğü.
Yavaş Sorgu Günlüğünü Aktif Etme
-- Yavaş sorgu günlüğünü açmak için:
SET GLOBAL slow_query_log = 'ON';
-- Yavaş sorgu günlüğü dosyasını belirlemek için:
SET GLOBAL slow_query_log_file = '/path/to/your/slow-query.log';
-- Yavaş sorgu zamanını ayarlamak için (örneğin 2 saniye):
SET GLOBAL long_query_time = 2;
Yavaş sorgu günlüğü aktif olduğunda, MySQL veritabanınız, 2 saniyeden uzun süren her sorguyu kaydedecektir. Bu, ilk adımınız olan sorunlu sorguları tespit etmek için harika bir başlangıçtır.
Yavaş Sorguları Analiz Etme
mysqldumpslow -s t /path/to/your/slow-query.log
Yavaş sorguları analiz ederken, şu faktörlere dikkat etmek önemlidir:
- Sorgu Süresi: En fazla zaman alan sorgular.
- Sorgu Tipi: Sadece SELECT sorguları değil, INSERT, UPDATE gibi diğer sorgular da zaman alabilir.
- Tabloların Kullanımı: Hangi tabloların sorgulara dahil olduğunu gözden geçirin. Özellikle çok büyük tablolar zaman alabilir.
Yavaş Sorguları Optimize Etme
1. İndeks Kullanımı: İndeksler, sorguların daha hızlı çalışmasını sağlar. Eğer sorgularınızda `WHERE` veya `JOIN` ifadeleri varsa, bu kolonlar üzerinde uygun indeksler oluşturun.
CREATE INDEX idx_column_name ON table_name (column_name);
2. Sorgu Yazımını İyileştirme: Sorgu yazımında, gereksiz `JOIN` işlemleri veya alt sorguları azaltmaya çalışın. Ayrıca, `SELECT *` kullanmak yerine sadece ihtiyacınız olan kolonları seçmek performansı artırabilir.
3. Veritabanı Yapısını Gözden Geçirme: Eğer veri çok büyükse ve sorgular halen yavaş çalışıyorsa, veritabanı yapısını yeniden gözden geçirmek gerekebilir. Verilerin daha küçük parçalara bölünmesi veya veri türlerinin optimize edilmesi düşünülebilir.
4. Sorgu Ön Belleği Kullanma: MySQL, bazı sorguları ön belleğe alabilir. Bu, aynı sorgunun tekrar çalıştırılmasında performans iyileştirmesi sağlar. `QUERY_CACHE` özelliğini kullanarak bu işlevi etkinleştirebilirsiniz.
SET GLOBAL query_cache_size = 1048576;
SET GLOBAL query_cache_type = ON;