• 25-12-2014, 21:33:38
    #1
    Merhaba arkadaşlar, 100K sitemde SQL işlemlerinde sıkıntı çıkıyor.

    Aşağıdaki kodu nasıl daha stabil ve performanslı hale getirebilirim ?

    SELECT count(t.tags_id) FROM vtags AS t INNER JOIN tags AS y ON(t.tags_id = y.id) where dateint <=time()
  • 25-12-2014, 22:02:37
    #2
    Üyeliği durduruldu
    PiEycPi adlı üyeden alıntı: mesajı görüntüle
    Merhaba arkadaşlar, 100K sitemde SQL işlemlerinde sıkıntı çıkıyor.

    Aşağıdaki kodu nasıl daha stabil ve performanslı hale getirebilirim ?

    SELECT count(t.tags_id) FROM vtags AS t INNER JOIN tags AS y ON(t.tags_id = y.id) where dateint <=time()
    index yoksa tablonuzda index oluşturmanızı öneririm

    tags tablosunda id unique değilse
    phpmyadminden şu komutları çalıştırıp deneyin

    create index tags_id_index ON tags (id)
    işinizi görebilir. tags tablosundaki dağınık yerleşimli ID sütununu sıraya koyar ve sorgularınızda hissedilie hızlanma sağlar

    benzer indexleri diğer tablolarınıza da ekleyebilirsiniz
  • 25-12-2014, 22:07:53
    #3
    spider58 adlı üyeden alıntı: mesajı görüntüle
    index yoksa tablonuzda index oluşturmanızı öneririm

    tags tablosunda id unique değilse
    phpmyadminden şu komutları çalıştırıp deneyin

    create index tags_id_index ON tags (id)
    işinizi görebilir. tags tablosundaki dağınık yerleşimli ID sütununu sıraya koyar ve sorgularınızda hissedilie hızlanma sağlar

    benzer indexleri diğer tablolarınıza da ekleyebilirsiniz
    id sutunu auto ıncremnet olarak deger almaktadır üstadım.
  • 25-12-2014, 22:11:45
    #4
    Üyeliği durduruldu
    PiEycPi adlı üyeden alıntı: mesajı görüntüle
    id sutunu auto ıncremnet olarak deger almaktadır üstadım.
    vtags tablosunda tags_id?

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 22:11:45 -->-> Daha önceki mesaj 22:08:40 --

    şunu çalıştırıp

    create index vtags_id_index ON vtags (tags_id)
    dene hocam

    vtags_id unique değil anladığım kadarıyla
  • 26-12-2014, 01:26:58
    #5
    ylv
    Üyeliği durduruldu
    PiEycPi adlı üyeden alıntı: mesajı görüntüle
    Merhaba arkadaşlar, 100K sitemde SQL işlemlerinde sıkıntı çıkıyor.

    Aşağıdaki kodu nasıl daha stabil ve performanslı hale getirebilirim ?

    SELECT count(t.tags_id) FROM vtags AS t INNER JOIN tags AS y ON(t.tags_id = y.id) where dateint <=time()
    EXPLAIN SELECT count(t.tags_id) FROM vtags AS t INNER JOIN tags AS y ON(t.tags_id = y.id) where dateint <=time()

    bu sorgunun çıktısını yazın veya özel mesaj gönderin, performansı nasıl artıracağınız hakkında bilgi veriyim. iyi çalışmalar.
  • 26-12-2014, 08:18:03
    #6
    ylv adlı üyeden alıntı: mesajı görüntüle
    EXPLAIN SELECT count(t.tags_id) FROM vtags AS t INNER JOIN tags AS y ON(t.tags_id = y.id) where dateint <=time()

    bu sorgunun çıktısını yazın veya özel mesaj gönderin, performansı nasıl artıracağınız hakkında bilgi veriyim. iyi çalışmalar.
    buyrun hocam


    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 08:18:03 -->-> Daha önceki mesaj 07:53:57 --

    spider58 adlı üyeden alıntı: mesajı görüntüle
    vtags tablosunda tags_id?

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 22:11:45 -->-> Daha önceki mesaj 22:08:40 --

    şunu çalıştırıp

    create index vtags_id_index ON vtags (tags_id)
    dene hocam

    vtags_id unique değil anladığım kadarıyla
    üstadım dediklerinizi uyguladım ancak,

    mysql kullanımı cpu %200'den %430'a
    mysql ram kullanımı %0,3'ten %37'e fırladı.


    Yukarıdaki görüntü en düşük top -c komutunda çekilmiştir.
  • 26-12-2014, 11:03:40
    #7
    Üyeliği durduruldu
    PiEycPi adlı üyeden alıntı: mesajı görüntüle
    buyrun hocam


    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 08:18:03 -->-> Daha önceki mesaj 07:53:57 --



    üstadım dediklerinizi uyguladım ancak,

    mysql kullanımı cpu %200'den %430'a
    mysql ram kullanımı %0,3'ten %37'e fırladı.


    Yukarıdaki görüntü en düşük top -c komutunda çekilmiştir.

    tags_id elemanını tablo yapısından NOTNULL olarak değiştirin. Tablolarda bu önemli. Mysql COUNT sorgusunu işlerken NULL satır var mı diye bakar, ki bu da zaman kaybettirir. NOTNULL derseniz bu NULL için bakma işlemini yapmaz.


    indexin zamanı düşüreceği yerde artırması çok enteresan

    ID İSİM
    1 - Top
    3 - Araba
    5 - Sakız
    1 - Top
    8 - Kamyon
    1 - Top
    8 - Kamyon


    gibi yüzbinlerce kayıt varsa ki sizin EXPLAIN yaptığınız sorgu sonucunda 141bin küsür tane , index işlemi bunu

    1 - Top
    1 - Top
    1 - Top
    3 - Araba
    5 - Sakız
    8 - Kamyon
    8 - Kamyon

    şekline getirir ve sorgu sonucunu ve erişimi hızlandırır.

    dediğimi yapın öyle deneyin

    olmazsa COUNT(*) olarak değiştirip deneyin sorguyu
  • 26-12-2014, 14:12:27
    #8
    ylv
    Üyeliği durduruldu
    PiEycPi adlı üyeden alıntı: mesajı görüntüle
    buyrun hocam
    [COLOR="Silver"]
    ilk olarak t tablosunu (type=all) tamamına bakmış 140k satır,
    daha sonra join birleştirmesi için type=eq_ref (primary veya unique index kullandığını belirtir) her zaman 1 satırla birleşir (rows=1)

    sorgunu yavaşlatan tags tablonda verdiğin şartları sağlayan bir index olmaması.
    where dateint <=time()

    dateint sütunu int tipinde sanırım timestamp veya datetime yapmanız daha iyi olurdu aslında. datetime 8,timestamp 4, int 4 byte yer kaplasada datetime performansı daha iyidir.

    dateint sütununa index ekleyerek explain sorgusu bir yere not alın,

    sonra bu indexi kaldırıp tags_id ve dateint multiple index ekleyin

    explain sorguları ve sorgu sürelerini tekrar yazın bana...
  • 26-12-2014, 17:20:53
    #9
    ylv adlı üyeden alıntı: mesajı görüntüle
    ilk olarak t tablosunu (type=all) tamamına bakmış 140k satır,
    daha sonra join birleştirmesi için type=eq_ref (primary veya unique index kullandığını belirtir) her zaman 1 satırla birleşir (rows=1)

    sorgunu yavaşlatan tags tablonda verdiğin şartları sağlayan bir index olmaması.
    where dateint <=time()

    dateint sütunu int tipinde sanırım timestamp veya datetime yapmanız daha iyi olurdu aslında. datetime 8,timestamp 4, int 4 byte yer kaplasada datetime performansı daha iyidir.

    dateint sütununa index ekleyerek explain sorgusu bir yere not alın,

    sonra bu indexi kaldırıp tags_id ve dateint multiple index ekleyin

    explain sorguları ve sorgu sürelerini tekrar yazın bana...

    Üstadım, Olay Şu ben yukarıdaki SQL sorgusunu scriptte hiçbir dosyada kullanmadığım halde, show proccesslist; komutunda o sorgu çıkıyor.
    Ancak, Şuan objektif olarak baktığım takdirde scriptimin hiçbir yerinde hiçbir köşesinde öyle bir komut yok ki tags tablosunda da mesela dateint sutunu olmamasına rağmen SQL sorgulara cevap veriyor. Gerek phpmyadmin'de gerekse script içerisinde hata vermiyor.