İçeriğe geç
Önem Bilişim

XenForo Forumlarında Veritabanı Yükünü Azaltma ve Hızlandırma Taktikleri

XenForo veritabanı optimizasyonu: MariaDB bellek ayarları, yavaş sorgu logu, Elasticsearch ile arama, okundu verisi temizliği ve bellek dağılımı hesaplayıcısı.

Hosting ve Alan Adı7 dk okuma
XenForo Forumlarında Veritabanı Yükünü Azaltma ve Hızlandırma Taktikleri
İçindekiler
  1. Veritabanı yükü nereden gelir?
  2. Birinci taktik: InnoDB arabelleğine yeterli bellek
  3. Bellek dağılımını hesaplayın
  4. İkinci taktik: Yavaş sorguları bulun
  5. Üçüncü taktik: Aramayı Elasticsearch’e taşıyın
  6. Dördüncü taktik: Biriken verileri temizleyin
  7. Beşinci taktik: Bakım işlerini planlayın
  8. Redis ile tekrar eden okumaları azaltın
  9. Sıkça sorulan sorular
  10. XenForo veritabanı neden yavaşlar?
  11. innodb_buffer_pool_size kaç olmalı?
  12. XenForo için Elasticsearch ne zaman gerekir?
  13. XenForo veritabanı yedeği nasıl alınır?
  14. Okundu işareti verisi kaç gün saklanmalı?
  15. MySQL mi MariaDB mi?
  16. Sonuç: Büyüyen veriyi yönetmek

Forumunuz beş yaşında. İlk yıllarda her şey hızlıydı, ama artık arama sonuçları birkaç saniye sürüyor, yönetim panelindeki bazı işlemler zaman aşımına uğruyor ve gece yedeği sabaha kadar bitmiyor. Sunucu aynı, kod aynı, değişen tek şey veritabanının boyutu. XenForo veritabanı optimizasyonu, büyüyen forumların yıllar içinde biriken yükünü yönetmenin yoludur.

Bu yazıda XenForo’da veritabanı yükünün nereden geldiğini, MariaDB ve MySQL’in bellek ayarlarını, yavaş sorguların nasıl bulunacağını, aramanın neden ayrı bir sisteme taşınması gerektiğini ve biriken verilerin nasıl temizleneceğini anlatıyoruz. Bu ayarlar sunucu yapılandırmasına erişim gerektirir. Kaynakların size ayrıldığı XenForo hosting gibi paylaşımsız ortamlarda doğrudan uygulanabilir.

KısacaXenForo’da veritabanı yükünü azaltmak için önce MariaDB/MySQL’in InnoDB arabelleğine yeterli bellek ayırın ve yavaş sorgu logunu açarak sorunlu sorguları bulun. Ardından büyük forumlarda aramayı Elasticsearch’e taşıyın, okundu işareti verilerinin saklama süresini kısaltın, ağır eklentileri ölçün ve bakım işlerini sakin saatlere planlayın. Redis önbellek de okuma yükünü belirgin şekilde azaltır.

Veritabanı yükü nereden gelir?

Bir XenForo forumunda veritabanını en çok altı kaynak zorlar. Hangisinin sizin forumunuzda baskın olduğunu bilmek, optimizasyona nereden başlayacağınızı belirler.

XenForo veritabanı yükünün 6 kaynağı: arama, okundu işaretleri, kullanıcı etkinliği, bildirimler, eklenti sorguları ve bakım işleri
XenForo’da veritabanını en çok zorlayan altı kaynak. Büyük forumlarda arama ve okundu işaretleri genellikle ilk sıradadır.
  • Arama: Varsayılan MySQL tam metin araması, milyonlarca mesajı olan forumlarda ağırlaşır.
  • Okundu işaretleri: Her üyenin hangi konuyu ve forumu okuduğu ayrı tablolarda tutulur ve bu tablolar hızla büyür.
  • Kullanıcı etkinliği: Çevrimiçi kullanıcı listesi ve oturum bilgileri sürekli güncellenir.
  • Bildirimler: Her yanıt ve beğeni, ilgili kullanıcılar için bildirim kaydı oluşturur.
  • Eklenti sorguları: Bazı eklentiler dizinlenmemiş ya da her sayfada tekrar eden sorgular çalıştırır.
  • Bakım işleri: Önbellek yeniden oluşturma, istatistik güncellemesi ve yedekleme yoğun okuma ve yazma yapar.

