Üretim veritabanınız yavaş. Bunun farkındasınız. Kullanıcılarınız da. Ancak, ne zaman başladığını ya da hangi deploy’un bu duruma yol açtığını bilmiyorsunuz.
Dün yapılan deploy bazı sorguları 4 kat yavaşlattı. Telescope, “mevcut durumu” gösteriyor — ancak gerileme hakkında bilgi vermiyor. Pulse, “sorgular yavaş” diyor — ama neyin değiştiğini söylemiyor. Git loglarında derinlemesine araştırmak ve EXPLAIN komutunu manuel olarak çalıştırmak zorunda kalıyorsunuz.
QueryGuard‘ı bu soruya yanıt vermek için geliştirdim: “Hangi deploy, hangi sorguyu yavaşlattı?”
Problem
Problem
Diyelim ki saat 15:00’te bir deploy yaptınız. 18:00’de hata izleme sisteminiz, artan zaman aşımı istisnalarını gösteriyor. Telescope’u kontrol ediyorsunuz — sorgular şu an iyi görünüyor. Git geçmişini kontrol ediyorsunuz — 15:00’den sonra 47 commit yapılmış. 10 sorguya manuel olarak EXPLAIN uyguluyorsunuz. Stres.
Bu, “üretim dedektifliği” tarzı bir süreç. Her ekip bunu yaşıyor. Çoğu, durumu çözmek için:
- “Bilinen yavaş sorgular” listeleri tutmak
- Ayrı bir sorgu izleme kurmak (genellikle pahalı SaaS, genellikle APM)
- Geliştirme ortamında
slower:analyzekomutunu çalıştırmak (üretim kalıplarını kaçırır) - Yavaş deploy’ları kabullenmek ve hiç bir şey yapmamak
QueryGuard, sizin için dedektiflik işini yapar.
Ne Yapar
Ne Yapar
Ücretsiz Laravel paketi kurun:
composer require queryguard/laravel
Hepsi bu kadar. Kurulum gerektirmiyor. Veritabanınıza otomatik olarak bağlanıyor.
Üç Şeyi Tespit Eder
Üç Şeyi Tespit Eder
1. Yavaş sorgular — her sorguyu izler, p95 değeriniz 500ms’yi geçtiğinde uyarı verir.
2. N+1 sorguları — aynı parmak izine sahip sorguların tek bir istekte tekrarlandığında tespit eder.
Warning: N+1: SELECT * FROM products WHERE id = ? [150 repeats in single request]
Location: app/Http/Controllers/OrderController.php:42
3. Eksik indeksler — WHERE ve JOIN koşullarını ayrıştırır, şemanızı kontrol eder, eksik olan bir indeks önerir.
AI Bölümü
AI Bölümü
php artisan queryguard:analyze {id} komutunu çalıştırın ve QueryGuard:
- Sorgu şablonunu ve EXPLAIN çıktısını alır
- Tablo şemanızı (kolonlar, indeksler, kısıtlamalar) okur
- Bağlamı Claude veya OpenAI’ye gönderir (API anahtarınız, maliyetiniz)
- Yapılandırılmış bir tanı ve çalıştırmaya hazır migration ile geri döner
$ php artisan queryguard:analyze slow-query-123
Diagnosis:
Query was doing a full table scan of 2.1M rows.
Missing composite index on (user_id, status).
Fix migration generated:
php artisan queryguard:fix slow-query-123
Expected improvement:
p95 latency: 1200ms to 120ms (~10x faster)
Gerçek Örnek
Gerçek Örnek
// OrderController.php
$orders = Order::with()->get();
foreach ($orders as $order) {
$order->customer->name; // triggers N+1
}
QueryGuard, bunu otomatik olarak tespit eder:
N+1 Detected
Query: SELECT * FROM customers WHERE id = ?
Repeats: 247 times in single request
Location: app/Http/Controllers/OrderController.php:18
Fix: Order::with('items', 'customer')->get();
Nasıl Çalışır
Nasıl Çalışır
DB::listenile bağlanır — kodunuzda hiçbir değişiklik gerektirmiyor- Her sorgunun parmak izini alır (tüm literal değerleri kaldırır, boşlukları normalleştirir)
- Her istek için bellek içinde tamponlar — her sorguda veritabanına yazma işlemi yapmaz
terminating()yakalayıcı içinde kalıp tespit eder- Sadece sorunları ve toplama verilerini saklar, asla ham sorgu değerlerini tutmaz
Ek yük: dinleyici, kayıt modunda her sorguda 0.05ms’den daha az ek yük getirir. EXPLAIN ve şema denetimi yalnızca artisan komutları ile talep edildiğinde çalıştırılır, üretimde asla otomatik olarak çalışmaz.
Gizlilik
Gizlilik
Parmak izleyici, her şey saklanmadan veya gönderilmeden önce tüm literal değerleri kaldırır. Bu, hiçbir ham değer geçmediğini doğrulayan özel bir CI testi ile kontrol edilir. Sadece select * from orders where user_id = ? gibi normalleştirilmiş şablonlar saklanır.
Kurulum
Kurulum
composer require queryguard/laravel
php artisan migrate
php artisan queryguard:report
Lakavel 10, 11, 12, 13 ve PHP 8.2+ desteği sunar.
Neden Ücretsiz?
Neden Ücretsiz?
Ücretsiz paket, tamamı ile işlevsel ve sonsuza kadar kullanılabilir. Sürekli izleme, kendi anahtarınızla AI analizi ve oluşturulan migration’lar alırsınız. Hesap açmanız gerekmez.
QueryGuard Cloud (ücretli, bekleme listesi açık) üretim geçmişi, deploy’tan gerileme izleme ve ekip uyarıları ekleyecektir — ayda 19$’dan başlayan fiyatlarla.
GitHub: https://github.com/wilfridterry/query-guard
Packagist: https://packagist.org/packages/queryguard/laravel
Bir şey çalışmıyorsa bir sorun açın. Geri bildirimler, gelecekte ne yapılacağına doğrudan yön veriyor.
Kaynak: Orijinal Makale


