• 29-05-2010, 01:52:14
    #1
    Üyeliği durduruldu
    Şimdi bir haber sitemiz var news tablosunda 250 bin haber var ve sistemin yazılımda sorguları en aza indirmiş olmama rağmen geçende önceki gün anlık sitede 200 kişi olduğunda mysql serveri kasmaya başladı.

    Forumda birkaç kez server optimizasyon hakkında yardım istedim fakat arkadaşlarımızın yoğunluğundan bir şeyler yapamadık.

    Benimde aklıma şöyle bir şey geldi. Sizce fikir nasıl bir nebze olsun serveri rahatlatır mı fikirlerinizi ve çözüm yollarınızı bekliyorum.

    mySQL'e bir tablo daha oluşturalım mesela cache_news diye son 24 saat te bir bu tablonun içini boşaltacağız yada farklı saat dilimleri içinde o bize kalmış.

    Bir misafir google aramasında bizim sitemizi gördü ve linke tıkladı. Tıkladığı zaman yani sql sorgusu olduğun da önce "cache_news" tablosuna bakacak eğer orada o haber yok ise daha sonra "news" tablosuna bakacak haberi ekrana getirecek. ve aynı haberi bu sefer "cache_news" tablosuna aktaracak.

    Başka birisi yine aynı haberin linkine tıkladığında "cache_news" tablosundaki veri sayısı az olduğundan ve o haber "cache_news" tablosunda var olduğundan "news" tablosuna bağlanıp da mysql i gereksiz yere kasmamış olacak..!

    Sizce bu yöntem işe yarar mı bana bir sıkıntı çıkartır mı..?

    Ve yahut kardeşim neden bu kadar uğraşıp kendini derde sokuyorsun al şu yöntemi kullan sorunun hallolur diyen bir kardeşimiz varmı..!

    Veya server optimizasyonuyla alakalı sıkıntım olduğunu düşünen arkadaşlarım varsa makina özelliklerim şunlar.



    Parallels Plesk Panel version: 9.2.3
    Operating system: Linux 2.6.22.19-0.1-bigsmp
    CPU: AuthenticAMD, Dual-Core AMD Opteron(tm) Processor 1216
  • 29-05-2010, 09:49:26
    #2
    Üyeliği durduruldu
    250 bin haber büyük bir rakam degil. kodlari inceleyip ilk başta sayfa açılmasını yavaşlatan etkeni bulmak lazim. sonrada ona göre optimizasyonlar düşünmek lazim
  • 29-05-2010, 11:12:33
    #3
    Üyeliği durduruldu
    Alıntı
    mySQL'e bir tablo daha oluşturalım mesela cache_news diye son 24 saat te bir bu tablonun içini boşaltacağız yada farklı saat dilimleri içinde o bize kalmış.

    Bir misafir google aramasında bizim sitemizi gördü ve linke tıkladı. Tıkladığı zaman yani sql sorgusu olduğun da önce "cache_news" tablosuna bakacak eğer orada o haber yok ise daha sonra "news" tablosuna bakacak haberi ekrana getirecek. ve aynı haberi bu sefer "cache_news" tablosuna aktaracak.

    Başka birisi yine aynı haberin linkine tıkladığında "cache_news" tablosundaki veri sayısı az olduğundan ve o haber "cache_news" tablosunda var olduğundan "news" tablosuna bağlanıp da mysql i gereksiz yere kasmamış olacak..!
    cache_news tablosunu oluşturun ama haber varsa ordan çekiyim yoksa news tablosundan çekiyim diyerek kullanmayın. sadece genel listelemeler için kullanın (yeni haberler,günün haberleri vs)

    news tablosunda arama yapıyorsanız fulltext kullanın ve arama için kullanılacak kelimeleri tek sütunda toplayın, sütun varchar(250) olarak ayarlayın.

    her haberin bilgilerini cacheleyin. mysql den çekmeyin. news tablosunda genel hit, günlük hit gibi güncellemeler yapıyorsanız kaldırın, yeni bir tablo açın orda güncellemeler yapın.

    server ne kadar optimizede etsen yada daha iyi bir sunucuyada geçsen de anlık online arttıkça mysql kasmaya devam eder. anlık online 2000 kişi de olsa kasmasın diyorsan muhakkak cacheleme yapıcaksınız.
  • 29-05-2010, 11:12:41
    #4
    Üyeliği durduruldu
    250bin haberin büyük olmadığını söylediğiniz için biraz gönlümü ferahlattınız
    Fakat sorguları elimizden geldiğince minimum seviyeye düşürdük fakat yine böyle kasma sorunu olduğu için böyle değişik değişik fikirler geliyor aklıma.
  • 29-05-2010, 11:44:09
    #5
    Kodlama mantığınızı görmeden mySQL yapısını görmeden size fikir vermek biraz abes kaçar.

    Kaba taslak yapmanız gereken bir kaç işlem; Veritabanını tekrar optimize edin (gözden geçirin) optimizasyonda tablo indexlerine dikkat edin eğer indexleme yapmamışsanız mutlaka yapın daha sonra kodlama tabanınıza mysql'de dönen verileri mysql_free_result ile serbest bırakın ardından mysql'den çıkın. Şuanki çözümünüz bundan ibaret şöyle bir yolda seyredilebilir. Verilerinizin çok aşırı bir şekilde yoğun olduğunu düşünelim. A'dan Z'ye tablolar açarsınız eklediğiniz her haberin ilk harfine yada ilk 2 harfine göre tablolara kaydettirirsiniz veri çekerkende haber başlığına bakıp ilgili tablodan verileri çekebilirsiniz. Buda ayrı bir yöntem veri tabanı çok büyük olan siteler için öneririm. Sizin sitenizde 250 bin tane veri hiç bişey kanımca.

    Kolay gelsin...
  • 29-05-2010, 15:00:25
    #6
    Üyeliği durduruldu
    kodları incelemek lazım.
    haber sisteminde rahat etmek istiyorsanız kod bilginiz yoksa imzamı inceleyiniz.
  • 29-05-2010, 15:35:50
    #7
    Üyeliği durduruldu
    hocam eğer isterseniz sorguları tek tek düzenlerim. performansı arttırırım. ücreti 25 tl'dir. sadece size özel olucaktır. işlemler için ftp bilgileriniz şarttır(sql düzenlemeside yaparım). fiyatlarım her zaman sabittir. düşünürseniz imzamda msnim yazıyor kolay gelsin.
  • 29-05-2010, 18:52:44
    #8
    Sitenizde haberleri RANDOM gösteren bir yer var mı ? Eğer varsa büyük ihtimalle order by rand() özelliği kullanılmıştır. Eğer bunlar varsa order by rand() komutunu değiştirmeniz gerekicek.
  • 29-05-2010, 23:32:39
    #9
    çalıştırılmış olan bir sql sorgusunun çıktısını gene aynı sql sorgusunu md5 olarak çevirip bir dosya içerisine serialize yapıp yerleştirin, daha sonra gelen mysql sorgusunu tekrar md5 e çevirip o isimde dosya olup olmadığını kontrol edin varsa dosyadan okuyun yoksa gene mysql den alın tekrar aynı şekide dosyaya serialize yapıp yazdırın

    buşekilde minumum belirli bir zaman kaybınız olur, işlemciyi fazla kasmamış rami kullanmış olursunuz o yüzden sadece sorgudan gelen sorgu sayısının büyüklüğüne görede yapabilirsiniz atyorum 30 dan büyükse cache yap gibi