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ı.

İçindekiler
- Veritabanı yükü nereden gelir?
- Birinci taktik: InnoDB arabelleğine yeterli bellek
- Bellek dağılımını hesaplayın
- İkinci taktik: Yavaş sorguları bulun
- Üçüncü taktik: Aramayı Elasticsearch’e taşıyın
- Dördüncü taktik: Biriken verileri temizleyin
- Beşinci taktik: Bakım işlerini planlayın
- Redis ile tekrar eden okumaları azaltın
- Sıkça sorulan sorular
- XenForo veritabanı neden yavaşlar?
- innodb_buffer_pool_size kaç olmalı?
- XenForo için Elasticsearch ne zaman gerekir?
- XenForo veritabanı yedeği nasıl alınır?
- Okundu işareti verisi kaç gün saklanmalı?
- MySQL mi MariaDB mi?
- 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.
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.

- 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.

Bellek dağılımını hesaplayın
İ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.

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.
| Taktik | Azalttığı yük | Ne zaman öncelikli? |
|---|---|---|
| InnoDB arabelleği | Disk okumaları | Her zaman ilk adım |
| Yavaş sorgu logu | Sorunlu sorgular | Ani yavaşlamalarda |
| Elasticsearch | Arama sorguları | Milyonlarca mesajda |
| Okundu verisi temizliği | Tablo büyümesi | Yaşlı ve büyük forumlarda |
| Redis önbellek | Tekrarlanan okumalar | Yüksek eş zamanlı trafikte |
| Bakım planlaması | Zirve saatlerdeki kilitler | Yedek 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.