Ubuntu’da MySQL Slow Query Log Analizi

Ubuntu işletim sisteminde MySQL veritabanı sunucularını yönetirken, performans sorunlarını teşhis etmek için slow query log analizi kritik bir adımdır.

Reklam Alanı

Ubuntu işletim sisteminde MySQL veritabanı sunucularını yönetirken, performans sorunlarını teşhis etmek için slow query log analizi kritik bir adımdır. Bu log mekanizması, önceden tanımlanan eşik değerleri aşan sorguları kaydederek veritabanı yöneticilerine yavaş çalışan sorguları belirleme ve optimize etme fırsatı verir. Özellikle yüksek trafikli kurumsal uygulamalarda, slow query log’u etkinleştirmek ve düzenli analiz etmek, sistem kaynaklarını verimli kullanmayı sağlar. Bu makalede, Ubuntu üzerinde MySQL slow query log’unu etkinleştirme, analiz etme ve elde edilen verilerden yola çıkarak pratik optimizasyon adımlarını detaylı olarak ele alacağız. Adım adım talimatlarla, gerçek dünya senaryolarına uyarlanabilir bir yaklaşım sunacağız.

Slow Query Log’u Etkinleştirme ve Yapılandırma

MySQL slow query log’unu etkinleştirmek, Ubuntu sunucusunda my.cnf konfigürasyon dosyasını düzenleyerek başlar. Bu işlem, veritabanı sunucusunun yeniden başlatılmasını gerektirir ve log dosyasının konumunu belirlemenizi sağlar. Öncelikle, MySQL konfigürasyon dosyasını bulun: genellikle /etc/mysql/my.cnf veya /etc/mysql/mysql.conf.d/mysqld.cnf yolunda yer alır. Bu dosyayı sudo yetkileriyle düzenleyin ve [mysqld] bölümüne aşağıdaki parametreleri ekleyin: slow_query_log = 1, slow_query_log_file = /var/log/mysql/mysql-slow.log, long_query_time = 2 (saniye cinsinden eşik değeri). Bu ayarlar, 2 saniyeden uzun süren sorguları log’a kaydeder. Log dosyasının yazılabilir olduğundan emin olun: sudo touch /var/log/mysql/mysql-slow.log ve sudo chown mysql:mysql /var/log/mysql/mysql-slow.log komutlarını çalıştırın.

Servis yeniden başlatma aşamasında, sudo systemctl restart mysql komutu ile MySQL’i yeniden yükleyin. Değişikliklerin uygulandığını doğrulamak için MySQL’e bağlanın (mysql -u root -p) ve SHOW VARIABLES LIKE ‘slow_query_log’; sorgusunu çalıştırın; değer ON olmalıdır. Log dosyasının aktif olduğunu kontrol etmek için tail -f /var/log/mysql/mysql-slow.log ile gerçek zamanlı izleme yapabilirsiniz. Bu yapılandırma, production ortamlarında log rotasyonu için logrotate entegrasyonu gerektirir; /etc/logrotate.d/mysql-slow dosyasını oluşturarak günlük rotasyonu tanımlayın. Bu adımlar tamamlandığında, sistem yavaş sorguları otomatik olarak kaydetmeye hazır hale gelir ve analiz için veri birikimi başlar.

Log Dosyasını Etkili Şekilde Analiz Etme Araçları

mysqldumpslow Kullanımı

MySQL’in yerleşik aracı mysqldumpslow, slow query log’unu özetler ve en yavaş sorguları sıralar. Ubuntu’da mysql-client paketiyle gelir; etkinleştirdikten sonra sudo mysqldumpslow /var/log/mysql/mysql-slow.log | head -20 komutuyla en kötü 20 sorguyu görüntüleyin. Bu araç, sorgu sürelerini, çağrı sayılarını ve kilitleme sürelerini gruplar. Örneğin, -t 10 parametresiyle ilk 10 sorguyu, -s t ile süreye göre sıralamayı sağlar. Çıktıda # Time: başlangıç zamanı, # User@Host, # Query_time: 5.234456 Lock_time: 0.000123 Rows_sent: 1 Rows_examined: 1000000 gibi detaylar görürsünüz. Bu verilerle, tam tarama yapan sorguları (yüksek Rows_examined) hızlıca tespit edin ve indeksleme ihtiyaçlarını belirleyin.

Percona Toolkit ile Gelişmiş Analiz

Percona Toolkit, pt-query-digest aracıyla daha derin analiz sunar. Ubuntu’ya snap install percona-toolkit veya apt ile yükleyin. Komut: pt-query-digest /var/log/mysql/mysql-slow.log > analiz_raporu.txt. Rapor, sorgu şablonlarını gruplar, yüzde oranlarını hesaplar ve EXPLAIN önerileri verir. Örneğin, raporun “Overall” bölümünde toplam sorgu süresi, %95’lik dilimdeki yavaş sorgular listelenir. Bu araç, fingerprinting ile benzer sorguları birleştirir; örneğin SELECT * FROM users WHERE id = ? sorgusunu standartlaştırır. Raporu inceleyerek, sık tekrarlanan ama yavaş çalışan sorguları önceliklendirin ve veritabanı şeması değişiklikleri planlayın.

Analiz Sonuçlarından Optimizasyon Stratejileri

Analiz raporlarından elde edilen verilerle optimizasyon, somut adımlarla ilerler. Yavaş sorguları belirledikten sonra, her birini EXPLAIN SELECT … ile inceleyin; type=ALL ise tam tablo taraması var demektir, bu durumda WHERE koşuluna indeks ekleyin. Ubuntu’da ALTER TABLE users ADD INDEX idx_id (id); gibi komutlarla indeks oluşturun ve sorguyu yeniden test edin. Log’da sık görülen JOIN’ler için, ana tabloları önceden indeksleyin ve LIMIT ekleyerek sayfalama yapın. Cache mekanizmaları entegre edin: MySQL query cache’i etkinleştirin (query_cache_type=1) veya Redis gibi external cache kullanın. Performans testi için sysbench aracıyla yük testi uygulayın ve öncesi-sonrası karşılaştırması yapın.

Uzun Vadeli İzleme ve Bakım

Optimizasyon sonrası, slow query log’unu düzenli olarak temizleyin ve arşivleyin. Cron job ile haftalık analiz otomatize edin: 0 2 * * 0 pt-query-digest /var/log/mysql/mysql-slow.log –review > /var/log/mysql/haftalik_rapor.txt. Bu raporları Grafana veya ELK stack ile görselleştirin. Veritabanı büyüklüğünü izleyin; mysqldumpslow -R ile regex filtreleme yaparak belirli tabloları hedefleyin. Bu yaklaşım, proaktif yönetim sağlar ve kesinti riskini minimize eder. Sürekli izleme, %20-50 performans artışı getirebilir, ancak her değişikliği staging ortamında test edin.

Sonuç olarak, Ubuntu’da MySQL slow query log analizi, veritabanı performansını sistematik olarak iyileştirmenin anahtarıdır. Etkinleştirme, araç kullanımı ve optimizasyon adımlarını uygulayarak, kurumsal uygulamalarınızda güvenilirlik ve hızı artırabilirsiniz. Düzenli pratikle, bu yöntem veritabanı ekibinizin vazgeçilmez rutini haline gelecektir.

Kategori: Genel
Yazar: Meka
İçerik: 639 kelime
Okuma Süresi: 5 dakika
Zaman: Bugün
Yayım: 26-03-2026
Güncelleme: 26-03-2026