Birinci taktik: InnoDB arabelleğine yeterli bellek

MariaDB ve MySQL, sık kullanılan tablo verilerini ve dizinleri InnoDB arabelleğinde (buffer pool) tutar. Arabellek yeterince büyükse sorgular diske gitmeden bellekten yanıtlanır. Varsayılan değer genellikle 128 MB’tır ve birkaç yüz MB’lık bir forum veritabanı için bile yetersizdir.

Web sunucusu, PHP, Redis ve veritabanı aynı sunucuda çalışıyorsa belleği paylaştırmanız gerekir. 4 GB bellekli bir sunucu için başlangıç ayarları şöyle olabilir. CyberPanel kullanan sunucularda MariaDB yapılandırması genellikle /etc/my.cnf ya da /etc/mysql/my.cnf dosyasındadır:

[mysqld]
innodb_buffer_pool_size = 1536M
innodb_log_file_size = 256M
max_connections = 150
slow_query_log = 1
long_query_time = 1

Bu değerler bir başlangıçtır; XenForo veritabanı optimizasyonunda ölçmeden yapılan ayar kalıcı olmamalıdır. Değişiklikten sonra veritabanı servisini yeniden başlatın. Arabelleğin yeterli olup olmadığını anlamak için zaman içinde disk okumalarının bellek okumalarına oranına bakılır. Bunu sizin yerinize yorumlayan MySQLTuner betiği, ayar önerilerini tek ekranda sunar.

4 GB bellekli VDS'te XenForo için örnek bellek dağılımı: işletim sistemi, PHP, Redis, MariaDB arabelleği ve güvenlik payı
4 GB’lık bir sunucuda örnek dağılım: Belleğin yaklaşık üçte biri veritabanı arabelleğine ayrılır, geri kalanı PHP, Redis ve işletim sistemi arasında paylaşılır.

Bellek dağılımını hesaplayın

Bellek dağılımı hesaplayıcı
Web, PHP, Redis ve veritabanı aynı sunucudaysa InnoDB arabelleği için önerilen değeri hesaplar.
İşletim sistemi + webPHPRedisElasticsearchInnoDB arabelleği
–

İkinci taktik: Yavaş sorguları bulun

Yukarıdaki ayarlardaki slow_query_log ve long_query_time satırları, bir saniyeden uzun süren tüm sorguları kayda geçirir. Birkaç gün sonra bu kayda bakmak, sorunun hangi tablodan ya da hangi eklentiden geldiğini gösterir. Aynı sorgu yüzlerce kez görünüyorsa ya bir dizin eksiktir ya da bir eklenti gereksiz bir sorguyu tekrar tekrar çalıştırıyordur.

XenForo’nun çekirdek tablolarına kendi başınıza dizin eklemeyin. Güncellemelerde sorun çıkarabilir. Yavaş sorgu bir eklentiye aitse önce eklentinin güncel sürümünü kontrol edin, gerekirse geliştiricisine bildirin ya da alternatif bir eklentiye geçin. Sorgu sayısını sayfa bazında görmek için XenForo’nun hata ayıklama modunu yalnızca bir test kopyasında açın. Canlı forumda açmak hem performansı hem güvenliği olumsuz etkiler.

Üçüncü taktik: Aramayı Elasticsearch’e taşıyın

XenForo, varsayılan olarak MySQL’in tam metin arama özelliğini kullanır. Küçük ve orta forumlar için yeterlidir. Ancak mesaj sayısı milyonlara ulaştığında her arama veritabanını belirgin şekilde yorar, sonuçlar yavaşlar ve alaka sıralaması zayıflar.

