• 07-04-2010, 03:21:16
    #1
    Evet arkadaşlar
    15k wp sitem var biliyorsunuzdur, son günlerde artan cpu sorununun nedenini arıyordum. Günlerce optimasyon sonucu sorunu buldum.
    Sorun etiket bulutundaki rand.
    Etiketler random iken:
    Total num_query time: 6,605
    Descending iken:
    Total num_query time: 2,605
    Cpu kullanımı:%60 düştü.

    Daha öncede randomdan çok çekmiştim. Konusu burada.

    Çözüm aslında üstteki konuda randı aşağıdaki şekilde değiştirmeye denedim olmadı beceremedim, rastgele resimde çalıştırabilmiştim. Bu kod ile rastgele resim gösterebiliyorum ve cpu konusunda çok daha etkin. Aynı mantıkla etiket de gösterebilmemiz lazım ama editleyemedim. Bu ortak sorunu çözebilecek arkadaşların yardımını bekliyorum. Basit kodlamalarla wordpress i cpu canavarı olmaktan kurtarabiliriz.
    WHERE term_id = ROUND(".lcg_value()." * (SELECT COUNT(*) FROM $wpdb->wp_terms))
  • 07-04-2010, 04:58:36
    #2
    Üyeliği durduruldu
    Aslında ilginç bir tesbit. sitemi ilk açtığım zamanlarda hit günlük 600 700 tekil civarıyken Cpu %25 vs gidiyor. Bir çok defa hostçu ile kavgalı olmuşumdur...Her neyse şuan ki temada etiket bulutu kullanmıyorum tekil 5 6k cpu %1 veya 2.

    Aslında isteseler wp 3 beta versiyonunda bu sorunu ortadan kaldırırlar.Madem istemiyorlar böyle olması işlerine geliyor. İş başa düştü misali kendi işimizi deneme yanılmalarla kendimiz göreceğiz.

    Etiket bulutlarını ve etiketleri komple kaldırsak ne olur? Hit mi düşer. PR mi azalır... Bunları bilen bir arkadaşımız açıklarsa komple kaldıracam.
  • 07-04-2010, 07:06:29
    #3
    WordPress'in tabloları karışık olmasa ve her şey basitçe bir tablodan çekilse, işler dediğin gibi kolay olurdu ancak wordpress'in etiket bulutu mantığına bakarsan, bir yerden etiketi, diğer yerden idyi, sonra bu id ile etiket linkini ve yine aynı id ile etiket sayısının değerini alır.
    Keşke etiketler tek bir tabloda olsa da, dediğin gibi yapılsa
  • 07-04-2010, 07:16:36
    #4
    seemsiyah adlı üyeden alıntı: mesajı görüntüle
    WordPress'in tabloları karışık olmasa ve her şey basitçe bir tablodan çekilse, işler dediğin gibi kolay olurdu ancak wordpress'in etiket bulutu mantığına bakarsan, bir yerden etiketi, diğer yerden idyi, sonra bu id ile etiket linkini ve yine aynı id ile etiket sayısının değerini alır.
    Keşke etiketler tek bir tabloda olsa da, dediğin gibi yapılsa
    Konuya gelmeni bekliyordum açıkcası
    Neyse aslında çok basit değil mi en azından bilen sizler için şöyle ki:
    Random seçtiğimizdeki sorgu:
    Query: SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tt.term_taxonomy_id = tr.term_taxonomy_id WHERE tt.taxonomy IN ('post_tag', 'category') AND tt.count > 0 GROUP BY t.term_id ORDER BY RAND() desc LIMIT 30
    hali ile bu çok kasıyor

    Count seçtiğimizde ise:
    Query: SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tt.term_taxonomy_id = tr.term_taxonomy_id WHERE tt.taxonomy IN ('post_tag', 'category') AND tt.count > 0 GROUP BY t.term_id ORDER BY tt.count desc LIMIT 30
    Kasmaması için sorgu şu şekilde olsa(doğru yazamayabilirim php bilgim malum)

    Query: SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tt.term_taxonomy_id = tr.term_taxonomy_id WHERE tt.taxonomy IN ('post_tag', 'category') AND tt.count > 0 GROUP BY t.term_id ORDER BY WHERE term_id = ROUND(".lcg_value()." * (SELECT COUNT(*) FROM $wpdb->wp_terms)) LIMIT 30
    Başka bir konuda yapabilmiştim.

    Ayrıntılı olarak burada yer alıyor. Rand konusu.

    Şimdi düşündüğüm random etiket seçilirse, aşağıda verdiğim sorgunun yapılması, yada doğru olarak yapılması. Bilmediğimden bana kolay geliyor, bilmiyorum wp karışık işte, üstadlara sormak en güzeli, yazdıklarım gene komik geliyorsa kusura bakma Dünkü sorunu dediğin gibi sorgu ile çözdük 1.400 satır silinince düzeldi
  • 07-04-2010, 07:30:47
    #5
    yalnız sorgu içinde iki sorgu yapıyorsun o zaman d a
    SELECT COUNT(*) FROM $wpdb->wp_terms var bir de... o zaman önce toplam etiket sayısını sorguluyorsun, sonra bununla yeni bir sorgu oluşturmuş oluyorsun... yani 2 sorgu oluyor yine

    wp_tag_cloud'u random yapacaksanız belli bir sayıyla kısıtlayın mesela 45 tane random getireceğine, 20 tane getirsin...
  • 07-04-2010, 07:34:14
    #6
    Sorgu sayısı artabilir semih hocam sorun değil ki amaç sorgunun cpu yu kasmaması. Bu linkten randon sorgu sürelerini inceleyebilirsin, daha önce rastgele resim gösterirken kullandım sorgu süresini dolayısı ile loadu 4 kata yakın azalttı. Tabii benimki deneyim ve araştırma, konudaki kodları inceleyince vay be evet daha az yorar bu diyemiyorum anlamadığımdan ama öyle
  • 07-04-2010, 07:37:38
    #7
    ben şu sorguya ayar verip bi deniyeyim bakalım
  • 07-04-2010, 07:40:25
    #8
    seemsiyah adlı üyeden alıntı: mesajı görüntüle
    ben şu sorguya ayar verip bi deniyeyim bakalım
    Tamam hocam teşekkürler, şu sorun yüzünden ne çektim ya, cpu kasmayan wp istiyoruz
  • 07-04-2010, 07:59:43
    #9
    Yalnız şöyle bir sıkıntı var
    Bizim etiketler başta da belirttiğim gibi, tek bir tablo içinde değil... yani toplam etiket sayısını almak için, otomatik olarak 2 tablo sorgulamış oluyoruz... Yaptığımız sorgularda senin yukarıda yazdığının benzeri oluyor Bu durumda lcg_value kullansak bile toplam sayıyı almak için ekstra işlem yapacağız Burdaki tek sıkıntı tek bir tablo üzerinde çalışılmaması