WordPress-woocommerce performans sıkıntısı

Merhabalar,

En popüler içerik yönetim sistemlerinden olan wordpress ve bunun üzerine geliştirilmiş woocommerce ‘ün performansı hakkında bir şeyler yazmak istedim. Öncelikle wordpress çok amaçlı kullanımı amaçladığı için veritabanında bazı kısımlarda fedakarlık yapılması gerekmiş. Örneğin herhangi bir postun (woocommerce ile ürünün) her bir özelliği için postmeta ya bir kayıt açılıyor. Normalde projenizde 2-3 bin ürün varsa ve her bir ürünün 50 özelliğini kaydediyorsanız.100.000 row sıkıntı olmuyor. Ama sitenize 500.000 ürün eklediğiniz zaman postmeta tablonuz birden 25 milyon rowa çıkmakta buda ciddi problemlere ve yavaşlamalara neden olmakta.

Sorun performance ve yavaşlıksa ve ne yapabilirim diyorsanız adım adım atlatmaya çalışacağım.

  • Öncelikle cachlemeyle başlayalım, bu kısımı hallettiğinizde bir çok sorun düzelecektir.
    • Benim tercihim memcache kullanmaktan yana. Öncelikle sunucunuza memcache kurup test edin.
    • Memcache wordpresse entegre etmek içinse w3-total-cache eklentisini kurmanızı öneririm. Daha sonra database istekleriniz, sayfalarınız vesaire ilk kez request edildiklerinde oluşacak daha sonra ki isteklerde direk memoryden getirileceklerdir.
  • Veritabanı bakımı. 
    • ACF eklentisi kullanıyorsanız ve ürünün her türlü detayını tutayım sonra lazım oldukça kullanrıım diyorsanız (Benim gibi 🙂 ) yanlış yapıyorsunuz. 500.000 ürün örneğinde her ürünün tek bir özelliği 500.000 potmeta rowu demek. Kullanmadığınız ne varsa silin hatta kullandıklarınızıda minimize edin :). Verileri illa tutacaksanız başka bir tabloda tutup custom querylerle çekin wordpress ürünler için her haltı burada tuttuğunda açılışınız ölümcül yavaşlayabilir.
  • Yavaş sorguları bulmak ve sorunu çözmek.
    • Diğer bir adım slow_query loglamasını açıp hangi sorgu uzun sürüyor bulmanız gerekmekte. Kilit noktalardan birisi bu bence. phpmyadmin ile /phpmyadmin/server_status_advisor.php linkindeki tavsiyelere uymaya çalışın.
    • Slow query tablosundan buldunuz query diyelim. Aklınıza ilk gelen ben bunu nasıl hızlandırabilirim olacaktır doğal olarak. Oldukça kafa patlatmış biri olarak söylüyorum ki bu fikri aklınızda tutun ama vakit harcamayın 🙂 önce doğru soru şu bu query kim kullanıyor, kullanını kaldırırsam sorun düzelir mi ? 😀 Cevap evetse sorun düzeldi.
    • Gelelim benim gibi nasıl hızlandırırım, çağrılıyorsa kullanılıyordur derseniz. Öncelikle sorgunuzun başına Explain ekleyip bir bakın bakalım hangi indexleri kullanıyor. Eğer indexler yetersizse index yaratıp tekrar deneyin. Özellikle join, order, group..içeren sorgular büyük tablolarda sıkıntılara neden olmakta  bunun için şu linklere bir göz atın derim. Ama işin içinden çıkamama durumunuz yüksek bir üst madde iyidir bence 😉 .
      http://dev.mysql.com/doc/refman/5.7/en/order-by-optimization.html
    • Son olarak wordpressden bağımsız https://rpm.newrelic.com kurtarıcım oldu diyebilirim 14 günlük triali var ki günü kurtardı benim için. Kurulumu enterasan biraz server scriptlerle kurup yetki veriyorsunuz 🙂 Ne çalışıyorsa bakıp raporluyor yavaş çalışan sorgudan bu sorguyu kimin çağırdığına kadar giden bir trace veriyor. Opensource filan olsa harika olacakmış ama yine de vereceğiniz paraya değer bence.
  • Son olarak sunucu yu izlemek
    • Memcache, newrelic, ayarlar vesaire tamam diyelim ki hala sıkıntılı durumlar. Bunun için htop gibi araçla sunucuda ne olup bitiyor bakmak gerek. Sunucunuzun rami, cpusu ve diskinin herhangi birinde yetersizlik varsa diğerlerini de kilitler. Örneğin memory az kaldıysa io işlemleri ve gc işlemleri çoğalacağı için CPU da tavan yapar ve sistem yanıt vermekte zorlanır.
    • Sunucu olarak Digitial ocean ya da Amazon gibi cloudbase sistemleri tercih etmenizi öneririm. İhtiyacınıza göre CPU ve ya Ram alıp işleminiz bitince normal kullanımla daha uygun bütçeli kaynaklara dönebilmeniz harika.

 

Saygı ve sevgilerimle,

Yusuf.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir