Veritabanı optimizasyonu, çoğu yavaş WordPress sitesinde göz ardı edilen ama en hızlı sonuç veren işlemlerden biridir. Görselleri sıkıştırır, önbellek kurar, CDN bağlarsınız; ama her sayfa isteğinde arka planda çalışan MySQL veritabanı yıllar içinde gereksiz kayıtlarla şişmişse site yine de takılır. Bu yazıda WordPress'in wp_posts, wp_postmeta ve wp_options tablolarının neden büyüdüğünü, hangi verileri güvenle silebileceğinizi ve tabloları nasıl optimize edeceğinizi adım adım anlatıyoruz. Amaç teori değil; elle veya eklentiyle uygulayabileceğiniz somut bir temizlik planı.
Veritabanı neden zamanla şişer?
WordPress, içerik üretmedikçe bile arka planda sürekli veri yazar. Bir süre sonra veritabanınızın büyük kısmı aslında ölü ağırlıktır. En sık karşılaşılan şişme kaynakları:
- Yazı revizyonları: WordPress her kaydetmede bir kopya tutar. Tek bir uzun blog yazısının onlarca revizyonu olabilir — hepsi
wp_postsiçinde durur. - Otomatik taslaklar ve çöp kutusu: Silinen ama kalıcı kaldırılmamış yazı/sayfa/yorumlar
trashdurumunda bekler. - Spam ve onay bekleyen yorumlar: Özellikle iletişim formu olan sitelerde binlerce spam yorum birikir.
- Transient (geçici) kayıtlar: Eklentiler hızlanmak için
wp_optionstablosuna geçici veri yazar. Süresi dolan transient'ler çoğu zaman otomatik silinmez ve_transient_önekiyle birikir. - Yetim metadata: Silinmiş yazı veya kullanıcılara ait
wp_postmeta/wp_usermetasatırları geride kalır. - Kaldırılan eklentilerin artıkları: Birçok eklenti silinince kendi tablolarını veya
wp_optionskayıtlarını temizlemez. autoloadşişmesi:wp_optionsiçindeki bazı kayıtlar her sayfa yüklemesinde belleğe alınır. Birikmiş büyükautoloadverisi, her isteği yavaşlatır.
Sonuç: yedeklemeler büyür, sorgular yavaşlar ve paylaşımlı hosting disk/bellek limitlerine daha hızlı dayanırsınız.
Başlamadan önce: mutlaka yedek alın
Veritabanı işlemleri geri alınamaz. Tek bir yanlış DELETE sorgusu siteyi çökertebilir. Bu yüzden hiçbir temizliğe yedek almadan başlamayın.
- Hosting kontrol panelinizden (DirectAdmin/Plesk) veya phpMyAdmin'den veritabanının tam
.sqldışa aktarımını indirin. - Mümkünse temizliği önce bir test (staging) ortamında deneyin.
- Otomatik yedek alan bir eklentiniz varsa, son yedeğin tarihini kontrol edin.
Yedeği aldıktan sonra rahatça ilerleyebilirsiniz.
1. Revizyonları, taslakları ve çöp kutusunu temizleyin
İlk hedef wp_posts tablosudur. Revizyon sayısını tamamen sıfırlamak yerine sınırlamanızı öneririz; geçmişe dönme imkânını korur ama şişmeyi engeller. wp-config.php dosyanıza ekleyin:
define('WP_POST_REVISIONS', 5); // yazı başına en fazla 5 revizyon
define('EMPTY_TRASH_DAYS', 7); // çöp kutusu 7 günde otomatik boşalsın
Mevcut birikmiş revizyonları silmek için eklenti kullanmak en güvenli yoldur (aşağıda öneriyoruz). Elle SQL ile yapacaksanız, önce kaç satır olduğunu görün, sonra silin:
-- Sadece görmek için:
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'revision';
-- Silmek için (yedek aldıysanız):
DELETE FROM wp_posts WHERE post_type = 'revision';
Not: Tablo öneki sitenize göre
wp_yerine başka bir şey olabilir (örneğinwp_a1b2_). Sorguları kendi önekinize göre uyarlayın.
Aynı mantıkla auto-draft (otomatik taslak) ve trash durumundaki kayıtları da temizleyebilirsiniz.
2. Spam ve onay bekleyen yorumları silin
Yorum spam'i hem wp_comments hem de wp_commentmeta tablolarını şişirir. WordPress yönetim panelinden Yorumlar > Spam > Hepsini Sil ile toplu temizlik yapabilirsiniz. Çok fazla birikmişse panel zaman aşımına uğrayabilir; bu durumda eklenti veya phpMyAdmin'den parça parça silme daha güvenlidir. Yorum spam'iyle baş etmenin en kalıcı yolu bir spam koruma eklentisi kullanmaktır, çünkü sürekli birikmeyi en baştan engeller.
3. Süresi dolan transient'leri ve autoload'u kontrol edin
wp_options tablosu küçük gibi görünür ama performans açısından kritiktir, çünkü autoload = yes olan kayıtlar her sayfa yüklemesinde belleğe alınır. En büyük autoload kayıtlarını görmek için:
SELECT option_name, LENGTH(option_value) AS boyut
FROM wp_options
WHERE autoload = 'yes'
ORDER BY boyut DESC
LIMIT 20;
Burada beklenmedik şekilde büyük (yüzlerce KB) kayıtlar görürseniz, genellikle eski veya kaldırılmış bir eklentiye aittir. Süresi dolmuş transient'leri temizlemek için ise WordPress'in kendi fonksiyonu güvenli yoldur — bunu bir eklenti veya WP-CLI ile tetikleyebilirsiniz:
wp transient delete --expired # WP-CLI ile süresi dolmuş transient'leri sil
WP-CLI erişiminiz yoksa, aşağıdaki temizlik eklentileri transient'leri arayüzden silmenizi sağlar.
4. Tabloları optimize edin (OPTIMIZE TABLE)
Sürekli silme/yazma işlemi MySQL tablolarında boş alan parçalanmasına (overhead) yol açar. Veri silinir ama tablonun fiziksel boyutu küçülmez — disk üzerinde "delik" kalır. OPTIMIZE TABLE bu boşluğu geri kazanır ve sorgu performansını toparlar.
phpMyAdmin'de veritabanını açın, Yapı sekmesinde "Overhead" sütununda dolu olan tabloları seçin, alttan Tabloyu optimize et komutunu çalıştırın. Tek satırda da yapabilirsiniz:
OPTIMIZE TABLE wp_posts, wp_postmeta, wp_options, wp_comments;
Önemli:
OPTIMIZE TABLE, InnoDB tablolarında çalışırken tabloyu kısa süreliğine kilitleyebilir. Büyük tablolarda bu işlemi trafiğin düşük olduğu saatlerde yapın.
5. İndeksleri ve büyük tabloları gözden geçirin
WordPress varsayılan tabloları zaten temel indekslerle gelir, ama yıllar içinde eklentilerin oluşturduğu özel tablolar (örneğin form girişleri, log kayıtları, e-ticaret oturumları) indekssiz ve dev olabilir. En çok yer kaplayan tabloları bulmak için:
SELECT table_name, ROUND((data_length + index_length)/1024/1024, 2) AS mb
FROM information_schema.tables
WHERE table_schema = DATABASE()
ORDER BY mb DESC
LIMIT 15;
Listenin başında tanımadığınız bir tablo varsa (wp_ önekli olmayan veya kaldırdığınız bir eklentiye ait), o eklentinin temizlik sürecini araştırın. İndeks ekleme/silme uzmanlık gerektirir; emin değilseniz bu adımı hosting destek ekibinize danışarak yapın. Çoğu durumda 1-4. adımlardaki temizlik, indekse dokunmadan ciddi kazanç sağlar.
Elle SQL mi, eklenti mi? Karşılaştırma
| Yöntem | Avantaj | Dezavantaj | Kime uygun |
|---|---|---|---|
| Temizlik eklentisi | Tek tıkla revizyon/transient/spam temizliği, zamanlanmış çalışma | Sürekli açık kalırsa kendisi yük olur | Yeni başlayanlar, çoğu kullanıcı |
| phpMyAdmin / elle SQL | Tam kontrol, eklenti yükü yok | Yanlış sorgu riski, dikkat ister | Orta-ileri kullanıcılar |
| WP-CLI | Hızlı, betiklenebilir, sunucuda toplu işlem | Komut satırı + SSH erişimi gerekir | Geliştiriciler, ajanslar |
Önerimiz: Düzenli bakım için bir eklenti kurun ama temizlik işi bitince zamanlanmış otomatik temizliği kapatın ya da seyrek (örneğin ayda bir) ayarlayın. Sürekli çalışan optimizasyon eklentileri, çözmeye çalıştıkları sorunun bir parçası olabilir.
Sık kullanılan temizlik eklentileri
- WP-Optimize: Revizyon, transient, spam ve çöp temizliğini tek panelde toplar; tablo optimize ve zamanlama özelliği vardır. Yeni başlayanlar için en pratik seçenek.
- Advanced Database Cleaner: Yetim metadata ve "tanımsız" (orphan)
wp_optionskayıtlarını tespit etmekte güçlüdür. İleri kullanıcılar için detaylı kontrol sunar. - Spam koruması: Yorum/form spam'ini en baştan engelleyen bir antispam eklentisi, temizlik döngüsünü kalıcı olarak kısaltır.
Eklenti seçerken son güncelleme tarihine ve WordPress sürüm uyumuna dikkat edin; terk edilmiş bir eklenti, çözdüğünden çok güvenlik riski getirir.
Ne sıklıkla yapmalı?
Temizlik tek seferlik bir iş değildir. Pratik bir takvim:
- Aylık: Revizyon + süresi dolmuş transient temizliği, spam yorum kontrolü.
- 3 ayda bir:
OPTIMIZE TABLEve en büyük tabloların gözden geçirilmesi. - Eklenti silerken: Kaldırdığınız eklentinin
wp_optionsve özel tablo artıklarını kontrol edin.
Yoğun trafikli veya e-ticaret sitelerinde tablolar daha hızlı büyür; sipariş ve oturum verileri biriktiği için bakımı sıklaştırın. KVKK kapsamında, sildiğiniz verilerin gerçekten gerekli olmayan veriler olduğundan ve kişisel veri saklama yükümlülüklerinizi ihlal etmediğinizden emin olun — log ve form kayıtlarını silerken bu dengeyi gözetin.
Sonuç
Veritabanı bakımı, yeni bir hosting paketi almadan sitenizi hızlandırmanın en uygun maliyetli yollarından biridir. Önce yedek alın, sonra sırasıyla revizyonları, spam'i ve transient'leri temizleyin, tabloları optimize edin ve düzenli bir bakım takvimi oturtun. Eğer paylaşımlı sunucunuzda MySQL kaynakları artık yetmiyorsa, sorun tek başına veritabanı şişmesi değil, kaynak limitleri olabilir — bu durumda daha geniş bir hosting paketine geçmeyi değerlendirebilirsiniz.
Sitenizin gerçekten yavaş mı yoksa sadece veritabanı mı şiştiğini ölçmek için ücretsiz web araçlarımızla bir hız ve erişilebilirlik testi yapın. Takıldığınız bir nokta olursa veya hangi adımın size uygun olduğundan emin değilseniz, bilgi bankamıza göz atabilir ya da destek ekibimize ulaşabilirsiniz.