XenForo Enhanced Search eklentisi, aramayı Elasticsearch’e taşır. Elasticsearch, metin aramaya özel tasarlanmış ayrı bir sistemdir. Aramalar veritabanından tamamen ayrılır, sonuçlar daha hızlı gelir ve benzer kelimeler daha iyi eşleşir. Elasticsearch kendi başına bellek isteyen bir servis olduğu için onu ayrı bir sunucuda ya da yeterli belleği olan bir sunucuda çalıştırın.

XenForo'da MySQL tam metin arama ile Elasticsearch karşılaştırması: hız, veritabanı yükü, alaka ve kaynak ihtiyacı
Büyük forumlarda aramayı Elasticsearch’e taşımak, veritabanından en ağır yükü kaldırır.

Dördüncü taktik: Biriken verileri temizleyin

XenForo, okundu işareti verilerini yönetim panelinde belirlenen gün sayısı kadar saklar. Bu süreyi uzun tutmak tabloların büyümesine yol açar. Çoğu forum için 30 gün yeterlidir. Eski bildirimler, süresi dolmuş arama sonuçları ve bekleyen işler de zamanlanmış görevlerle temizlenir. Bu yüzden arka plan işlerinin sunucu cron’u ile düzenli çalıştığından emin olun.

Kullanılmayan eklentileri yalnızca devre dışı bırakmak yerine kaldırmak da önemlidir. Kaldırılan bir eklenti tablolarını da siler, devre dışı bir eklentinin tabloları ise veritabanında kalır ve yedekleri büyütür.

Beşinci taktik: Bakım işlerini planlayın

Önbellekleri yeniden oluşturma, arama dizinini yeniden kurma ve büyük içe aktarma işlemleri yoğun veritabanı yükü yaratır. Bu işleri trafiğin en düşük olduğu saatlere bırakın. Yedekleme için mysqldump komutunu InnoDB tablolarında kilit oluşturmayan seçenekle kullanın:

mysqldump --single-transaction --quick forum_db | gzip > forum-yedek.sql.gz

--single-transaction seçeneği, yedek alınırken forumun yazma işlemlerini sürdürmesini sağlar. --quick ise büyük tabloları belleğe yüklemeden satır satır aktarır.

Redis ile tekrar eden okumaları azaltın

XenForo veritabanı optimizasyonunun son halkası, aynı verinin tekrar tekrar okunmasını önlemektir. Seçenekler, şablonlar, stil bilgileri ve sık kullanılan sorgu sonuçları her istekte veritabanından okunursa yüzlerce eş zamanlı ziyaretçi aynı satırları defalarca ister. Redis’i XenForo’nun önbellek sağlayıcısı olarak tanımladığınızda bu veriler bellekten gelir ve veritabanı yalnızca değişen veriler için çalışır. Redis’in bellek sınırını belirlemeyi ve yalnızca yerel adresten dinlemesini sağlamayı unutmayın.

TaktikAzalttığı yükNe zaman öncelikli?
InnoDB arabelleğiDisk okumalarıHer zaman ilk adım
Yavaş sorgu loguSorunlu sorgularAni yavaşlamalarda
ElasticsearchArama sorgularıMilyonlarca mesajda
Okundu verisi temizliğiTablo büyümesiYaşlı ve büyük forumlarda
Redis önbellekTekrarlanan okumalarYüksek eş zamanlı trafikte
Bakım planlamasıZirve saatlerdeki kilitlerYedek ve dizin işlerinde

Önbellek ve iş kuyruğu gibi sunucu katmanındaki ayarları XenForo optimizasyonu yazımızda ayrıntılı anlattık. Bu iki yazıdaki ayarlar birlikte uygulandığında en iyi sonucu verir.

Veritabanınız büyüdükçe arabelleğe ayırabileceğiniz bellek de artmalıdır. Önem Bilişim’in paylaşımsız VDS altyapılı XenForo paketleri 2, 3 ve 4 GB bellek seçenekleriyle sunuluyor ve CyberPanel üzerinden veritabanı yönetimine imkân tanıyor.

