MySQL sunucularında performans optimizasyonu, özellikle bellek (RAM) yönetimi açısından kritik öneme sahiptir.
MySQL sunucularında performans optimizasyonu, özellikle bellek (RAM) yönetimi açısından kritik öneme sahiptir. my.cnf dosyası, MySQL’in yapılandırma ayarlarını içeren ana dosyadır ve bu dosya üzerinden yapılan ince ayarlar, veritabanı sorgularının hızını artırabilir, kaynak kullanımını verimli hale getirebilir. Bu makalede, my.cnf dosyasını kullanarak RAM kullanımını optimize etme yöntemlerini adım adım inceleyeceğiz. Sunucunuzun toplam RAM miktarına göre ayarlamalar yaparak, gereksiz bellek israfını önleyebilir ve yüksek yük altında stabilite sağlayabilirsiniz. Özellikle orta ve büyük ölçekli veritabanlarında, doğru konfigürasyon %30-50 oranında performans artışı sağlayabilir. Bu rehber, pratik örnekler ve ölçülebilir adımlarla hazırlanmıştır; değişiklikleri üretim ortamında uygulamadan önce test ortamında doğrulayın.
my.cnf dosyası, MySQL’in davranışını belirleyen ana konfigürasyon dosyasıdır ve genellikle /etc/mysql/my.cnf veya /etc/my.cnf yolunda bulunur. Linux tabanlı sistemlerde bu dosya, [mysqld] bölümünü içerir ve burada RAM ile ilgili ayarlar tanımlanır. Dosyayı düzenlemek için root yetkisiyle nano veya vim editörlerini kullanın; örneğin, sudo nano /etc/my.cnf komutuyla açabilirsiniz. Değişikliklerden sonra MySQL servisini yeniden başlatmak şarttır: sudo systemctl restart mysql.
Dosyanın yapısını anlamak, hatalı ayarlamaları önler. Bölümler halinde organize edilir: [client], [mysqld], [mysqldump]. RAM optimizasyonu için [mysqld] bölümüne odaklanın. Dosyada mevcut ayarları SHOW VARIABLES; sorgusuyla MySQL konsolundan kontrol edin. Bu yaklaşım, mevcut konfigürasyonu baz alarak iyileştirmeler yapmanızı sağlar ve gereksiz yeniden başlatmaları minimize eder. Ayrıca, birden fazla my.cnf varyantı olabilir; sistem varsayılanlarını /etc/mysql/conf.d/ dizininden inceleyin.
MySQL’in my.cnf dosyasını bulmak için mysqld –help –verbose | grep -A 1 ‘Default options’ komutunu çalıştırın. Bu, aktif konfigürasyon yollarını listeler. Standart Linux dağıtımlarında /etc/my.cnf önceliklidir, Windows’ta ise my.ini olarak C:\ProgramData\MySQL\MySQL Server X.X\ altında yer alır. Bulunan dosyayı yedekleyin: cp /etc/my.cnf /etc/my.cnf.backup. Bu adım, olası sorunlarda hızlı geri dönüş sağlar ve profesyonel yönetim pratiğidir. Erişim izinlerini 644 olarak ayarlayın: chmod 644 /etc/my.cnf.
[mysqld] bölümü altında RAM ayarları yer alır; örneğin innodb_buffer_pool_size gibi. Her parametre satır bazında tanımlanır: parametre = değer. Birim belirtin, örneğin 1G için 1073741824 veya 1G kullanın (MySQL 5.7+ destekler). Değişiklik sonrası mysqladmin variables | grep parametre ile doğrulayın. Bu yapı, modüler konfigürasyon sağlar ve belirli motorlar (InnoDB, MyISAM) için özelleştirme imkanı verir. Yanlış birim kullanımı bellek taşmalarına yol açar, bu yüzden dikkatli olun.
RAM optimizasyonu, sunucunun toplam belleğinin %70-80’ini veritabanı tamponlarına ayırmayı hedefler. InnoDB kullanan sistemlerde buffer pool en büyük payı alır. Diğer parametreler thread başına ayrılır, bu yüzden bağlantı sayısını (max_connections) de göz önünde bulundurun. Örnek: 16 GB RAM’li sunucuda buffer pool 12 GB olarak ayarlanabilir. Bu ayarlar, disk I/O’yu azaltarak sorgu hızını artırır ve CPU yükünü dengeler.
Thread bufferleri (sort_buffer_size, read_buffer_size) her sorgu için ayrılır; 1-4 MB arası tutun, fazla artırmak bellek şişmesine neden olur. max_connections * buffer boyutu toplam RAM’i aşmamalı. Pratik kural: Üretimde SHOW GLOBAL STATUS LIKE ‘Innodb_buffer_pool_pages_%’; ile doluluk oranını izleyin, %95 üstü yetersizliği gösterir.
innodb_buffer_pool_size = 12G satırını [mysqld] altına ekleyin. Bu, veri ve indeks sayfalarını RAM’de tutar, disk okumalarını minimize eder. Birden fazla instance için innodb_buffer_pool_instances=8 ekleyin (pool >1GB ise). Değişiklik sonrası SHOW ENGINE INNODB STATUS; ile hit oranını kontrol edin. Örnek senaryo: Yoğun okuma yükünde %99 hit oranı hedefleyin. Bu ayar, en büyük performans kazancını sağlar ve 8 GB+ RAM’li sunucularda zorunludur.
MyISAM tabloları için key_buffer_size=256M ayarlayın; InnoDB hakimse düşürün. sort_buffer_size=2M, read_buffer_size=1M gibi thread bufferlerini sınırlayın. Formül: max_connections (örneğin 200) * 4MB < kalan RAM. Bu, bellek patlamalarını önler. Örnek my.cnf snippet: sort_buffer_size = 2097152. Uygulamada, pt-mysql-summary aracıyla mevcut kullanımı analiz edin ve buna göre ölçekleyin.
Optimizasyonu uygulamak için my.cnf’yi düzenleyin, ardından MySQL’i yeniden başlatın. Değişiklikleri doğrulayın: mysql -e “SHOW VARIABLES LIKE ‘%buffer%’;”. İzleme için mysqltuner.pl scriptini kullanın; önerileri takip edin. Uzun vadede, Prometheus + Grafana ile buffer hit oranlarını grafikleştirin. Bu süreç, iteratif iyileştirmeyi sağlar ve ani çökmeleri önler.
1. Toplam RAM’i free -h ile kontrol edin. 2. my.cnf’yi yedekleyin. 3. Parametreleri ekleyin: innodb_buffer_pool_size=%RAM*0.7. 4. sudo systemctl restart mysql. 5. Logları izleyin: tail -f /var/log/mysql/error.log. Hata varsa (Out of memory), buffer’ları küçültün. Bu adımlar, 15 dakikada tamamlanır ve anında etki gösterir. Test için sysbench ile benchmark çalıştırın: sysbench oltp_read_write –mysql-db=test run.
SHOW GLOBAL STATUS; ile Questions, Innodb_buffer_pool_read_requests gibi metrikleri takip edin. Hit oranı = (1 – Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests) *100. %95 altıysa buffer artırın. Haftalık ince ayar yapın; yük arttıkça max_connections’ı 500’e çıkarın. Araçlar: Percona Toolkit’in pt-mysql-summary’si detaylı rapor verir. Bu yöntemle, RAM kullanımını %90 verimli hale getirin ve maliyetleri düşürün.
Sonuç olarak, my.cnf ile RAM optimizasyonu, MySQL performansını dönüştüren pratik bir yaklaşımdır. Düzenli izleme ve testlerle bu ayarları sunucunuzun ihtiyaçlarına uyarlayın; böylece yüksek erişilebilirlik ve hız elde edin. Uzman desteği için sistem loglarını düzenli inceleyin ve ölçeklenebilir konfigürasyonlar benimseyin.