Teknik

MySQL Yavaş Sorgu Günlüğü: E-Pin Panelini Geceleri Kilitleyen Sorguyu Tek Dosyada Yakalamanın Yolu

MySQL yavaş sorgu günlüğünü açmak, okumak ve yorumlamak. Rows_examined, long_query_time ve özet çıkarma ile e-pin panelini yavaşlatan sorguyu bul.

MySQL Yavaş Sorgu Günlüğü: E-Pin Panelini Geceleri Kilitleyen Sorguyu Tek Dosyada Yakalamanın Yolu

Panel yavaşladığında ilk refleks neredeyse herkeste aynıdır: "sunucu yetersiz, paketi yükseltelim." Daha fazla RAM, daha fazla çekirdek, belki VDS. Bir hafta iyi gider, sonra aynı yavaşlık geri döner. Çünkü sorun kapasitede değildi; sisteminde, günde belki yüz kez çalışan tek bir sorgu vardı ve o sorgu her seferinde yüz binlerce satırı tarıyordu. Donanım büyüdükçe o sorgu da büyümeye devam etti.

Bunu tahmin ederek bulamazsın. "Sanırım sipariş listesi ağır" demek bir teşhis değil. MySQL'in tam bu iş için içinde hazır duran bir aracı var: yavaş sorgu günlüğü. Belirlediğin süreden uzun süren her sorguyu, çalışma zamanıyla, taradığı satır sayısıyla ve tam metniyle bir dosyaya yazar. Doğru okuduğunda, e-pin satış scriptini yavaşlatan sorguyu tahminle değil kanıtla bulursun. Bu yazı o dosyayı açmayı, satırların anlamını ve hangi sayının gerçekten önemli olduğunu anlatıyor.

1 snPratikte doğru başlangıç eşiği
1:1İdeal taranan/dönen satır oranı
%80Yavaşlığın kaynaklandığı sorgu oranı: ilk 5 desen
0Günlük okumadan yapılan doğru optimizasyon sayısı

Günlüğü açmak gerçekten sunucuyu yavaşlatır mı?

En yaygın bahane bu. Gerçek şu: eşiği makul tuttuğun sürece yazma maliyeti ihmal edilebilir düzeydedir, çünkü yalnızca eşiği aşan sorgular kaydedilir ve sağlıklı bir sistemde bunlar zaten azdır. Riskli olan tek ayar, eşiği sıfıra çekip her sorguyu yazdırmaktır; bu diski hem doldurur hem yorar. Teşhis için buna ihtiyacın yok.

Ayarları çalışırken değiştirebilirsin, yeniden başlatma gerekmez: günlüğü etkinleştirir, eşiği bir saniyeye çeker, dosya yolunu belirler ve trafiğin yoğun olduğu bir saati beklersin. Yoğun saat önemlidir; gece yarısı boş sistemden alınan kayıt seni yanıltır. Yirmi dört saatlik tek bir pencere, çoğu dijital ürün satış scripti için ihtiyacın olan her şeyi verir. Mümkünse log_queries_not_using_indexes ayarını da kısa süreliğine aç: indeks kullanmayan sorguları süreden bağımsız yakalar, ama gürültülü olduğu için uzun süre açık bırakma.

Dosyadaki o beş satır tam olarak ne anlatıyor?

Her kayıt bir başlık bloğuyla başlar. Query_time sorgunun kaç saniye sürdüğünü, Lock_time kilit beklemesinde geçen süreyi, Rows_sent istemciye dönen satır sayısını, Rows_examined ise bu sonucu üretmek için MySQL'in kaç satıra dokunduğunu söyler. Altında da sorgunun tam metni yer alır.

Deneyimli göz doğrudan Query_time'a değil, Rows_examined ile Rows_sent arasındaki orana bakar. On satır döndürmek için iki yüz bin satır taranmışsa, o sorgu şu an yavaş olmasa bile veri büyüdükçe kesinlikle yavaşlayacaktır. Query_time bugünü, oran ise yarını anlatır. Bir başka ipucu Lock_time: yüksekse sorgu aslında hızlıdır ama başka bir işlem kilidi bırakmadığı için beklemiştir; o zaman çözüm indeks değil, işlem sınırlarını daraltmaktır.

