Sunucu & Performans

MariaDB Tuning: WordPress Veritabanını Hızlandırmak

MariaDB Tuning: WordPress Veritabanını Hızlandırmak

Kısa cevap: WordPress yavaşsa suçlu çoğu zaman PHP değil, veritabanıdır. MariaDB/MySQL tuning’inin kalbi tek ayardır: innodb_buffer_pool_size — tablo ve indeksleri RAM’de tutar, disk okumasını keser. Yanına slow query log ile darboğaz sorgularını bul, gereksiz query cache‘i kapat, ve WordPress’in kendi şişkinliğini (autoload, revizyon, transient) temizle. Altın kural yine aynı: mysqltuner ile ölç, sonra ayarla.

Bir WordPress sayfası açılırken arka planda onlarca veritabanı sorgusu çalışır. Site büyüdükçe bu sorgular birikir ve TTFB’yi şişirir. Redis object cache bunun bir kısmını çözer ama asıl temel, veritabanı sunucusunun kendisinin doğru ayarlanmasıdır. Performans yazımızda PHP katmanını ele aldık; burada eksik üçüncü katmanı tamamlıyoruz: MariaDB/MySQL.

Tek en önemli ayar: InnoDB buffer pool

WordPress tabloları InnoDB motorunu kullanır. innodb_buffer_pool_size, InnoDB’nin veri ve indeksleri önbelleğe aldığı RAM havuzudur. Yeterince büyükse, sık erişilen tüm veri bellekten gelir; disk neredeyse devre dışı kalır. Bu yüzden en yüksek getirili tek ayardır.

/etc/my.cnf.d/wordpress.cnf
[mysqld]
# Adanmış DB sunucusunda RAM'in ~%70'i; web+DB aynı sunucudaysa ~%25-40
innodb_buffer_pool_size = 2G
innodb_buffer_pool_instances = 1      # her ~1GB için +1 (büyük havuzlarda)
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2    # performans/dayanıklılık dengesi
innodb_flush_method = O_DIRECT
“%80” tavsiyesini körlemesine uygulama

“buffer pool’a RAM’in %80’ini ver” tavsiyesi adanmış bir veritabanı sunucusu içindir. Ama tipik bir Virtualmin kurulumunda WordPress, PHP-FPM, Nginx ve MariaDB aynı sunucudadır. Buraya %80 verirseniz PHP ve web sunucusuna yer kalmaz, sistem takas (swap) yapıp yavaşlar. Paylaşımlı kutuda buffer pool’u ~%25-40 ile başlatıp ölçerek artırın.

Query cache: kapatın (sürpriz ama doğru)

Eski rehberler “query cache aç” der; bu artık yanlış bir tavsiyedir. MySQL 8.0, query cache’i tamamen kaldırdı çünkü çok çekirdekli sistemlerde ciddi ölçeklenme sorunlarına yol açıyordu. MariaDB’de hâlâ var ama çoğu üretim WordPress’inde kapalı tutulması önerilir — her yazma işleminde önbelleği geçersiz kılma yükü, faydasından büyük olur.

query cache’i kapat
query_cache_type = 0
query_cache_size = 0

Darboğazı bul: slow query log

Körlemesine ayar yapmak yerine, gerçekten yavaş olan sorguları ölçün. Slow query log, belirlediğiniz süreden uzun süren sorguları bir dosyaya yazar:

yavaş sorguları yakala
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1          # 1 saniyeden uzun sorgular
log_queries_not_using_indexes = 1

# Sonra en sık/yavaş sorguları özetle:
mysqldumpslow -s t /var/log/mysql/slow.log | head -20

Genellikle birkaç eklenti sorgusu ya da indekssiz bir wp_postmeta taraması tüm yükü oluşturur. Onları bulmadan ayar yapmak, karanlıkta nişan almaktır.

Ölçüm aracı: mysqltuner

Hangi ayarı ne yapacağınızı tahmin etmeyin. mysqltuner, mevcut yükünüzü analiz edip somut öneriler verir (buffer pool sağlığı, fragmente tablolar, bağlantı kullanımı):

aylık alışkanlık
curl -L https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl -o mysqltuner.pl
perl mysqltuner.pl
# Önemli: önerileri uygulamadan önce sunucunun en az birkaç saat
# gerçek trafik altında çalışmış olması gerekir (yoksa veriler yanıltıcı).

