MySQL / MariaDB Yapılandırma Aracı (my.cnf)

Sunucunuzun özelliklerine ve kullanım senaryonuza göre optimum my.cnf yapılandırmasını hesaplar. InnoDB buffer pool, bağlantı havuzu ve onlarca parametre için kopyalamaya hazır çıktı üretir.

📋 Mevcut MySQL durumunu kontrol etmek için bu komutları çalıştırın
$ free -m | awk '/Mem:/ {print "Toplam RAM: "$2" MB, Kullanılan: "$3" MB"}'
$ mysql -e "SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_%';" | grep -E 'reads|read_requests'
$ mysql -e "SHOW GLOBAL STATUS LIKE 'Max_used_connections';"
Buffer Pool Hit Rate hesaplama: read_requests / (read_requests + reads) × 100 — bu oran %95’in üzerinde olmalı. Düşükse buffer pool boyutunu artırın.
Sunucu Bilgileri
MB

free -m ile öğrenin.

core

nproc ile öğrenin.

Kullanım Senaryosu

MySQL dışında başka servisler de çalışıyorsa “Karma” seçin.

I/O scheduler ve flush ayarları buna göre değişir.

Bağlantı ve Sorgu Ayarları
conn

PHP-FPM max_children × 1.1 formülünü kullanabilirsiniz.

MB

0 bırakırsanız otomatik hesaplanır.

Hesaplama Sonuçları

InnoDB Buffer Pool
Buffer Pool Instances
paralel erişim
max_connections
thread_cache_size
yeniden kullanım
tmp_table_size
geçici tablo
Tahmini MySQL RAM
innodb_log_file_size
redo log
flush_log_at_trx
güvenlik/hız dengesi
/etc/mysql/my.cnf  ·  /etc/my.cnf

    

MySQL Performans Optimizasyonu Rehberi

MySQL/MariaDB performansının büyük çoğunluğu iki temel faktöre bağlıdır: InnoDB Buffer Pool boyutu ve bağlantı yönetimi. Doğru yapılandırılmış bir MySQL, aynı donanımda 5–10× daha iyi performans gösterebilir.

Temel Hesaplama Formülleri

InnoDB Buffer Pool     = Kullanılabilir RAM × 0.70  (web/karma için)
InnoDB Buffer Pool     = Kullanılabilir RAM × 0.80  (dedicated MySQL için)
Buffer Pool Instances  = min(CPU çekirdek, buffer pool GB)
thread_cache_size      = min(100, max_connections × 0.50)
Tahmini MySQL RAM      = Buffer Pool + (max_conn × 2 MB) + 200 MB
En Önemli 3 Parametre
🏆

innodb_buffer_pool_size — #1 Öncelik

MySQL performansının %80’ini belirler. Veritabanınız RAM’e sığıyorsa her sorgu diskten değil bellekten gelir. Bu değeri mümkün olduğunca büyük tutun — ancak sunucuyu çökmesine yol açmayacak kadar.

🔗

max_connections — Bağlantı Havuzu

Her bağlantı ~2 MB RAM tüketir. PHP-FPM max_children değerinizden biraz yüksek tutun. Çok yüksek değer sunucuyu öldürür; çok düşük değer “Too many connections” hatasına yol açar.

📝

innodb_log_file_size — Yazma Performansı

Write-heavy uygulamalarda kritik. Değer büyüdükçe yazma hızı artar ama crash recovery süresi uzar. Önerim: 256 MB – 1 GB arası. MySQL 8’de otomatik yönetilir.

innodb_flush_log_at_trx_commit

1 = tam ACID güvenli, her commit’te disk yazması (yavaş, production default)
2 = OS cache’e yazar, saniyede 1 flush (önerilen denge)
0 = en hızlı, en riskli — crash’te 1 saniyelik veri kaybı olabilir

Parametre Referans Tablosu
Parametre Açıklama Önerilen
innodb_buffer_pool_size InnoDB veri ve indeksleri için bellek havuzu. En kritik parametre. RAM × 0.7
innodb_buffer_pool_instances Buffer pool’u parçalara böler, paralel erişim performansını artırır. 4 – 8
innodb_log_file_size Redo log dosyası boyutu. Büyük değer yazma performansını artırır. 256M – 1G
innodb_flush_log_at_trx_commit Log flush stratejisi. 1=güvenli, 2=hızlı denge, 0=en hızlı+riskli. 1 veya 2
innodb_flush_method Disk yazma metodu. Linux/SSD için O_DIRECT double buffering’i önler. O_DIRECT
max_connections Eş zamanlı bağlantı sayısı. Her bağlantı ~2 MB RAM kullanır. 100 – 500
thread_cache_size Yeniden kullanılacak thread sayısı. Bağlantı kurma maliyetini düşürür. max_conn × 0.5
tmp_table_size / max_heap_table_size GROUP BY, ORDER BY işlemleri için geçici tablo belleği. Aşılırsa disk kullanılır. 64M – 256M
slow_query_log Yavaş sorguları loglar. long_query_time değerini aşan sorgular kayıt edilir. ON, 1 – 2s
query_cache_type MySQL 5.7/MariaDB: yoğun write altında mutex sorununa yol açar, kapatılması önerilir. MySQL 8’de kaldırıldı. 0 (kapalı)
İzleme Komutları
Buffer Pool Hit Rate (%95+ olmalı)
$ mysql -e "SELECT FORMAT(A.num*100.0/B.num,2) hit_rate FROM (SELECT variable_value num FROM information_schema.global_status WHERE variable_name='Innodb_buffer_pool_read_requests') A, (SELECT variable_value num FROM information_schema.global_status WHERE variable_name='Innodb_buffer_pool_reads') B;"
En yavaş sorgular (slow query log aktifken)
$ mysqldumpslow -s t -t 10 /var/log/mysql/mysql-slow.log
⚠ Dikkat my.cnf değişikliklerini uygulamak için MySQL yeniden başlatılmalıdır: systemctl restart mysql. Canlı ortamda mümkünse önce staging sunucuda test edin. Bazı değişkenler SET GLOBAL ile yeniden başlatmaya gerek kalmadan değiştirilebilir.
💡 Pro İpucu mysqltuner.pl aracı çalışan MySQL’inizi analiz ederek öneriler sunar: wget http://mysqltuner.pl -O mysqltuner.pl && perl mysqltuner.pl. Ancak bu hesaplayıcı gibi araçlar başlangıç noktasıdır; gerçek yükü izleyip ince ayar yapmanız gerekir.