DataLife Engine, çok nadir de olsa performans sorunları ile karşılaşmaktadır ve bu sorunlar mySQL kaynaklı oluyor. Sander-Development ise bu sorunların önüne geçmek için sistemin mySQL veritabanına bindirdiği yükü yaklaşık bir buçuk saatlik bir zaman diliminde analiz etmiş. Şimdi sistemde yapılmasını önerdiği optimizasyonlara geçelim.
Bu işlemleri gerçekleştirirken DataLife Engine 13.0 ile gelen eklenti desteğini kullandığınızı varsayıyor olacağım. Ancak siz yine de normal olarak PHP dosyasını açarak düzenlemeler yapabilirsiniz. Fakat eklenti yöneticisi ile işlem yaparsanız sürüm yükselttiğinizde tekrar kurulumla uğraşmayacaksınız.
Genel öneriler
İlk olarak "Yayın Tarihi Gelmemiş Makaleleri Sitede Yayınlanması" özelliğini devredışı bırakmanızı tavsiye ediyoruz. Bu işlemi gerçekleştirmek için aşağıdaki adımları takip edin:
- Yönetici Kontrol Panelini açın.
- Sistem Ayarlarına girin.
- Makale sekmesini görüntüleyin.
- Yayın Tarihi Gelmemiş Makaleleri Sitede Yayınlanması seçeneğini devredışı bırakın.
Eğer temanızda Topnews, takvim vb. özellikleri de kullanmıyorsanız mutlaka yine Sistem Ayarlarıiçerisinden kapatın.
2. not detected
Görseldeki resimde GC tablosundaki değerler hariç her şey aslında açık. GC tablosunda yer alan değer, sorgu gerçekleştirilme sayısı.
Bu sorgular, mevcut olmayan kategorilere erişmeye çalışırken ortaya çıkmış. Bu çok büyük bir sorun değil elbette ancak düzeltmemek için bir neden yok.
- Yönetici Kontrol Panelini açın.
- Tüm Bölümlere tıklayın.
- Eklentileri Yönet sayasını görüntüleyin.
- Eklenti ekle butonuna tıklayın.
- Eklenti adına not detected yazın.
- Dosya Eylemleri sekmesine girin.
- Dosya Ekle butonuna tıklayın.
- Dosya adı formuna engine/modules/show.short.php yazın.
- Eylem ekle butonuna tıklayın.
- Bul ve üstüne ekle seçeneğini seçin.
- Bul değeri:
if( $allow_active_news ) {- Üstüne ekle değeri:
if ($do == 'cat' && !(int)$category_id) { $allow_active_news = false; }- Kaydedin.
3. SELECT COUNT(*) as count FROM dle_post
Burada oluşan sorguların sayısına bir bakın. Bu sonuçlar önbelleklemenin etkin olduğu bir siteden alındı ancak yine de çok yüksek.
Öncelikle kategorilerdeki makalelerin sayısını hesaplama özelliğini devredışı bırakalım.
- Yönetici Kontrol Panelini açın.
- Sistem Ayarlarına girin.
- Optimizasyon sekmesini görüntüleyin.
- "Kategorideki makalelerin sayısını hesapla" seçeneğini devredışı bırakın.
Şimdi ise yine bir düzenleme yapmamız gerekiyor.
- Yönetici Kontrol Panelini açın.
- Tüm Bölümlere tıklayın.
- Eklentileri Yönet sayasını görüntüleyin.
- Eklenti ekle butonuna tıklayın.
- Eklenti adına SELECT COUNT yazın.
- Dosya Eylemleri sekmesine girin.
- Dosya ekle butonuna tıklayın.
- Dosya adı formuna engine/modules/show.short.php yazın.
- Eylem ekle butonuna tıklayın.
- Bul ve üstüne ekle seçeneğini seçin.
- Bul değeri:
$count_all = $db->super_query( $sql_count );- Üstüne ekle değeri:
if ($do == 'cat' && isset($cat_info[(int)$category_id]['newscount'])) { $count_all = array( 'count' => (int)$cat_info[$category_id]['newscount'] ); } else- Kaydedin.
Bu düzenleme yukarıda gerçekleştirilen sorguların tamamını ortadan kaldırmaktadır. Ancak sadece kategoriler için. Yine de bu büyük bir sorgu değerini ortadan kaldırıyor.
4. Üçüncü madde üzerine düşünmek
Sorunları ortadan kaldırdık ancak merak etmemiz gereken bir soru olduğunu düşünüyorum: Önbellekleme aktifken neden bu sorguların sayısı bu kadar yüksek? Buradaki değişken DataLife Engine'in sürüm numarasına bağlı olarak değişiyor. Örneğin 10.6 ve daha eski sürümlerde yalnızca gezinmenin ilk 5 sayfası önbelleğe alınıyor, geri kalanlar önbelleklemeye dahil değil. Daha sonraki sürümlerde bu sayfa 10'a çıkartıldı. Güncel 13.0 sürümünde ise bu rakamı elle belirlemek mümkün. Bu ayarı şuradan değiştirebilirsiniz:
- Yönetici Kontrol Panelini açın.
- Sistem Ayarlarına girin.
- Optimizasyon sekmesini görüntüleyin.
- Önbelleğe alınacak sayfa sayısı alanına istediğiniz değeri girin.
Bu doğru bir adım, ancak buradaki değeri akıllıca kullanmanız gerekmektedir. Örneğin 10-20 kategoriye sahip bir siteniz varsa 20-30 sayfayı önbelleğe alabilirsiniz. Ancak çok fazla kategoriye sahipseniz önbelleğe alınacak dosyaların değeri ile oynamanızı tavsiye etmiyoruz.
Neyse, konumuza geri dönelim: Neden bu kadar çok sorgu var? Cevap oldukça basit: önbellekleme. Yani önbellekleme temizlenmesi. Örneğin yeni bir yorum eklendiğinde tüm önbellekleme işlemleri sıfırlanmaktadır. Eğer isterseniz tüm istatistiklerin anında shortstory'de görülmesini engelleyip önbelleklemeyi arttırabilirsiniz. Bu bana kalırsa çok önemli değil, yapıp yapmamak size kalmış.
- Yönetici Kontrol Panelini açın.
- Tüm Bölümlere tıklayın.
- Eklentileri Yönet sayasını görüntüleyin.
- Eklenti ekle butonuna tıklayın.
- Eklenti adına Önbellekleme yazın.
- Dosya Eylemleri sekmesine girin.
- Dosya ekle butonuna tıklayın.
- Dosya adı formuna engine/modules/addcomments.php yazın.
- Eylem ekle butonuna tıklayın.
- Bul ve değiştir seçeneğini seçin.
- Bul değeri:
clear_cache( array( 'news_', 'comm_'.$post_id, $cprefix ) );
Sürüme bağlı olarak bulmanız gereken kod bu da olabilir:
clear_cache( array( 'news_', 'rss', 'comm_'.$post_id, $cprefix ) );- Değiştir değeri:
clear_cache( array( 'comm_'.$post_id, $cprefix ) );- Kaydedin.
Bu sayede bir yorum eklendiğinde artık sadece güncel haberlerin önbelleği ve yorumları kendiliğinden silinir.
- Yönetici Kontrol Panelini açın.
- Tüm Bölümlere tıklayın.
- Eklentileri Yönet sayasını görüntüleyin.
- Eklenti ekle butonuna tıklayın.
- Eklenti adına Önbellekleme yazın.
- Dosya Eylemleri sekmesine girin.
- Dosya ekle butonuna tıklayın.
- Dosya adı formuna engine/ajax/rating.php yazın.
- Eylem ekle butonuna tıklayın.
- Bul ve değiştir seçeneğini seçin.
- Bul değeri:
clear_cache( array( 'news_', $cprefix ) );
Sürüme bağlı olarak bulmanız gereken kod bu da olabilir:
clear_cache( array( 'news_', 'rss', $cprefix ) );- Değiştir değeri:
clear_cache( array( $cprefix ) );- Kaydedin.
Şimdi ise oylamadan sonra yalnızca haberin kendi önbelleği temizlenmiş olacak.
aLinti...