Ubuntu 24.04 MySQL Performans Optimizasyonu Nasıl Yapılır?

Web siteniz açılıyor ancak ürün aramaları, müşteri paneli veya rapor ekranları yavaş çalışıyorsa sorun veritabanından kaynaklanıyor olabilir. Özellikle veri miktarı arttıkça, başlangıçta yeterli olan MySQL ayarları uygulamanın ihtiyaçlarını karşılamakta zorlanabilir.

Ubuntu 24.04 MySQL performans optimizasyonu için önce yavaşlığın nedenini belirlemek, ardından bellek kullanımını ve sorguları düzenlemek gerekir. Bu rehberde MySQL 8.0 kullanılan bir sunucuda uygulanabilecek temel adımları ele alıyoruz.

1. Sunucunun Mevcut Durumunu Kontrol Edin

Ayarları değiştirmeden önce işlemci ve bellek kullanımına bakın. SSH üzerinden sunucunuza bağlanarak aşağıdaki komutları çalıştırın:

free -h

top

free -h çıktısındaki available alanı, uygulamaların kullanabileceği yaklaşık belleği gösterir. top ekranında ise MySQL’in ve diğer servislerin işlemci tüketimini görebilirsiniz.

Çalışan MySQL sunucusunun sürümünü öğrenmek için:

sudo mysql -e "SELECT VERSION();"

Bu rehber, Ubuntu üzerinde doğrudan kurulu MySQL içindir. Docker, MariaDB veya kontrol paneliyle yönetilen kurulumlarda dosya yolları ve işlem adımları farklı olabilir.

Başlamadan önce güncel bir veritabanı yedeğiniz olduğundan emin olun. Yapılandırma dosyasını da ayrıca yedekleyin:

sudo cp -a /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf.bak

Bu komut yalnızca ayar dosyasını yedekler; veritabanlarının yedeğini almaz.

2. MySQL Bellek Kullanımını Düzenleyin

MySQL performansını etkileyen temel ayarlardan biri innodb_buffer_pool_size değeridir. Bu alan, InnoDB tablolarına ait veri ve indekslerin bellekte tutulmasını sağlar. Sık kullanılan verilerin RAM’den okunması, diske yapılan erişimi azaltabilir.

Yapılandırma dosyasını açın:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Örneğin 8 GB RAM bulunan ve web uygulamasıyla MySQL’in birlikte çalıştığı bir sunucuda, diğer servislerin tüketimi uygunsa 2 GB başlangıç değeri olarak denenebilir:

[mysqld]

innodb_buffer_pool_size = 2G

Dosyada [mysqld] bölümü zaten varsa ayarı bu bölümün altına ekleyin. Aynı parametre mevcutsa ikinci kez yazmak yerine değerini değiştirin.

2 GB her sunucu için ideal değer değildir. Yalnızca veritabanına ayrılmış bir sunucuda daha fazla bellek kullanılabilir. PHP, web sunucusu ve diğer uygulamaların birlikte çalıştığı sistemlerde ise bu servislere yeterli alan bırakılmalıdır. MySQL’in toplam bellek tüketimi de buffer pool boyutuyla sınırlı değildir. 

3. Yavaş Sorgu Kaydını Etkinleştirin

Sunucu kaynaklarını artırmadan önce hangi sorguların beklemeye neden olduğunu görmek gerekir. Bunun için MySQL’in slow query log, yani yavaş sorgu kaydı özelliğini kullanabilirsiniz.

Aynı yapılandırma dosyasındaki [mysqld] bölümüne şu satırları ekleyin; mevcutlarsa düzenleyin:

slow_query_log = ON

log_output = FILE

long_query_time = 1

Bu ayar, diğer günlük filtrelerinin de izin verdiği durumlarda bir saniyeyi aşan sorguların kaydedilmesini sağlar. Dosya yolu ayrıca belirtilmezse MySQL, varsayılan yavaş sorgu dosyasını veri dizininde oluşturur.

Ayarlar uygulandıktan sonra günlük dosyasının konumunu şu komutla öğrenebilirsiniz:

