Şimdi yükleniyor

cPanel/WHM: MySQL/MariaDB Performans Optimizasyonu Rehberi

cPanel/WHM: MySQL/MariaDB Performans Optimizasyonu Rehberi

Web sitelerinin ve uygulamaların kalbi genellikle bir veritabanı sisteminde atar. cPanel veya WHM üzerinde barındırılan çoğu uygulama için bu kalp, MySQL veya MariaDB’dir. Veritabanı performansı, bir web sitesinin yüklenme hızından kullanıcı deneyimine, hatta SEO sıralamasına kadar her şeyi doğrudan etkiler. Ancak birçok sunucu yöneticisi veya webmaster, veritabanı sunucusunun varsayılan ayarlarına güvenmekle yetinir. Bu makalede, cPanel/WHM ortamında MySQL/MariaDB performansını nasıl optimize edebileceğinizi adım adım, teknik detaylarla ve pratik ipuçlarıyla ele alacağız.

Neden MySQL/MariaDB Optimizasyonu Kritik?

Bir cPanel/WHM sunucusunda barındırılan siteler genellikle çeşitli PHP uygulamaları (WordPress, Joomla, Magento vb.) kullanır ve bu uygulamalar yoğun bir şekilde veritabanına bağımlıdır. Yetersiz optimize edilmiş bir veritabanı, sunucu kaynaklarının (CPU, RAM, Disk I/O) gereksiz yere tüketilmesine, web sitelerinin yavaşlamasına ve hatta hizmet dışı kalmasına neden olabilir. Doğru optimizasyon ile aynı donanım üzerinde çok daha fazla trafiği ve daha karmaşık işlemleri sorunsuz bir şekilde yönetebilirsiniz.

Teknik Arka Plan: MySQL/MariaDB Nasıl Çalışır?

MySQL ve MariaDB, ilişkisel veritabanı yönetim sistemleridir (RDBMS). Verileri tablolar halinde düzenler, indeksler aracılığıyla hızlı arama ve sıralama sağlar. Performanslarını etkileyen başlıca faktörler şunlardır:

  • Bellek Yönetimi: Veritabanı, sık erişilen verileri ve indeksleri bellekte (RAM) tutarak disk I/O’yu azaltmaya çalışır. Özellikle InnoDB tampon havuzu (innodb_buffer_pool_size) ve anahtar tamponu (key_buffer_size) kritik öneme sahiptir.
  • Sorgu İşleme: Gelen sorguların nasıl işlendiği, önbelleğe alınıp alınmadığı (query_cache_size) ve concurrent (eş zamanlı) bağlantı sayısı (max_connections) performansı doğrudan etkiler.
  • Disk I/O: Belleğe sığmayan veriler diske yazılır veya diskten okunur. Disk I/O, veritabanı performansının en büyük darboğazlarından biri olabilir.
  • İşlemci Kullanımı: Karmaşık sorgular, sıralama ve birleştirme işlemleri işlemci yoğun olabilir.

Adım Adım Optimizasyon Rehberi

1. Mevcut Durum Analizi ve Performans Metrikleri

Optimizasyona başlamadan önce mevcut durumu anlamak çok önemlidir. WHM veya SSH üzerinden sunucunuza erişerek aşağıdaki araçları kullanabilirsiniz:

  • WHM > MySQL Root Parolasını Değiştir: İlk olarak root parolanızı bildiğinizden emin olun.
  • WHM > Service Status: MySQL servisinin durumunu ve kaynak kullanımını buradan takip edebilirsiniz.
  • SSH ile mysqltuner.pl Kullanımı: Bu popüler perl betiği, MySQL/MariaDB sunucunuzun mevcut ayarlarını analiz eder ve optimizasyon önerileri sunar.
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
chmod +x mysqltuner.pl
./mysqltuner.pl

Çıktıyı dikkatlice inceleyin. Özellikle “Recommendations” (Öneriler) bölümü, hangi parametreleri ayarlamanız gerektiği konusunda size yol gösterecektir.

