buldurmert sorununu çözdün mü merak ettim.
Çözemediysen, Jmeter testini rest api ile yaptığını varsayarak mysql connector aracılığı ile query testi yaptın mı ?
Yaptıysan sonuçlar aynı mı ?
çünkü sorun nginx den de kaynaklı olabilir
İlk olarak problemin net kaynağını bulmak gerekiyor.
İşletim sistemi fiziksel sunucuya mı kurulu yoksa sanallaştırma üzerine mi onu da belirtmen lazım.
Kendime ait bir sistemden örnek vereyim
Sanal üzerinde
Ubuntu 18.04.3
Nginx
MariaDB 10.4.8
SSD Hard Disk
16 CPU
64 GB Ram
(değerlerin yüksek olduğuna bakmayın Ram kullanımı 4 GB'ı geçmez CPU kullanımı da %15 i geçmez. elimde olduğu için verdim bu değerleri)
Bu sistemde toplam boyutu 81,9 GB 7 tane tablom vardır.
Tablo yapısı bir birinin aynısı ama içerikler farklıdır.
Rest API olarak çalışır.
Sorgu yapıldığı zaman sırasıyla 7 tablonun hepsini sorgular.
Tablolar 8gb ile 14gb arası değişiyor (Kayıtlar Farklı)
Toplamda 366 Milyon adet kayıt var.
Bu sorgum cevabı 2 saniyeyi geçmez.
Aranılan kayıt 366 Milyon satır arasından sonuçları çıkartır. Aranan değerler varchar query de dahildir. (Double değerlerim var onlarda arama yapıldığı zaman saniyeyi bulmaz)
5 saniyelik bir aralıkta 4.000 e yakın session'a şahit oldum. benim için her oturum 1 sorgu anlamına geliyor.
yukarıda detayları özellikle yazdım ki bahsettiğiniz sorunu bulup hallederseniz çok ama çok uzun bir süre sorun yaşamazsınız.
Şimdi yapmanızı önereceğim şeyler;
- Jmetter ile Rest API ile yaptığınız testi bir de mysql connector ile direk mysql'i teste tabi tutun ve değerleri karşılaştırın.
- Değerler aynı ise problem mysql veya sunucudan kaynaklı
- Sunucudan kaynı olabilecek problemlerin en başı harddiskden geçer kontrol etmenizi öneririm. aynı testleri kendi bilgisayarınızda ve hatta var ise ssd ve sata harddisklerde ayrı ayrı yapmanızı öneririm.
- Eğer hata mysql'den kaynaklı ise konfigürasyonları gözden geçirmek gerekir.
- MySQL de dikkat etmen gereken en başlıca husus engine seçimi. En yaygın olanı InnoDB ve MyISAM, Aşağıdaki duruma göre bir karşılaştırma yap.
- MyISAM okuma konusunda InnoDB'ye oranla çok ama çok daha hızlıdır ama iş yazmaya geldiği zaman MyISAM işlem yaparken tüm tabloyu kilitler ve o işlem harici diğer işlemler sekteye uğrar.
- InnoDB yazma işlemi yaparken(insert ve update) sadece işlem yaptığı satırda kilitleme yapar ve eş zamanlı ne kadar işlem yaparsan yap bir işlem diğer işlemi etkilemez.
- Eğer mysql testi iyi çıkıyor ise problem nginx konfigürasyonundadır ki ben yaşadım bu durumu nginx'in
thread pool
özelliğini incele derim bu gibi işlemlerde ne çok problemi yaşadığım nokta burasıydı.
Aslında buraya yaz yaz bitmez.
Biraz uzatmış oldum ama bir web yazılımında en önemli unsur veri tabanıdır. çünkü veri tabanı ne kadar hızlı çalışırsa sistem o kadar performanslı çalışır.
Bu konuda test sonuçlarını paylaşırsanız ve sebebi bulup çözersek burada bir çok insanın işine yarayacak bir bilgi oluşacağına eminim.