VDS (Sanal Özel Sunucu) üzerinde çalışan web uygulamalarının en sık karşılaştığı sorun, veritabanı sorgulamalarının beklenen hızda çalışmamasıdır. Siteniz yeterli RAM'e ve CPU'ya sahip olsa bile, kötü yazılmış veya dizinsiz bir sorgu, tüm sistemi felç edebilir. Bu makale, VDS'de yavaş veritabanı sorgularını tanımlamayı, köklerini bulmayı ve pratik çözümler uygulamayı öğretir.
Yavaş Query Nedir ve Neden Sorun Yaratır?
Veritabanı sorgusu (query), SQL kodu aracılığıyla veritabanından veri çekmek veya güncellemek için gönderilen bir istektir. Normal şartlar altında, binlerce satırı milisaniyeler içinde taraması gereken bir sorgu, bazen saniyeler veya dakikalar alabilir. Bu, uygulamanızı donma noktasına getirir, kullanıcılar sayfa yüklenmesini bekler ve veritabanı bağlantı havuzu boşalır.
VDS ortamında sınırlı RAM ve CPU ile bu sorun daha da belirginleşir. Yavaş bir sorgu, veritabanı sunucusunun tüm işlemci gücünü tüketerek diğer bağlantıları bloke eder.
MySQL ve MariaDB'de Slow Query Log Etkinleştirme
Yavaş sorguları tespit etmenin ilk adımı, slow_query_log özelliğini açmaktır. VDS'de /etc/mysql/my.cnf veya /etc/mysql/mariadb.conf.d/50-server.cnf dosyasını düzenleyin:
slow_query_log = 1(Etkinleştir)long_query_time = 2(2 saniyeden uzun sorgular kaydedilsin)log_queries_not_using_indexes = 1(İndekssiz sorgular da kaydedilsin)slow_query_log_file = /var/log/mysql/slow-query.log(Log dosyasının yolu)
Ayarları uygulamak için MySQL/MariaDB'yi yeniden başlatın: systemctl restart mysql
Slow Query Log'u Analiz Etme ve Sorunlu Sorguları Bulma
Birkaç gün sonra slow query log dosyası kaydedilmiş sorguları içerecektir. Bu dosyayı doğrudan okumak zor olabilir; mysqldumpslow aracı yardımıyla analiz edin:
mysqldumpslow -s t -t 10 /var/log/mysql/slow-query.log
Bu komut, en çok zaman alan 10 sorguyu gösterir. Alternatif olarak, ücretsiz bir araç olan percona-toolkit kurup pt-query-digest kullanabilirsiniz:
apt-get install percona-toolkit
pt-query-digest /var/log/mysql/slow-query.log
Bu araç, sorguyu kaç defa çalıştığını, ortalama çalışma süresini ve hangi satırları tarandığını gösterir.
EXPLAIN ile Sorguyu Kontrol Etme ve İndeks Oluşturma
Yavaş bir sorguyu bulduğunuzda, EXPLAIN veya EXPLAIN FORMAT=JSON kullanarak yürütme planını görüntüleyin:
EXPLAIN SELECT * FROM posts WHERE author_id = 5 AND status = 'published';
Sonuçta rows değeri çok yüksekse (100.000+), sorgu çok fazla satırı taramaktadır. type değerinin ALL olması, tüm tabloyu taradığını anlamına gelir. İndeks oluşturmak bu sorunu çözer:
CREATE INDEX idx_author_status ON posts(author_id, status);
İndeks oluşturduktan sonra sorguyu yeniden çalıştırın. EXPLAIN sonuçlarında type = ref ve rows değeri dramatik şekilde düşmüş olmalıdır.
Sık Yapılan Hata: N+1 Sorgu Problemi
Programlama tarafında sık rastlanan sorun, her yazarın adını ayrı sorgularla çekmektir:
SELECT * FROM posts;
foreach post in posts:
SELECT * FROM authors WHERE id = post.author_id;
100 yazı varsa, 101 sorgu çalışır. Bunun yerine JOIN kullanın:
SELECT p.*, a.name FROM posts p
JOIN authors a ON p.author_id = a.id;
Bu, tek bir sorguyla aynı sonucu verir. WordPress veya benzeri CMS kullanıyorsanız, meta sorgularını minimize etmek için caching aktivite ederek ve lazım olmayan post_meta sorgusu taşıyarak hızlanma sağlayabilirsiniz.
VDS'de Veritabanı Sunucusu Ayarlarını Optimize Etme
Yavaş sorgular bağlandığınızda, sunucu tarafı ayarlarını da kontrol edin:
max_connections: VDS'de 200-500 arasında sabitlenmelidir (varsayılan 151)innodb_buffer_pool_size: Toplam RAM'in %50-80'i olmalıdır (2GB VDS'de 1-1.5GB)query_cache_type = 1(Eski MySQL sürümlerinde; MySQL 8.0+ kaldırıldı)tmp_table_size = 256M(Geçici tablo sınırı)
Monitoring ve Periyodik Kontrol
VDS'de kalıcı çözüm için, slow query log'u haftalık kontrol etmeyi alışkanlık yapın. Kritik sorguları bulduğunuzda hemen optimize edin. İndeks eklendikten sonra sorguların daha hızlı çalıştığını doğrulamak için yeniden test edin: EXPLAIN sonuçları iyileştirilmiş mi?
VDS'de veritabanı performansı, sunucu işlemci ve bellek kullanımının doğrudan etkisidir. Yavaş sorguları erken tespit ve optimize etmek, site açılış sürelerini keskin biçimde düşürür ve kullanıcı deneyimini iyileştirir. Bogahost VDS paketleri, yeterli kaynakla bu optimizasyonları rahatça uygulamak için tasarlanmıştır.
Yorumlar (0)
Henüz yorum yapılmamış. İlk yorumu siz yapın!
Yorum Yap