İlginizi çekebilir: MySQL portunu dış erişime kapatmak: güvenlik için yapmanız gerekenler

Sıkça sorulan sorular

XenForo veritabanı neden yavaşlar?

En sık nedenler; veritabanının InnoDB arabelleğinden büyümesi, büyük forumlarda MySQL tam metin aramanın ağırlaşması, okundu işareti ve bildirim tablolarının şişmesi ve ağır sorgular çalıştıran eklentilerdir. Yavaş sorgu logunu açmak, bunlardan hangisinin sizin forumunuzda etkili olduğunu gösterir.

innodb_buffer_pool_size kaç olmalı?

Yalnızca veritabanı çalışan bir sunucuda belleğin %60–70’i yaygın bir başlangıçtır. Web sunucusu, PHP ve Redis de aynı sunucudaysa bu oran üçte bir civarına iner. İdeal durumda veritabanınızın sık kullanılan kısmı tamamen arabelleğe sığmalıdır. MySQLTuner gibi araçlar mevcut kullanıma göre öneri sunar.

XenForo için Elasticsearch ne zaman gerekir?

Mesaj sayısı milyonlara yaklaştığında, aramalar birkaç saniye sürmeye başladığında ya da arama sırasında veritabanı yükü belirgin şekilde arttığında Elasticsearch’e geçmek mantıklıdır. Küçük ve orta forumlar için MySQL tam metin araması genellikle yeterlidir.

XenForo veritabanı yedeği nasıl alınır?

mysqldump komutunu –single-transaction seçeneğiyle kullanmak, InnoDB tablolarında forumu kilitlemeden tutarlı bir yedek alır. Yedeği sıkıştırıp sunucunun dışında bir yere kopyalayın. Büyük forumlarda yedeği trafiğin en düşük olduğu saate planlayın ve düzenli olarak bir test ortamına geri yükleyerek doğrulayın.

Okundu işareti verisi kaç gün saklanmalı?

Çoğu forum için 30 gün yeterlidir. Bu süreden eski konular zaten okunmuş kabul edilir ve kullanıcı deneyimi pek etkilenmez. Süreyi uzatmak, okundu işareti tablolarının büyümesine ve bu tablolara yapılan sorguların yavaşlamasına yol açar.

MySQL mi MariaDB mi?

XenForo iki veritabanıyla da çalışır. CyberPanel gibi birçok kontrol paneli varsayılan olarak MariaDB kurar. Performans farkı çoğu forum için belirleyici değildir; asıl fark doğru bellek ayarlarından ve düzenli bakımdan gelir. Sürüm yükseltmelerinde XenForo’nun desteklediği veritabanı sürümlerini kontrol edin.

Sonuç: Büyüyen veriyi yönetmek

XenForo veritabanı optimizasyonu tek seferlik bir iş değil, forum büyüdükçe tekrarlanan bir bakımdır. Arabelleğe yeterli bellek ayırın, yavaş sorguları ölçün, aramayı büyüdüğünüzde ayrı bir sisteme taşıyın ve biriken verileri düzenli temizleyin. Bu adımlar, beş yaşındaki bir forumun ilk günkü kadar hızlı kalmasını sağlar.

Veritabanı ayarlarını kendiniz yapabileceğiniz paylaşımsız bir altyapı arıyorsanız Önem Bilişim XenForo hosting paketlerini inceleyebilirsiniz. Veritabanı ve forum yönetimi üzerine diğer yazılarımız Önem Bilişim blogunda yer alıyor.

XenForo hosting

Veritabanınız için ayrılmış bellek

Paylaşımsız VDS altyapısında CPU ve RAM yalnızca sizin; MariaDB ayarlarını forumunuza göre yapın, CyberPanel ile kolayca yönetin.

Paylaş:WhatsAppXFacebookLinkedInTelegram

Bunlar da ilginizi çekebilir