Düşük RAM'li bir sunucuda MySQL çalıştırmak zor olabilir. Ama doğru my.cnf yapılandırması ile hem performansı artırabilir hem de sistem kaynaklarını verimli kullanabilirsiniz. Bu yazıda, özellikle 512 MB ile 2 GB RAM arasındaki sunucular için optimize edilmiş ayarları adım adım anlatacağım.
Temel Felsefe: Az ama Öz
Düşük RAM'de MySQL'in en büyük hatası, varsayılan ayarlarla çalıştırmaktır. Varsayılan yapılandırma genelde yüksek kaynak tüketir. Bizim hedefimiz, InnoDB buffer pool ve query cache gibi en çok RAM yiyen bileşenleri kısıp, temel işlemleri hızlandırmak. Unutmayın, her ekstra megabayt bellek, işletim sistemi ve diğer servislerden çalınır.
InnoDB Buffer Pool: En Kritik Ayar
InnoDB buffer pool, verileri ve indeksleri bellekte tutar. Düşük RAM'de bunu toplam RAM'in %30-40'ına ayarlamak iyi bir başlangıçtır. Örneğin 1 GB RAM'li bir sunucuda innodb_buffer_pool_size = 256M kullanabilirsiniz. Daha da düşürmek gerekebilir, ancak 128 MB'ın altına inmemeye çalışın. Ayrıca innodb_log_file_size değerini de 64-128 MB arasında tutun; büyük log dosyaları gereksiz yere disk I/O'sunu artırabilir.
Query Cache: Aç mı, Kapalı mı?
Eski sürümlerde query cache faydalıydı, ama modern MySQL (5.7 ve 8.0) ile beraber genellikle kapatılması önerilir. Çünkü sorgu önbelleği, yazma işlemlerinde kilitlenmelere yol açabilir. Düşük RAM'de query_cache_type = 0 yaparak tamamen devre dışı bırakın. Bu sayede hem bellek kazanır hem de yazma performansını artırırsınız.
Bağlantı ve Thread Ayarları
Az RAM'de çok sayıda eşzamanlı bağlantıyı kaldıramazsınız. max_connections değerini 30-50 gibi düşük bir seviyeye çekin. Ayrıca thread_cache_size değerini 8-16 arası ayarlayarak yeni bağlantılar için hızlı thread oluşturulmasını sağlayın. tmp_table_size ve max_heap_table_size ise 16-32 MB arası yeterli olacaktır.
Önemli: Değişiklikleri yapmadan önce mevcut my.cnf dosyanızı yedekleyin. Ayrıca her ayar sonrası MySQL'i yeniden başlatmayı unutmayın.
İşletim Sistemi Seviyesinde İpuçları
MySQL ayarlarının yanında, işletim sistemi düzeyinde de iyileştirmeler yapabilirsiniz. Swap kullanımını sınırlamak için vm.swappiness değerini 10-20 arasına ayarlayın. Ayrıca InnoDB'nin doğrudan disk erişimi için innodb_flush_method = O_DIRECT kullanmak, dosya sistemi önbelleğini atlayarak daha verimli olur.
Örnek bir my.cnf yapılandırması (1 GB RAM için)
- [mysqld]
- innodb_buffer_pool_size = 256M
- innodb_log_file_size = 64M
- innodb_flush_log_at_trx_commit = 2
- query_cache_type = 0
- max_connections = 50
- thread_cache_size = 8
- tmp_table_size = 32M
- max_heap_table_size = 32M
- innodb_flush_method = O_DIRECT
Bu ayarlar, 512 MB RAM ile de çalışır, ancak buffer pool'u 128 MB'a düşürmeniz gerekebilir. Performansı artırmak için Slow Query Log'u açıp yavaş sorguları izleyin, gereksiz indeksleri temizleyin.
Sonuç olarak, düşük RAM'li bir sunucuda MySQL'in başarısı, akıllıca yapılmış bir my.cnf optimizasyonuna bağlıdır. Yukarıdaki adımları uygulayarak hem sunucunuzu rahatlatabilir hem de uygulamalarınızın daha hızlı çalışmasını sağlayabilirsiniz.