
30-01-2012, 03:20:56
|
| |
Cachelemek iyi güzel de o sunucuda tek bir site çalışmıyor ki.
Benim 2,5m etiketli bir sitemde cacheli orderby rand() %80 cpu götürüyordu cache günlük olmasına rağmen.
Üstelik her sayfa için ayrı ayrı hesaplanan 10 kayıt dönen bir rand liste olduğu için günlük cachede de olsa her kayıt için (110k kayıt vardı) günde bir soru çalışıyordu. Dakikada 2-3 sorgu denk geliyordu. İşlemci load %80-90 buluyordu hem de bir saniyeden uzun. Server benimdi de bir süre optimize etmeden götürdüm. Shared hostingde aynı gün kapatırlar sitenizi.
Sonra bunu 10-20 adımlı ve mysql sorgulu bir döngü ile değiştirdim. döngüde bir rand değer oluşturup mysql den id indexten çağırıyorsunuz ve bir arraye atıyorsunuz, sonuç döndüğü ve dönen sonuç array de bulunmadığı sürece array eleman adeti 10 olana kadar devam ediyorsunuz. sunucu load %1 altına düştü sorgu süresi 1 saniye altına...
mysql kendi sitesinde dahi 2000 kayıt üzeri tablolarda order by rand() kullanımaması gerektiğini okumuştum şimdi baktım bulamadım.
Konu digiklan tarafından (30-01-2012 Saat 03:25:35 ) değiştirilmiştir..
|