2. my.cnf Dosyasını Düzenleme

MySQL/MariaDB’nin ana yapılandırma dosyası my.cnf‘dir. cPanel/WHM sistemlerinde bu genellikle /etc/my.cnf konumunda bulunur. Düzenlemeleri yapmadan önce mutlaka yedeğini alın!

cp /etc/my.cnf /etc/my.cnf.yedek

Aşağıdaki parametreler en sık optimize edilenlerdir:

a. Bellek Ayarları

  • innodb_buffer_pool_size: InnoDB tabloları için en kritik ayardır. Veritabanınızın ve indekslerinizin büyük bir kısmını bellekte tutmak için sunucunuzdaki RAM’in %50-70’ini bu parametreye ayırabilirsiniz. Örneğin, 8GB RAM’i olan bir sunucuda 4G veya 6G olarak ayarlanabilir.
  • key_buffer_size: MyISAM tablolarının indeksleri için kullanılır. Eğer siteleriniz ağırlıklı olarak InnoDB kullanıyorsa, bu değeri düşük tutabilirsiniz (örn. 128M).
  • tmp_table_size ve max_heap_table_size: Bellekte oluşturulabilecek geçici tabloların maksimum boyutunu belirler. Genellikle 64M-256M arası değerler uygun olabilir.

b. Bağlantı ve Sorgu Ayarları

  • max_connections: Sunucuya aynı anda bağlanabilecek maksimum bağlantı sayısını belirler. Sitenizin trafiğine göre ayarlanmalıdır. Çok yüksek bir değer, kaynak tükenmesine yol açabilir. mysqltuner size ideal bir değer önerecektir.
  • query_cache_size ve query_cache_limit: Sorgu önbelleği, aynı sorguların tekrar tekrar çalıştırılmasını engelleyerek performansı artırabilir. Ancak, çok sık veri değişimi olan sistemlerde performansı düşürebilir. MariaDB 10.1 ve MySQL 5.7.20’den itibaren bu özellik kullanımdan kaldırılmıştır (deprecate edildi). Daha yeni sürümlerde bu değeri 0 yapmanız önerilir. Eğer eski bir sürüm kullanıyorsanız, 16M-64M arası bir değer deneyebilirsiniz.
  • thread_cache_size: Yeniden kullanılacak iş parçacıklarının önbellek boyutudur. mysqltuner çıktısına göre ayarlanabilir.
  • wait_timeout ve interactive_timeout: Bağlantıların ne kadar süre aktif kalacağını belirler. Genellikle 60-300 saniye arası değerler kullanılır. Çok yüksek değerler, kullanılmayan bağlantıların kaynakları meşgul etmesine neden olabilir.

c. Diğer Önemli Ayarlar

  • log_error: Hata günlük dosyasının yolunu belirler. Sorun giderme için çok önemlidir.
  • slow_query_log ve long_query_time: Yavaş çalışan sorguları kaydetmek için kullanılır. Optimizasyon için vazgeçilmez bir araçtır. long_query_time genellikle 1-5 saniye arasına ayarlanır.

Değişiklikleri yaptıktan sonra MySQL/MariaDB servisini yeniden başlatmayı unutmayın:

/scripts/restartsrv_mysql

3. Tablo Optimizasyonu ve İndeksleme

  • OPTIMIZE TABLE: Zamanla veritabanı tabloları parçalanabilir (fragmentation). Bu, diskte daha fazla yer kaplamalarına ve daha yavaş çalışmalarına neden olur. PHPMyAdmin üzerinden veya SSH ile OPTIMIZE TABLE tabloadı; komutuyla tablolarınızı optimize edebilirsiniz.
  • Doğru İndeksleme: Sorgularınızda sıkça kullanılan sütunlara (özellikle WHERE, JOIN, ORDER BY clause’larındaki) indeks eklemek performansı dramatik şekilde artırır. Gereksiz indeksler ise yazma işlemlerini yavaşlatır. Veritabanı şemanızı ve sık kullanılan sorgularınızı analiz ederek doğru indeksleri oluşturun.