AlanAnlamıAlarm veren değerMuhtemel sebep
Query_timeToplam çalışma süresi1 saniyenin üzeriTam tablo taraması veya ağır sıralama
Rows_examinedTaranan satır sayısıRows_sent'in 100 katı ve üzeriEksik veya yanlış sıralı indeks
Rows_sentDönen satır sayısıBinlerce satırSayfalama yok, gereksiz veri çekiliyor
Lock_timeKilit bekleme süresi0,1 saniye üzeriUzun süren işlem bloğu, kilit çekişmesi
Çağrı sıklığıAynı desenin tekrarıDakikada onlarcaDöngü içinde sorgu, önbellek yokluğu

Neden en uzun süren sorgu senin gerçek problemin değildir?

Günlüğü açıp en tepedeki 9 saniyelik sorguyu görünce insan hemen ona saldırır. Ama o sorgu günde bir kez çalışan yıl sonu raporu olabilir. Toplam yükü hesaplamanın doğru yolu süre çarpı sıklık. Günde bir kez koşan 9 saniyelik rapor 9 saniye harcar; dakikada kırk kez koşan 0,4 saniyelik sipariş listesi ise saatte on altı dakika harcar. Panelini kilitleyen ikincisidir.

Bu yüzden günlüğü satır satır okumak yerine özetle. MySQL ile birlikte gelen özet aracı, günlükteki sorguları benzer desenlere göre gruplar ve toplam süreye göre sıralar. Elinde bir performans şeması varsa aynı özeti canlı olarak da alabilirsin: sindirilmiş sorgu istatistikleri tablosu, her desen için çağrı sayısını ve toplam beklemeyi tutar. Hedefin dosyanın en üstündeki satır değil, listenin en pahalı deseni olmalı.

E-pin panellerinde yavaş sorguların kaynak dağılımı

  • Sipariş ve stok listeleme 45%
  • Panel özet ve ciro raporları 25%
  • Arama ve filtreleme 20%
  • Oturum ve günlük yazma 10%

Paylaşımlı barındırmada dosyaya erişemiyorsan ne yapacaksın?

Paylaşımlı bir hesapta MySQL yapılandırma dosyasına ve sunucu günlüğüne çoğu zaman erişemezsin. Üç çıkış yolun var. Birincisi, günlük çıktısını dosya yerine tabloya yönlendirme iznini sağlayıcıdan istemek; kayıtlar bir sistem tablosuna düşer ve onu normal sorguyla okursun. İkincisi performans şeması üzerinden desen bazlı istatistik çekmek; yazma izni gerektirmez.

Üçüncüsü ve en taşınabilir olanı, ölçümü uygulama tarafına almak: her sorgunun öncesinde ve sonrasında zaman alan, eşiği geçenleri kendi dosyana yazan küçük bir sarmalayıcı. Bu yöntem sunucu izni istemez ve bonus olarak sorgunun hangi sayfadan çağrıldığını da kaydeder; ham MySQL günlüğünde bu bilgi yoktur. İyi kurulmuş bir e-pin yazılımı bu ölçümü zaten içinde taşır ve panelde en yavaş çağrıları listeler.

Günlüğü kapatmayı takvimine yaz

Teşhis penceresini 24-48 saatle sınırla. Açık kalan bir günlük, aylar sonra diskini dolduran sessiz sebebe dönüşür.

Suçluyu buldun, şimdi ne yapacaksın?

Günlük sana sorgunun metnini verir; nedenini sorgu planı verir. Aynı sorguyu başına açıklama komutu ekleyerek çalıştır ve iki sütuna bak: erişim tipi ve kullanılan anahtar. Erişim tipi tam tarama gösteriyorsa ve anahtar boşsa, MySQL uygun bir yol bulamamış demektir. Filtrelediğin ve sıraladığın kolonları doğru sırada içeren bir bileşik indeks çoğu vakayı tek hamlede çözer.