WordPress’in kendi şişkinliğini temizle

Bazen sorun sunucu ayarı değil, veritabanının kendisidir. WordPress zamanla şişer ve bu doğrudan yavaşlık üretir:

Şişkinlik kaynağı Etki / çözüm
wp_options autoload Her istekte yüklenir; 1MB’ı aşması ciddi yavaşlık — şişkin autoload satırlarını temizle
Yazı revizyonları Sınırsız birikir; WP_POST_REVISIONS ile sınırla
Süresi geçmiş transient Birikmiş geçici veriler; düzenli temizle
Eksik indeks Özellikle ağır wp_postmeta sorgularında indeks ekle

Ölçmeden ayar yapma

Buradaki her değer bir başlangıç noktasıdır. Doğru döngü: bir ayarı değiştir, gerçek trafik altında TTFB ve slow query log’u izle, sonra ilerle. innodb_buffer_pool_size‘ı RAM’i aşacak kadar büyütmek swap’a, query cache’i açık bırakmak gereksiz yüke yol açar. Veritabanı tuning’i bir kerelik iş değil, ölçüm alışkanlığıdır.

DKS pratikte ne yapıyor?

Bir siteyi hızlandırırken veritabanını ölçerek ele alıyoruz: önce slow query log + mysqltuner ile darboğazı buluyor, buffer pool’u sunucunun gerçek RAM dağılımına göre (web+DB aynı kutuda mı, adanmış mı) ayarlıyor, query cache’i kapatıyor ve WordPress’in autoload/revizyon şişkinliğini temizliyoruz. Performans optimizasyonu tarafında yaptığımız iş tam da bu katmanlı ölçüm-tuning döngüsü. Çünkü en hızlı veritabanı, en çok RAM verilen değil; darboğazı doğru teşhis edilendir.

Sıkça sorulan sorular

innodb_buffer_pool_size ne olmalı?

Adanmış bir veritabanı sunucusunda RAM’in yaklaşık %70-80’i idealdir. Ancak WordPress, PHP ve web sunucusu aynı makinedeyse bu kadar yüksek vermek sistemi takasa sokup yavaşlatır; paylaşımlı kutuda ~%25-40 ile başlayıp ölçerek artırın. En önemli ayar budur çünkü veriyi diskten değil RAM’den okutur.

Query cache’i açmalı mıyım?

Hayır. MySQL 8.0 query cache’i ölçeklenme sorunları nedeniyle tamamen kaldırdı; MariaDB’de hâlâ var ama çoğu üretim WordPress’inde kapalı tutulması önerilir. Her yazma işleminde önbelleği geçersiz kılma yükü faydasından büyüktür.

WordPress veritabanım neden şişiyor?

En sık nedenler: wp_options tablosundaki büyük autoload verisi (her istekte yüklenir), sınırsız biriken yazı revizyonları ve süresi geçmiş transient kayıtları. Bunları temizlemek ve indeksleri düzeltmek, bazen sunucu ayarından daha çok fark yaratır.

Hangi ayarı değiştireceğimi nasıl bilirim?

Tahmin etmeyin, ölçün. mysqltuner aracını (gerçek trafik altında çalıştıktan sonra) kullanın ve slow query log ile asıl yavaş sorguları bulun. Ayarları tek tek değiştirip TTFB ve log’u izleyerek ilerleyin.

Redis object cache veritabanı tuning’in yerini tutar mı?

Hayır, birbirini tamamlar. Redis tekrar eden sorgu sonuçlarını RAM’de tutar; veritabanı tuning ise sorguların kendisini hızlandırır. İkisi birlikte en iyi sonucu verir; ama önce veritabanı sağlığı, sonra Redis.

Veritabanınız darboğaz mı?

WordPress siteniz yavaşsa suçlu çoğu zaman veritabanıdır. Bir performans denetimi isteyin; slow query log ve mysqltuner ile gerçek darboğazı bulup somut bir ayar planı çıkaralım.

Digital Kernel Software

Digital Kernel Software

WordPress tema geliştirme, hosting ve sunucu performansı üzerine yazıyoruz. İstanbul / Türkiye.

Projeniz mi var?

Okuduğunuzu
projenize uygulayalım

WordPress, hosting ve performans tarafında yazdıklarımızı sizin işinizde hayata geçirelim. Net konuşuruz — pazarlama dili değil, uygulanabilir çözüm.