Merhaba arkadaşlar, bugün sizlere özellikle yeni kurduğunuz veya performans sıkıntısı çeken MySQL/MariaDB sunucularınızda yapabileceğiniz temel my.cnf optimizasyonlarından bahsedeceğim. Bu ayarlar, sunucunuzun kaynaklarını daha verimli kullanmasını, bağlantı sorunlarını azaltmasını ve genel sorgu performansını artırmasını sağlayacak. Benim de kendi sunucularımda genelde ilk baktığım noktalardır.
Optimizasyona Başlamadan Önce
Her şeyden önce, mevcut durumu görmek çok önemli. Sunucunuzun ne kadar RAM'i olduğunu, şu anki MySQL bağlantı ve tampon istatistiklerini bilmelisiniz. Aşağıdaki komutlar size fikir verecektir.
Ayrıca, değişiklik yapmadan önce mevcut /etc/mysql/my.cnf veya /etc/my.cnf dosyanızın yedeğini almayı unutmayın!
Bağlantı ve Thread Ayarları
Sunucunuz "Too many connections" hatası veriyor veya yoğun dönemlerde yavaşlıyorsa, bağlantı havuzu ayarlarına bakmak gerekir. Varsayılan değerler genelde yetersiz kalır.
InnoDB Tampon Havuzu (Buffer Pool) Optimizasyonu
Bu, MySQL performansı için EN KRİTİK ayardır. InnoDB motoru, tablo ve indeks verilerini burada önbelleğe alır. Mümkün olduğunca büyük tutmak performansı muazzam artırır. Genel kural: Kullanılabilir RAM'in %70-80'i kadar ayırabilirsiniz, ancak işletim sistemine ve diğer uygulamalara da RAM kalmalı.
Dikkat Edilmesi Gerekenler
Bu ayarları yaptıktan sonra mutlaka MySQL servisini yeniden başlatmanız gerekir. Ancak, innodb_buffer_pool_size gibi büyük bir değer atadıysanız, sunucu açılırken tüm bu alanı tahsis etmeye çalışacak ve başlangıç süresi uzayacaktır. Bu normaldir, panik yapmayın.
Ayrıca, her sunucunun iş yükü farklıdır. Bu ayarlar genel geçer başlangıç noktalarıdır. Monitör etmeye devam edin. Aşağıdaki sorgu ile InnoDB Buffer Pool kullanım verimliliğinizi kontrol edebilirsiniz.
Eğer `Innodb_buffer_pool_read_requests` değeri yanındaki `Innodb_buffer_pool_reads` değerine göre çok çok büyükse (örn: %99'dan fazla), buffer pool'unuz verimli çalışıyor demektir.
Ek Performans İpuçları
Aşağıdaki ayarlar da genel performansa katkı sağlar. Özellikle log yazma işlemlerini optimize ederler.
Umarım bu rehber, sunucularınızdaki MySQL performansını gözle görülür şekilde iyileştirmenize yardımcı olur. Unutmayın, sihirli bir tek ayar yok, sisteminizi izleyerek ve iş yükünüze göre ince ayar yapmak en iyisidir.
Siz bu optimizasyonları kendi sunucularınızda nasıl yapıyorsunuz? Farklı bir yaklaşımınız veya eklemek istediğiniz bir püf noktası var mı? Ya da takıldığınız bir yer olursa, aşağıya yazmaktan çekinmeyin. Hep birlikte öğrenelim.
Her şeyden önce, mevcut durumu görmek çok önemli. Sunucunuzun ne kadar RAM'i olduğunu, şu anki MySQL bağlantı ve tampon istatistiklerini bilmelisiniz. Aşağıdaki komutlar size fikir verecektir.
SQL:
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
SHOW STATUS LIKE 'Max_used_connections';
SHOW STATUS LIKE 'Threads_connected';
Ayrıca, değişiklik yapmadan önce mevcut /etc/mysql/my.cnf veya /etc/my.cnf dosyanızın yedeğini almayı unutmayın!
Sunucunuz "Too many connections" hatası veriyor veya yoğun dönemlerde yavaşlıyorsa, bağlantı havuzu ayarlarına bakmak gerekir. Varsayılan değerler genelde yetersiz kalır.
INI:
# Maksimum eşzamanlı bağlantı sayısı. Sunucu RAM'inize göre ayarlayın.
# 4GB RAM için 150-200, 8GB için 300-400 gibi düşünebilirsiniz.
max_connections = 200
# Bağlantı açma/kapama maliyetini azaltır. Aktif tutulacak thread sayısı.
thread_cache_size = 50
# Bir bağlantının boşta kalabileceği maksimum süre (saniye).
# Uzun süreli işlemler yapıyorsanız artırın, genel kullanım için 28800 (8 saat) uygundur.
wait_timeout = 28800
interactive_timeout = 28800
Bu, MySQL performansı için EN KRİTİK ayardır. InnoDB motoru, tablo ve indeks verilerini burada önbelleğe alır. Mümkün olduğunca büyük tutmak performansı muazzam artırır. Genel kural: Kullanılabilir RAM'in %70-80'i kadar ayırabilirsiniz, ancak işletim sistemine ve diğer uygulamalara da RAM kalmalı.
INI:
# Kullanılabilir RAM'inize göre bu değeri değiştirin.
# Örnek: 8GB RAM'li sunucuda 4-5GB ayırmak mantıklıdır.
innodb_buffer_pool_size = 4G
# Buffer Pool'u tek parça halinde değil, daha küçük parçalar halinde ayırmak,
# özellikle büyük RAM'lerde (64GB+) performans ve yönetim avantajı sağlar.
innodb_buffer_pool_instances = 4
Bu ayarları yaptıktan sonra mutlaka MySQL servisini yeniden başlatmanız gerekir. Ancak, innodb_buffer_pool_size gibi büyük bir değer atadıysanız, sunucu açılırken tüm bu alanı tahsis etmeye çalışacak ve başlangıç süresi uzayacaktır. Bu normaldir, panik yapmayın.
Ayrıca, her sunucunun iş yükü farklıdır. Bu ayarlar genel geçer başlangıç noktalarıdır. Monitör etmeye devam edin. Aşağıdaki sorgu ile InnoDB Buffer Pool kullanım verimliliğinizi kontrol edebilirsiniz.
SQL:
SHOW STATUS LIKE 'Innodb_buffer_pool_read%';
Eğer `Innodb_buffer_pool_read_requests` değeri yanındaki `Innodb_buffer_pool_reads` değerine göre çok çok büyükse (örn: %99'dan fazla), buffer pool'unuz verimli çalışıyor demektir.
Aşağıdaki ayarlar da genel performansa katkı sağlar. Özellikle log yazma işlemlerini optimize ederler.
INI:
# Log dosyası boyutu. Varsayılan 48M çok küçük kalır, özellikle yoğun yazma işlemi olan sunucularda artırın.
# Büyük boyut, disk yazma sıklığını azaltır. 1G-2G arası iyi bir başlangıçtır.
innodb_log_file_size = 1G
innodb_log_buffer_size = 64M
# Veri dosyalarını O_DIRECT ile açarak, dosya sistemi önbelleğini (cache) bypass eder.
# Bu, özellikle yüksek RAM'li sistemlerde çift önbellekleme sorununu önler ve performansı artırır.
innodb_flush_method = O_DIRECT
# Tablo başına ayrı dosya kullanımı, yönetimi ve yedeklemeyi kolaylaştırır.
innodb_file_per_table = 1
Umarım bu rehber, sunucularınızdaki MySQL performansını gözle görülür şekilde iyileştirmenize yardımcı olur. Unutmayın, sihirli bir tek ayar yok, sisteminizi izleyerek ve iş yükünüze göre ince ayar yapmak en iyisidir.
Siz bu optimizasyonları kendi sunucularınızda nasıl yapıyorsunuz? Farklı bir yaklaşımınız veya eklemek istediğiniz bir püf noktası var mı? Ya da takıldığınız bir yer olursa, aşağıya yazmaktan çekinmeyin. Hep birlikte öğrenelim.