Güvenlik İpuçları

  • Güçlü Parolalar: Tüm MySQL kullanıcıları için karmaşık ve uzun parolalar kullanın.
  • Uzak Erişim Kısıtlaması: Mümkünse, MySQL sunucusuna sadece localhost’tan veya belirli güvenilir IP adreslerinden erişime izin verin. cPanel’de bu ayarı WHM > SQL Services > Additional MySQL Access Hosts üzerinden yapabilirsiniz.
  • En Az Yetki Prensibi: Uygulama kullanıcılarına sadece ihtiyaç duydukları veritabanlarına ve işlemlere (SELECT, INSERT, UPDATE, DELETE) erişim yetkisi verin. ASLA bir web uygulamasına root yetkisi vermeyin.
  • Güncel Kalın: MySQL/MariaDB sürümlerini ve cPanel/WHM’i düzenli olarak güncelleyerek bilinen güvenlik açıklarını kapatın.

Performans Optimizasyonları ve Sorun Giderme

Sorgu Optimizasyonu

En büyük performans kazançları genellikle kötü yazılmış sorguları optimize etmekten gelir. Yavaş sorgu loglarını (slow_query_log) inceleyerek darboğazları tespit edin ve EXPLAIN komutunu kullanarak sorguların nasıl yürütüldüğünü analiz edin. İndeks kullanımı, JOIN tipleri ve sıralama algoritmaları sorgu performansını doğrudan etkiler.

Donanım İpuçları

Bazı durumlarda yazılım optimizasyonları yeterli olmayabilir. Özellikle yüksek trafikli siteler için hızlı SSD diskler (NVMe tercih edilir), yeterli RAM ve güçlü bir işlemci kritik öneme sahiptir. Disk I/O, veritabanı performansının en sık rastlanan darboğazıdır.

Olası Hata Çözümleri (Troubleshooting)

  • MySQL Servisi Başlamıyor: Genellikle my.cnf dosyasındaki bir yazım hatası veya yanlış bir parametre değeri neden olur. Hata loglarını (log_error ile belirtilen dosya) kontrol edin. Eski my.cnf yedeğinizi geri yüklemeyi deneyin.
  • Bağlantı Hataları: max_connections değerinin çok düşük olması veya sunucunun kaynaklarının tükenmesi bağlantı hatalarına yol açabilir. WHM’deki servis durumunu ve /var/log/messages veya /var/log/mysql/mysqld.log gibi log dosyalarını kontrol edin.
  • Kaynak Tüketimi (CPU/RAM): Yavaş sorgular, yetersiz bellek ayarları veya aşırı bağlantı sayısı kaynak tüketimine neden olabilir. top, htop veya free -m gibi komutlarla sunucu kaynaklarını izleyin ve mysqltuner‘ın önerilerini tekrar gözden geçirin.

MySQL/MariaDB optimizasyonu, tek seferlik bir işlemden ziyade sürekli bir süreçtir. Web sitenizin veya uygulamanızın büyümesiyle birlikte, veritabanı kullanım modelleri de değişecektir. Bu nedenle, düzenli aralıklarla performans metriklerini izlemek, mysqltuner gibi araçları çalıştırmak ve my.cnf ayarlarınızı gözden geçirmek, sunucunuzun her zaman en iyi performansı sunmasını sağlayacaktır. Özellikle cPanel/WHM gibi yönetilen ortamlarda, bu tür derinlemesine optimizasyonlar, sunucunun genel sağlığı ve sitelerinizin hızı için hayati öneme sahiptir. Unutmayın ki, hızlı bir veritabanı, mutlu kullanıcılar ve daha iyi bir çevrimiçi varlık demektir.

You May Have Missed