Performans Optimizasyonu ve İzleme

Bir veritabanını hızlandırmanın ilk adımı sunucu büyütmek değil, hangi sorgunun toplam süreyi tükettiğini ölçmektir.

$ gofast-cli parse --slow-log-dir /var/log/mysql
✓ 1.284.663 olay ayrıştırıldı · artımlı
$ gofast-cli digest --order-by Query_time:sum --limit 3
1 SELECT shop.order_items 76.90s %68.0
2 UPDATE warehouse.inventory 21.50s %19.0
3 SELECT orders customers 7.90s %7.0

Performans sorunlarını ölçerek çözüyoruz

Yavaşlığın nedenini tahmin etmeyiz. İzleme altyapısını kurar, yavaş sorguları analiz eder ve her iyileştirmeyi öncesi–sonrası ölçümle raporlarız.

İzleme altyapısı

Percona Monitoring and Management (PMM) ve Grafana kurulumunu yapıyor, veritabanı ve işletim sistemi metriklerini tek panelde toplayıp anlamlı eşiklerle alarm kuruyoruz.

Yavaş sorgu analizi

Slow query log kayıtlarını parmak izine (fingerprint) göre gruplayarak toplam süreyi hangi sorgu desenlerinin tükettiğini çıkarıyoruz. Analizi kendi ürünümüz GoFast ile yapıyoruz.

Sorgu ve indeks optimizasyonu

Yürütme planlarını (execution plan) inceleyerek eksik indeksleri, gereksiz tam tablo taramalarını ve yanlış birleştirme (join) sıralarını tespit ediyor, düzeltmeleri ölçülebilir etkileriyle raporluyoruz.

Yapılandırma ve kapasite

Bellek ayrımı, bağlantı havuzu, InnoDB ve WAL parametreleri ile depolama katmanını mevcut iş yüküne göre düzenliyor, büyüme senaryolarına göre kapasite planı çıkarıyoruz.

Performans çalışması ölçümle başlar

Yavaşlayan bir veritabanında ilk refleks genellikle donanım kaynaklarını artırmaktır. Kaynak artırımı bazı senaryolarda geçici rahatlama sağlar; ancak kök nedeni ortadan kaldırmadığı için maliyeti kalıcı hâle getirir ve sorunun daha büyük ölçekte tekrar etmesine zemin hazırlar.

Sahada karşılaştığımız yavaşlamaların önemli bölümü birkaç sorgu deseninden kaynaklanır. Bir sistemde toplam sorgu süresinin üçte ikisini tek bir SELECT deseninin tükettiğini ölçmek, hangi sunucuyu büyüteceğinizi tartışmaktan çok daha hızlı sonuç verir. Çalışmalarımızı bu nedenle ölçüm üzerine kuruyoruz.

İzleme altyapısı: PMM ve Grafana

Ölçüm yapabilmek için önce veri gerekir. Percona Monitoring and Management (PMM) kurulumunu yapıyor, MySQL ve PostgreSQL metriklerini işletim sistemi metrikleriyle birlikte tek panelde topluyoruz. PMM’nin Prometheus tabanlı mimarisi, metriklerin sorgulanabilir biçimde saklanmasını ve olay sonrası incelemelerde geriye dönük analiz yapılmasını sağlar.

Grafana panellerini iş yükünüze göre düzenliyor, alarmları anlamlı eşiklerle kuruyoruz. Aşırı hassas ayarlanmış bir alarm sistemi, kısa sürede görmezden gelinmeye başlanır; alarm kurgusunun amacı bildirim üretmek değil, müdahale gerektiren durumu ayırt etmektir.

Halihazırda Prometheus, Zabbix veya benzeri bir izleme altyapısı işletiyorsanız veritabanı metriklerini mevcut sisteminize entegre ediyoruz.

Yavaş sorgu analizi: GoFast

Slow query log, performans sorunlarının en zengin veri kaynağıdır; ancak ham hâliyle okunabilir değildir. Binlerce satırlık bir kayıt dosyasında aynı sorgu yüzlerce kez, her seferinde farklı parametrelerle görünür.

Yavaş sorgu kayıtlarının analizinde kendi geliştirdiğimiz GoFast Enterprise ürününü kullanıyoruz.

GoFast Enterprise, MySQL yavaş sorgu kayıtlarını (slow query log) Go ile DuckDB’ye aktarır ve analitik olarak sorgulanmasını sağlar. Kayıt bir kez işlenir, sonraki her soru depodan yanıtlanır. Aktarılan kayıtların hash’i tutulur ve mükerrer kayıt oluşmaz. Yüzdelik (percentile) değerleri kesin hesaplanır. Tek çalıştırılabilir dosya olarak, bağımlılık olmadan ve Docker içinde çalışır. Rapor biçimi pt-query-digest ile uyumludur.

Web arayüzü birden fazla sunucunun kaydını tek panelde gösterir. Kayıtlar kullanıcı, sunucu, veritabanı ve tablo kırılımında incelenir. Aynı kırılımlar komut satırı raporlarında da alınır. Bir sorgu imzasının (fingerprint) zaman içindeki seyri grafikle izlenir. Günlük ve haftalık görünümlerle dönemler karşılaştırılır.

Aracın veritabanına bağlanmasına gerek yoktur. Analiz için üretim sistemine erişim vermeniz gerekmez, kayıt dosyalarını iletmeniz yeterlidir.

