$ DBAGUIDE.COM / CHEAT-SHEETS / MYSQL / INNODB

InnoDB Tuning Referansı

MySQL InnoDB Depolama Motoru Performans Ayar Rehberi

MySQL 8.0 / 8.4 uyumlu
Güncelleme: Ekim 2026 · Production-grade
InnoDB
Engine
01

Buffer Pool Ayarları

EN KRİTİK
PARAMETREVARSAYILANÖNERİLEN
innodb_buffer_pool_size InnoDB'nin en kritik parametresi. Tüm tablo ve index verilerini bellekte tutar. 128M RAM'in %70-80'i
innodb_buffer_pool_instances Buffer pool'u parçalara böler, eşzamanlı erişim çekişmesini azaltır. 8 1 per GB (max 64)
innodb_buffer_pool_chunk_size Buffer pool boyutu bu değerin katı olmalı. 128M pool_size / instances ile uyumlu
innodb_old_blocks_time LRU young listesine geçiş için bekleme süresi. 1000ms 1000ms (OLTP)
0 (Batch)
innodb_lru_scan_depth Page cleaner thread'in LRU tarama derinliği. 1024 256-512
HESAPLAMA ÖRNEĞİ
# Buffer Pool Hesaplama Kuralı Toplam RAM: 64 GB OS için bırak: 6 GB (= %10) Diğer MySQL: 4 GB (sort, tmp, connections) innodb_buffer_pool_size = 54 GB (= %84 of available) innodb_buffer_pool_instances = 54 (1 per GB)
04

Transaction & Lock Ayarları

PARAMETREVARSAYILANÖNERİLEN
innodb_lock_wait_timeout Lock beklemesi için saniye cinsinden timeout. 50 30-120
innodb_deadlock_detect Deadlock otomatik tespiti. Yüksek eşzamanlılıkta kapatmak tartışmalı. ON ON
innodb_rollback_on_timeout Timeout'ta tüm transaction'ı geri alır (sadece son statement değil). OFF ON (opsiyonel)
transaction_isolation READ COMMITTED, gap lock'ları azaltır. GTID replikasyon için RR önerilir. REPEATABLE-READ RC (yüksek concurrency)
innodb_autoinc_lock_mode Sıralı ve bulk insert'lerde AUTO_INCREMENT kilit modunu kontrol eder. 1 2 (interleaved)
innodb_print_all_deadlocks Tüm deadlock'ları error log'a yazar. Analiz için açık tut. OFF ON
06

SHOW ENGINE INNODB STATUS — Okuma Rehberi

BACKGROUND THREAD Flush aktivitesi, log sequence number (LSN)
SEMAPHORES Bekleme sayısı; yüksekse eşzamanlılık sorunu var
TRANSACTIONS Aktif transaction'lar, lock bekleyenler, undo log uzunluğu
FILE I/O Async okuma/yazma thread durumları
INSERT BUFFER AND AHI Change buffer istatistikleri
LOG LSN, checkpoint LSN farkı (checkpoint_age), log flushed alanlar
BUFFER POOL AND MEMORY Pool boyutu, dirty page sayısı, hit oranı
ROW OPERATIONS Saniyedeki insert/update/delete/read sayıları
checkpoint_age = log_lsn - checkpoint_lsn → Bu değer innodb_log_file_size × log_files_in_group'un %75'ini geçerse kritik uyarı!
02

Log & Flush Ayarları

PARAMETREVARSAYILANÖNERİLEN
innodb_log_file_size Redo log dosyası boyutu. Büyük değer = daha az checkpoint I/O. 48M 1-4 GB
innodb_log_buffer_size Log buffer boyutu. Büyük transaction'lar için artır. 16M 64-256 MB
innodb_flush_log_at_trx_commit 1=ACID güvencesi, 2=1 sn veri kaybı riski ama 2-10x hızlı. 1 1 (prod)
2 (perf)
innodb_flush_method Double buffering'i önler. Linux'ta standart öneri. fsync O_DIRECT
innodb_doublewrite Sayfa bozulmasını önler. Belirli dosya sistemlerinde devre dışı bırakılabilir. ON ON (prod)
OFF (ZFS/Fusion)
innodb_log_files_in_group MySQL 8.0.30+ tek büyük log dosyasına geçti. 2 2 (MySQL 8.0)
▲ innodb_flush_log_at_trx_commit=2 → Sunucu çökmesinde maksimum 1 saniyelik veri kaybı riski. İşlemler OS buffer'a yazılır ama MySQL diske senkronize etmez.
03

I/O & Thread Ayarları

