İçeriğe geç

Linux Sunucu Optimizasyonu: MySQL 8 ve Sonrası Performans Düzenlemeleri

mysql-tuning

(Debian, CentOS, AlmaLinux, Rocky Linux İçin Sistemsel Ayarlar)

MySQL 8 ve sonrası, performans açısından birçok geliştirme içerse de, varsayılan ayarlarla her sistemde optimum verim alınamayabilir. Özellikle yüksek trafikli web siteleri, büyük ölçekli veritabanları veya yoğun okuma/yazma gerektiren uygulamalarda ek optimizasyonlar gereklidir. Bu yazıda, Debian ve RHEL tabanlı sistemlerde (CentOS, AlmaLinux, Rocky Linux) MySQL performansını artırmak için yapılması gereken temel sistemsel ayarlardan bahsedeceğiz.


1. Sistem Seviyesinde Optimizasyonlar

1.1. CPU Performansını Optimize Etme

  • MySQL’in yüksek CPU kullanımı olan sorguları daha hızlı işlemesini sağlamak için CPU performans modunu “performance” olarak değiştirmek gerekir.
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

Bu ayarın kalıcı olması için:

echo 'GOVERNOR="performance"' | tee /etc/default/cpufrequtils
systemctl restart cpufrequtils

1.2. RAM Kullanımını Optimize Etme

  • MySQL’in bellek kullanımını artırarak daha fazla sorguyu bellekte tutmasını sağlamak için swappiness ayarını düşürmek önemlidir.
echo "vm.swappiness = 1" >> /etc/sysctl.conf
sysctl -p

Bu ayar, sistemin belleği tam dolmadan swap’e yazmasını önler, böylece disk yerine RAM kullanımı artırılır.


1.3. Disk I/O Optimizasyonu

MySQL genellikle disk üzerinde yoğun okuma/yazma işlemi yapar. Bunu optimize etmek için:

1.3.1. I/O Scheduler Ayarlarını Değiştirme
Özellikle SSD diskler için “noop” veya “deadline” kullanmak daha iyi performans sağlar.

echo noop > /sys/block/sda/queue/scheduler

Kalıcı yapmak için:

echo 'ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="noop"' > /etc/udev/rules.d/60-io-scheduler.rules

1.3.2. Disk Önbellekleme Ayarlarını Değiştirme
Eğer RAID kullanıyorsanız, disk önbelleklemesini açarak MySQL performansını artırabilirsiniz:

hdparm -W1 /dev/sda

1.4. Linux Dosya Açma Limitlerini Artırma

MySQL’in büyük ölçekli veritabanlarında çok fazla dosya açma gereksinimi olabilir. Bu yüzden dosya açma sınırını artırmak önemlidir.

echo "mysql soft nofile 65535" >> /etc/security/limits.conf
echo "mysql hard nofile 65535" >> /etc/security/limits.conf

2. MySQL Sunucu Konfigürasyonu (my.cnf Optimizasyonu)

MySQL’in varsayılan ayarları yüksek trafiğe uygun değildir. /etc/mysql/my.cnf veya /etc/my.cnf.d/server.cnf dosyasını düzenleyerek performansı artırabiliriz.

2.1. Bellek Kullanımını Optimize Etme

Özellikle büyük veritabanlarında innodb_buffer_pool_size ayarının optimize edilmesi gerekir.

[mysqld]
innodb_buffer_pool_size = 4G # Toplam RAM’in %60-70’i kadar
innodb_buffer_pool_instances = 8 # Çok çekirdekli işlemciler için artırılabilir
innodb_flush_log_at_trx_commit = 2 # Yazma performansı için optimize
innodb_log_file_size = 512M

2.2. Sorgu Önbelleğini Açma

MySQL 8’de varsayılan olarak sorgu önbelleği kapalıdır. Bunu etkinleştirerek, sık kullanılan sorguların hızlanmasını sağlayabiliriz.

query_cache_type = 1
query_cache_size = 128M

2.3. Bağlantı Sayısını Optimize Etme

Özellikle yoğun trafiğe sahip uygulamalarda maksimum bağlantı sayısını artırmak gerekebilir.

max_connections = 500
thread_cache_size = 64
table_open_cache = 2000
open_files_limit = 65535

2.4. Geçici Tablo Belleğini Optimize Etme

Eğer sorgular geçici tablolar oluşturuyorsa, bellekten çalıştırmak daha verimli olabilir.

tmp_table_size = 256M
max_heap_table_size = 256M

3. InnoDB Performans Ayarları

MySQL 8, varsayılan olarak InnoDB motorunu kullanır. Bu motoru daha verimli çalıştırmak için aşağıdaki ayarlar önerilir:

[mysqld]
innodb_flush_method = O_DIRECT
innodb_log_file_size = 512M
innodb_read_io_threads = 16
innodb_write_io_threads = 16
innodb_io_capacity = 1000
innodb_io_capacity_max = 2000

4. MySQL 8 İçin Ekstra Optimizasyonlar

MySQL’in 8.0 sürümünde gelen otomatik iyileştirme özellikleri sayesinde bazı optimizasyonlar daha iyi yönetilebilir.

4.1. Dizin (Index) Optimizasyonu

MySQL’de ANALYZE TABLE ve OPTIMIZE TABLE komutlarını düzenli çalıştırarak sorgu hızını artırabilirsiniz.

ANALYZE TABLE mytable;
OPTIMIZE TABLE mytable;

Tüm veritabanı için çalıştırmak isterseniz:

mysqlcheck -o --all-databases -u root -p

4.2. Sık Kullanılan Sorgular İçin Önbellek Kullanımı

Eğer sık kullanılan sorgularınız varsa Prepared Statements ve Stored Procedures kullanabilirsiniz.


5. MySQL 8 Performansını İzleme

MySQL sunucusunun nasıl çalıştığını anlamak için bazı izleme araçları kullanılabilir.

5.1. MySQL Performance Schema Kullanımı

SHOW STATUS LIKE 'Threads_running';
SHOW GLOBAL STATUS LIKE 'Slow_queries';

5.2. MySQL Slow Query Log Aktif Etme

Yavaş sorguları analiz ederek performans sorunlarını çözebilirsiniz.

slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 1

Ardından logları şu komutla inceleyebilirsiniz:

tail -f /var/log/mysql-slow.log

Sonuç

Bu ayarlarla Debian ve RHEL tabanlı sistemlerde (CentOS, AlmaLinux, Rocky Linux) MySQL 8 performansını önemli ölçüde artırabilirsiniz. Ancak her sistemin ihtiyacı farklıdır, bu yüzden uygulamanıza göre ince ayarlar yapmanız gerekebilir. Sürekli izleme ve optimizasyon ile MySQL’inizi en verimli hale getirebilirsiniz.

Eğer daha gelişmiş bir optimizasyon veya yüksek ölçekli MySQL Cluster yönetimi istiyorsanız, ProxySQL veya Percona Server gibi alternatif çözümleri de düşünebilirsiniz.

Linux sunucu optimizasyonu ve Mysql ayarlamaları için sizlere hizmet veriyoruz. Sisteminize özel bir çok parametreyi değerlendirerek en iyi ayarlarla çalışmasını sağlıyoruz. Lütfen iletişime geçin.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

− 1 = 1