• 11-01-2020, 04:28:13
    #1
    Merhaba,

    Php tabanlı yazmış olduğum uygulamam için bazı cron job'lar çalıştırıyorum. Bu cron'ların farklı görevleri var ve tamamlanmaları uzun sürüyor.

    Örnek veriyorum 4 dakikada çalışan bir cron mevcut ve 1-2 dakika arasında tamamlanıyor. Yaptığı iş api'den aldığı 100.000'lerce veriyi veri tabanına import etmek veya var olanları güncellemek.

    Bu ve diğer cron job'lar çalıştığı esnada web siteme girişler ağırlaşmaya başlıyor. Normalde sayfa içerisindeki veriler redis'den geldiği için 1 saniye bile sürmeden açılıyor ama cronlar çalıştığında minimum 4-5 saniyeye çıkıyor.

    Bu konu ile ilgili nasıl bir yol izlemem lazım? Yardımcı olabilirseniz çok sevinirim. Teşekkürler.
  • 11-01-2020, 04:31:05
    #2
    cihangirk adlı üyeden alıntı: mesajı görüntüle
    Merhaba,

    Php tabanlı yazmış olduğum uygulamam için bazı cron job'lar çalıştırıyorum. Bu cron'ların farklı görevleri var ve tamamlanmaları uzun sürüyor.

    Örnek veriyorum 4 dakikada çalışan bir cron mevcut ve 1-2 dakika arasında tamamlanıyor. Yaptığı iş api'den aldığı 100.000'lerce veriyi veri tabanına import etmek veya var olanları güncellemek.

    Bu ve diğer cron job'lar çalıştığı esnada web siteme girişler ağırlaşmaya başlıyor. Normalde sayfa içerisindeki veriler redis'den geldiği için 1 saniye bile sürmeden açılıyor ama cronlar çalıştığında minimum 4-5 saniyeye çıkıyor.

    Bu konu ile ilgili nasıl bir yol izlemem lazım? Yardımcı olabilirseniz çok sevinirim. Teşekkürler.
    Sunucunuzu daha güçlü yapmaktan başka pek çare yok gibi. Cronjob'lar sunucuyu aşırı yoruyor. Lightspeed vs. yardımcı olabilir bir nebze. Memory Limit'i de oldukça yükseltin apache için
  • 11-01-2020, 07:30:12
    #3
    mühtemelen cronjob daki satırı wget yada curl yerine direkt php ile çalıştırdığınız için web server ı değiştirmek apache nginx litespeed hiçbir fayda sağlamaz. (düşündüğüm gibi değilsede /usr/bin/php /tam/dosya/yolu.php olarak girin cronjon satırını.) sadece litespeed de lsphp normal php den biraz daha hızlı çalışıyor da bunu cli de aynı farkı sağlıyor mu bilemiyorum. fakat anladığım kadarıyla sizin asıl probleminiz php nin veya webserver ın hızı değil.
    tablonun innodb olduğunu varsayarak; asıl probleminiz mysql insert, update, işleminde table lock ve reindex işlemleri beklediğinizden dolayı veriler çoğaldıkça bu işlemleri beklediğinizde dolay genel olarak yekündeki işlem uzun sürüyor.
    bunu daha da açarsak, normalde update, insert şöyle çalışır, siz veri ekleme yada güncelleme queryinizi gönderdiniz, ilgili tablo kilitlenir, veri eklenir/güncellenir, tablo indexi yenilenir, tablo açılır ve daha sonra sıradaki query ne varsa ona geçilir.
    bayağı uzattım hemen çözümüne geçeyim çözümü de şöyle normal de sql insert queryiniz şöyle veya benzerdir.
    insert into tabloadi (id,isim,numara) values (1,'r','10')
    fakat bunu aşağıda şeklinde yaparak aynı anda birden fazla veriyi ekleyebilir ve sadece bir kere tablo lock index işlemine maruz kalabilirsiniz.
    insert into tabloadi (id,isim,numara) values (1,'r','10'), (2,'r',11), (3,'r',12)
    gibi uzar gider
    tabi eğer query niz hali hazırda bunun gibi tek sql query de tüm verileri ekleme üzerine kuruluysa sunucu özellikleri yükseltmek dışında başka seçenek kalmıyor.