MySQL Query Cache ve Slow Query Log Analizi

HazalHost Sistem Ekibi
11 Mart 2026
8 dk okuma
Performans / Optimizasyon

Sunucunuza 16 Çekirdek İşlemci ve 32GB RAM takmış olabilirsiniz, ancak 1 satırlık "Kötü yazılmış bir Veritabanı Sorgusu (Query)" tüm o devasa sunucuyu saniyeler içinde kilitleyebilir. Sitenizi içten içe kemiren o kötü kod satırlarını nasıl tespit edeceğinizi öğreneceğiz: Slow Query Log.

Slow Query Log Nedir?

Slow Query Log (Yavaş Sorgu Günlüğü), MySQL veya MariaDB'de varsayılan olarak kapalı olan, ancak açıldığında X saniyeden daha uzun süren her SQL sorusunu saniye saniye kaydeden hayat kurtarıcı bir kayıt mekanizmasıdır.

Diyelim ki bir geliştiriciniz tema dosyasına bir kod ekledi: "Tüm müşterilerin sepetindeki eski ürünleri bul ve tarihe göre listele."
Eğer tabloda milyon satır varsa bu sorgunun çalışması 4 saniye sürebilir. Site 4 saniye donar. Siz suçu sürekli "ram yetmiyor, işlemci yetmiyor" diyerek sunucu kaynaklarında ararsınız, fakat asıl suçlu bu 1 satırlık SQL komutudur.

Slow Query Log Nasıl Aktif Edilir?

My.cnf (veya mariadb.conf.d/50-server.cnf) dosyanızı VDS üzerinden düzenleyin ve şu satırları ekleyin:

[mysqld]
# Loglamayı başlat
slow_query_log = 1

# Kayıtların tutulacağı dosyanın yolu
slow_query_log_file = /var/log/mysql/slow-query.log

# KRİTİK AYAR: X Saniyeden uzun sürenleri kaydet (1 saniye genelde idealdir)
long_query_time = 1

# İndeks kullanmayan (tüm tabloyu tarayan) sorguları da kaydet (Opsiyonel ama önerilir)
log_queries_not_using_indexes = 1

Ayarı girdikten sonra systemctl restart mysql komutuyla servisi yeniden başlatın.

Log Dosyasını Analiz Etmek (mysqldumpslow)

Zamanla slow-query.log dosyanız dolacaktır. Bu dosyanın içi çok karmaşıktır. İnsan gözüyle rahat okunması için Linux sisteminizde zaten yüklü olan mysqldumpslow komutunu kullanabiliriz.

# En çok zaman alan (zaman bazlı) ilk 5 yavaş sorguyu göster
mysqldumpslow -s t -t 5 /var/log/mysql/slow-query.log

Bu aracın vereceği çıktı şuna benzer olacaktır:

Count: 450  Time=2.10s (945s)  Lock=0.00s (0s)  Rows=5.0 (2250), wp_user[wp_user]@localhost
  SELECT * FROM wp_postmeta WHERE meta_key = 'S_top_view' ORDER BY post_id DESC

Sonucu Yorumlayalım: Görüldüğü üzere, wp_postmeta tablosunda "top_view" alanını en baştan aşağıya kadar tarayan bir SQL komutu 450 kez çalışmış ve her çalışmada ortalama 2.10 saniye sunucuyu oyalamış. Sitenizin katilini resmen eliyle yakaladınız. Artık o eklentiyi silmeli veya veritabanındaki meta_key kolonuna INDEX eklemelisiniz.

🚀 HazalHost MySQL Optimizasyonu

Veritabanı optimizasyonunun zorluğuyla uğraşmak istemiyorsanız, bırakın uzmanlarımız yapsın. HazalHost'un yönetilen sunucu (Managed VDS) hizmetlerinde, yavaş sorgularınız teknik ekibimiz tarafından proaktif olarak izlenir, size raporlanır ve veritabanı değişkenleriniz trafik yapınıza göre InnoDb Buffer ayarlarıyla şekillendirilir.

Tam Optimizasyonlu Sunucular

MySQL Query Cache (Eski Bir Dost Neden Öldü?)

Genellikle yavaşlık sorunlarında akla gelen ilk şey MySQL Query Cache'i açmaktır. Ancak MariaDB 10+ ve MySQL 8.0 ile Query Cache kalıcı olarak sunuculardan silinmiştir!
Çünkü Query Cache, çok okunan veritabanlarında iyi çalışsa da yeni bir "Update" yapıldığında kendini kilitleyerek modern sitelerde faydadan çok yavaşlığa sebep oluyordu. Bunun yerine artık bir önceki makalemizde bahsettiğimiz Redis / Memcached (Object Cache) kullanılması zorunludur.

Sonuç

Siteniz anlamsızca yavaşlıyorsa ve RAM yetmiyor sanıyorsanız ilk işiniz Slow Query logu açıp 1-2 gün izlemektir. Sorun %90 ihtimalle donanımsal değil, bir tema veya eklentinin yazdığı kalitesiz bir satır SQL kodudur.

#mysql log #slow query #veritabanı yavaşlığı #sorgu analizi
Paylaş:

İçindekiler

🚀 VDS Sunucu Arıyorsan

Türkiye lokasyonlu, DDoS korumalı VDS sunuculara hemen göz at.

VDS Paketlerini İncele