Ayrıştırma katmanı MIT lisanslı açık kaynak gofast-cli olarak GitHub’da yayımlanır . GoFast Enterprise müşteri altyapısına kurulur ve sözleşme kapsamında sunulur. Web arayüzü ve gofast-mcp sunucusu lisansa dahildir.

Yapay zekâ destekli analiz

Performans analizinde son yıllarda değişen şey, verinin kendisi değil, veriye soru sorma biçimidir. Yavaş sorgu korpusunu ve metrik geçmişini büyük dil modellerine açtığımızda, “dün saat 14:00 ile 15:00 arasında ne değişti” gibi bir sorunun yanıtı dakikalar içinde alınabiliyor.

Bu amaçla iki MCP (Model Context Protocol) sunucusu geliştirdik:

  • gofast-mcp, GoFast Enterprise’ın ürettiği yavaş sorgu korpusunu dil modellerine açar. En kötü sorguları, sıklıkla ağırlıklandırılmış etki skorunu, tablo bazında kilit çekişmesini ve WHERE koşullarının indeks kümelenmesi açısından dağılımını sorgulayabilen araçlar sunar. Olay analizinde kullandığımız bileşen, bir zaman aralığını kendi öncesindeki referans dönemle karşılaştırıp sorguları yavaşlama oranına göre sıralar.
  • PMM Prometheus MCP, PMM’in topladığı metrikleri aynı biçimde sorgulanabilir hâle getirir. Bir olay penceresindeki tüm doygunluk sinyallerini — yük ortalaması, CPU dağılımı, iowait, bellek, disk gecikmesi ve kuyruk derinliği, ağ, MySQL bağlantı ve QPS metrikleri — tek çağrıda tarar ve her metriğin tepe değerini kendi öncesindeki medyanla karşılaştırır.

İki bileşen birlikte kullanıldığında, bir performans olayının sorgu tarafındaki ve altyapı tarafındaki izleri aynı anda incelenebilir. Her iki bileşen de şu aşamada sözleşmeli müşterilerimize sunulmaktadır.

Arşivleme de bir performans çalışmasıdır

Sürekli büyüyen tablolar, indeksler bellekte tutulamaz hâle geldiğinde performansı kademeli olarak düşürür. Sorgu optimizasyonuyla kazanılan süre, tablo hacmi arttıkça geri kaybedilir.

Aktif olarak kullanılmayan veriyi üretim sisteminden çıkarmak, çoğu senaryoda tek başına sorgu optimizasyonundan daha kalıcı bir kazanç sağlar. İlişkisel veri arşivleme için geliştirdiğimiz GoArchive, kayıtları doğrulayarak taşır ve siler.

İlgili hizmetler

Denetim kaydının performansa etkisi ve şifrelemenin işlemci maliyeti birlikte değerlendirilir: Veritabanı Güvenliği ve KVKK Teknik Tedbirleri

Yedekleme penceresinin üretim yüküne etkisi de performans çalışmasının kapsamındadır: Veritabanı Yedekleme ve Kurtarma

Replikasyon gecikmesi ve düğümler arası yük dağılımı cluster tasarımıyla birlikte değerlendirilir: Yüksek Erişilebilirlik ve Cluster Çözümleri

Sık sorulan sorular

Bazı durumlarda geçici olarak çözer, ancak maliyeti kalıcıdır. Sahada karşılaştığımız yavaşlamaların büyük bölümünün kaynağı eksik bir indeks, hatalı yazılmış tek bir sorgu veya yanlış yapılandırılmış bir bellek parametresidir. Ölçüm yapılmadan kaynak artırmak, sorunun kök nedenini gizleyerek daha büyük ölçekte tekrar etmesine yol açar. Önce ölçer, sonra gerekiyorsa büyütürüz.

Slow query log kaydını uygun eşik değerleriyle etkinleştirmek çalışmanın ilk adımıdır ve üretim sistemine etkisi ihmal edilebilir düzeydedir. Kayıt toplandıktan sonra analiz için veritabanına bağlanmamız gerekmez: GoFast CLI doğrudan log dosyalarını ayrıştırır. Log dosyalarını bize iletmeniz analiz için yeterlidir.

Yavaş sorgu analizi için gerekmez; GoFast log dosyaları üzerinde çalışır ve sorgu metinlerindeki parametreleri temizleyerek (sanitize) saklar. İzleme altyapısı kurulumu ve yapılandırma çalışmaları için erişim gerekir; bu erişimin kapsamını ve süresini birlikte belirleriz.

Kullanabilirsiniz. PMM'yi veritabanı metriklerinde hazır gelen kapsamı ve Prometheus tabanlı mimarisi nedeniyle öneriyoruz; ancak halihazırda Prometheus, Zabbix veya benzeri bir altyapı işletiyorsanız veritabanı metriklerini mevcut sisteminize entegre ediyoruz. Yeni bir izleme yığını dayatmıyoruz.

Her değişiklik öncesi ve sonrası ölçümle birlikte raporlanır: ilgili sorgu deseninin toplam süresi, çağrı sayısı ve incelenen satır sayısı. Raporlanan değer tahmini bir iyileşme oranı değil, aynı yöntemle iki kez ölçülmüş gerçek farktır.

Hangi sorgunun sizi yavaşlattığını biliyor musunuz?

Slow query log dosyalarınızı inceleyelim; toplam süreyi hangi sorgu desenlerinin tükettiğini ve hangi düzeltmelerin ne kadar kazandıracağını ölçümle ortaya koyalım.

İletişime geçin