Bazı vakalarda çözüm indeks değildir. Döngü içinde tek tek çalıştırılan sorgular tek bir toplu sorguya dönüştürülmelidir. Panel özetleri her açılışta baştan hesaplanmak yerine gecelik bir özet tabloya yazılmalıdır. Sınırsız sayfalama LIMIT ile kısıtlanmalı, ihtiyaç duyulmayan kolonlar seçilmemelidir. Doğru düzenlenmiş bir e-pin satış yazılımı bu kalıpları baştan uygular; sonradan eklemek her zaman daha pahalıdır.

KontrolNasıl yapılırBeklenen sonuç
Günlüğü etkinleştirEşiği 1 saniyeye çek, dosya yolunu belirleKayıt akmaya başladı
Yoğun saatte toplaEn az bir tam iş günü bekleGerçek trafik temsil edildi
Desen bazlı özet çıkarÖzet aracıyla toplam süreye göre sıralaİlk 5 pahalı desen listelendi
Oranı kontrol etRows_examined / Rows_sent hesapla100 kat üzeri olanlar işaretlendi
Sorgu planını inceleAçıklama komutuyla erişim tipine bakTam tarama yapan sorgular bulundu
Düzeltmeyi uygula ve ölçİndeks veya sorgu yeniden yazımıAynı desen günlükten kayboldu
Günlüğü kapatTeşhis penceresi bitinceDisk ve yazma yükü normale döndü

Yavaş sorguyu aramak zorunda kalmadığın bir panel

Pinova, e-pin ve dijital ürün satışını yöneten lisanslı bir yazılımdır; sipariş, stok ve rapor sorguları büyüyen veri hacmi düşünülerek kurgulanmıştır.

Yavaş sorgu eşiğini kaça ayarlamalıyım?

Başlangıç için 1 saniye idealdir. Listeyi temizledikten sonra eşiği 0,3 saniyeye indirip ikinci tur yapabilirsin. Sıfıra çekmek yalnızca kısa bir ölçüm penceresinde, kontrollü şekilde yapılır.

Günlük dosyası çok büyüdü, silebilir miyim?

Dosyayı doğrudan silmek yerine döndürme kullan: yeni bir dosyaya geç, eskisini arşivle. Doğrudan silinen dosyaya MySQL yazmaya devam edebilir ve kayıtlar boşa gider.

Query_time düşük ama Lock_time yüksek, bu ne demek?

Sorgunun kendisi hızlı, ama başka bir işlem tablodaki kilidi bırakmadığı için beklemiş. Çözüm indeks eklemek değil, uzun süren işlem bloklarını kısaltmak ve yazma işlemlerini gruplamaktır.

Performans şeması yavaş sorgu günlüğünün yerini tutar mı?

Büyük ölçüde evet: desen bazlı toplam süre ve çağrı sayısını canlı verir, dosya büyütmez. Ancak tek tek kayıtların tam metnini ve zaman damgasını incelemek istediğinde klasik günlük hâlâ daha nettir.

Yavaş sorgu günlüğü, sunucu faturanı büyütmeden önce bakılması gereken ilk yerdir; çünkü çoğu zaman sana "donanım değil, tek bir sorgu" cevabını verir. Kendi kurulumunda bu tür ölçümlerin panelden ne kadar kolay görülebildiğini merak ediyorsan özellikler bölümüne bak, paketleri karşılaştır ve canlı demo üzerinden sipariş listesiyle rapor ekranlarının binlerce kayıtla nasıl davrandığını kendin dene.

Daha Fazlasını Keşfedin

Dijital ürün satışı ve otomasyon üzerine güncel rehberlere göz atın.

Tüm Yazıları Gör →
Bu yazıyı paylaşın
Bu yazıyı beğendiniz mi?
Teşekkürler!
← Tüm yazılar