PARAMETREVARSAYILANÖNERİLEN
innodb_io_capacity Arka planda yapılabilecek I/O ops/sn. HDD için düşük, SSD için yüksek tut. 200 2000-20000 (SSD)
innodb_io_capacity_max Flush baskısı artınca kullanılır. io_capacity'nin 2-4 katı. 2000 4x io_capacity
innodb_read_io_threads Async okuma thread sayısı. 4 4-8
innodb_write_io_threads Async yazma thread sayısı. 4 4-8
innodb_purge_threads Silinen satırların (undo log) temizlenmesi. 4 4
innodb_page_cleaners Dirty page temizleyici thread sayısı. 4 = innodb_buffer_pool_instances
innodb_thread_concurrency 0=otomatik yönetim. Sadece ince ayar gerekirse 2x CPU core. 0 0 (auto)
08

Hızlı Kontrol Listesi & my.cnf Şablonu

PRODUCTION MY.CNF
# /etc/mysql/my.cnf - Production InnoDB Tuning # dbaguide.com · MySQL 8.0/8.4 [mysqld] # -- Buffer Pool innodb_buffer_pool_size = 54G # RAM * 0.75-0.80 innodb_buffer_pool_instances = 54 # 1 per GB innodb_buffer_pool_chunk_size = 1G # -- Log & Flush innodb_log_file_size = 2G innodb_log_buffer_size = 64M innodb_flush_log_at_trx_commit = 1 # ACID (2=perf) innodb_flush_method = O_DIRECT innodb_doublewrite = ON # -- I/O innodb_io_capacity = 4000 # SSD için innodb_io_capacity_max = 16000 innodb_read_io_threads = 8 innodb_write_io_threads = 8 innodb_page_cleaners = 54 # = buffer_pool_instances # -- Transaction & Lock innodb_lock_wait_timeout = 50 innodb_deadlock_detect = ON innodb_print_all_deadlocks = ON transaction_isolation = READ-COMMITTED # -- Monitoring performance_schema = ON innodb_monitor_enable = all
HIZLI KONTROL LİSTESİ
Buffer pool RAM'in %70-80'i; hit oranı > %99
instances = 1 per GB, page_cleaners eşit
Redo log 1-4 GB; checkpoint_age < %75
flush_log_at_trx_commit=1 prod'da korunuyor
Linux'ta flush_method=O_DIRECT
SSD için io_capacity 2000+ ayarlı
print_all_deadlocks=ON ile analiz açık
Uzun süren transaction'lar INNODB_TRX ile izleniyor
Değişiklik sonrası restart gerektirenler planlandı
Değerler 64 GB RAM / SSD sunucu içindir. Kendi donanımına göre oranla.
05

İzleme & Tanı Sorguları

BUFFER POOL KULLANIM ORANI
SELECT FORMAT(pool_size * 16 / 1024, 0) AS pool_size_MB, FORMAT(database_pages * 16 / 1024, 0) AS used_MB, FORMAT((1 - database_pages/pool_size) * 100, 1) AS free_pct FROM information_schema.INNODB_BUFFER_POOL_STATS;
DİRTY PAGE ORANI
SELECT (SELECT variable_value FROM performance_schema.global_status WHERE variable_name = 'Innodb_buffer_pool_pages_dirty') AS dirty_pages, (SELECT variable_value FROM performance_schema.global_status WHERE variable_name = 'Innodb_buffer_pool_pages_total') AS total_pages;
EN UZUN ÇALIŞAN TRANSACTION'LAR
SELECT trx_id, trx_state, trx_started, TIMESTAMPDIFF(SECOND, trx_started, NOW()) AS duration_sec, trx_mysql_thread_id, trx_query FROM information_schema.INNODB_TRX ORDER BY trx_started LIMIT 10;
DEADLOCK SON LOG
SHOW ENGINE INNODB STATUS\G -- "LATEST DETECTED DEADLOCK" bölümüne bak
07

Adaptive Hash Index & Change Buffer

PARAMETREVARSAYILAN
innodb_adaptive_hash_index Sık erişilen index sayfaları için hash index oluşturur. OLTP'de faydalı. ON
innodb_adaptive_hash_index_parts AHI bölüm sayısı. Çekişme varsa artır (max 512). 8
innodb_change_buffering INSERT/DELETE/PURGE işlemlerini buffer'la. all genellikle en iyisi. all
innodb_change_buffer_max_size Change buffer'ın buffer pool'dan alabileceği max yüzde (max 50). 25
innodb_stats_auto_recalc Tablo istatistiklerini otomatik güncelle (optimizer için). ON
innodb_stats_persistent İstatistikleri diske kaydet (restart sonrası korunur). ON