sudo mysql -e "SHOW VARIABLES LIKE 'slow_query_log_file';"

Özellikle sık tekrarlanan ve çok sayıda satır inceleyen sorgulara odaklanın. Günlük dosyasının büyümesini takip edin ve düzenli döndürülmesini sağlayın; kayıtlar uygulamaya ait hassas veriler içerebilir. 

4. Ayarları Kontrol Edip MySQL’i Yeniden Başlatın

Dosyayı kaydettikten sonra temel yapılandırma hatalarını kontrol edin:

sudo mysqld --validate-config

Hata varsa yeniden başlatmadan önce düzeltin. Bu kontrol, seçtiğiniz bellek değerinin iş yükünüz için uygun olduğunu garanti etmez. (dev.mysql.com)

Kontrol başarılıysa değişiklikleri uygulayın:

sudo systemctl restart mysql

sudo systemctl status mysql --no-pager

Yeniden başlatma sırasında veritabanı bağlantıları kısa süreliğine kesilir. İşlemi trafiğin düşük olduğu bir zamanda yapın. Servis açılmazsa hata kayıtlarını inceleyin:

sudo journalctl -u mysql -n 50 --no-pager

Ubuntu’nun standart MySQL kurulumunda yapılandırma dosyası ve servis yönetimi bu yollar üzerinden yapılır.

5. Sorguları ve İndeksleri İnceleyin

Bellek ayarları tek başına her yavaşlığı çözmez. Örneğin binlerce sipariş arasından bir müşterinin kayıtları aranırken uygun indeks bulunmuyorsa MySQL gereğinden fazla satır inceleyebilir.

Aşağıdaki örneği MySQL konsolunda, kendi veritabanınızı seçerek çalıştırabilirsiniz. Veritabanı, tablo ve sütun adlarını uygulamanıza göre değiştirin:

USE veritabani_adi;

EXPLAIN

SELECT id, toplam

FROM siparisler

WHERE musteri_id = 125;

EXPLAIN çıktısı, sorgunun nasıl işleneceğini gösterir. key alanı seçilen indeksi, rows alanı ise incelenecek tahmini satır sayısını anlamanıza yardımcı olur. 

Filtreleme ve tablo birleştirme işlemlerinde kullanılan sütunlar için uygun indeksler değerlendirilebilir. Ancak her sütuna indeks eklemek doğru değildir; gereksiz indeksler depolama tüketimini artırabilir ve kayıt ekleme veya güncelleme işlemlerini yavaşlatabilir. 

6. Değişikliklerin Sonucunu Ölçün

Optimizasyonun işe yarayıp yaramadığını aynı işlemleri benzer trafik koşullarında karşılaştırarak değerlendirin:

  • Ürün arama, sipariş listeleme ve rapor oluşturma süreleri kısaldı mı?
  • MySQL’in işlemci ve bellek tüketimi nasıl değişti?
  • Aynı sorgular yavaş sorgu kaydına düşmeye devam ediyor mu?
  • Bellek yetersizliği veya bağlantı hataları oluşuyor mu?

Yeniden başlatmanın hemen ardından önbellek henüz dolmamış olabilir. Kararı tek bir ölçüme göre vermeyin; sistemi normal iş yükü altında gözlemleyin.

Ubuntu 24.04 üzerinde MySQL hızlandırma çalışmasının amacı, uygulamanın ihtiyaçlarına uygun ayarları bulmaktır. Yavaş sorguları düzeltmek, doğru indeksleri kullanmak ve belleği dengeli ayırmak bu sürecin temelini oluşturur.

Kurumsal web siteniz, e-ticaret projeniz veya iş uygulamanız için sunucu planlarken veritabanı büyüklüğünü ve eşzamanlı kullanıcı sayısını birlikte değerlendirin. Projenize uygun VDS veya fiziksel sunucu seçenekleri için Ekiphost üzerinden bizimle iletişime geçebilirsiniz.

Hai trovato utile questa risposta? 0 Utenti hanno trovato utile questa risposta (0 Voti)