Bu rehber neyi çözer?
MySQL/InnoDB’da bellek ve disk I/O tasarımı performansın merkezindedir. Buffer pool, working set, redo log, storage latency ve doğru index tasarımı birlikte ölçülmelidir.
İşletim sistemi
MySQL Linux ve Windows dahil çeşitli platformlarda kullanılabilir. Üretimde Linux paket yönetimi, otomasyon ve container/cloud ekosistemi nedeniyle sık tercih edilir.
Windows entegrasyonu gereken uygulamalarda Windows da geçerli seçenektir; sürüm destek matrisi doğrulanmalıdır.
RAM ve InnoDB buffer pool
MySQL resmi dokümantasyonu InnoDB buffer pool için birçok dedicated server senaryosunda sistem RAM’inin yaklaşık %50–75 aralığını tipik başlangıç noktası olarak belirtir; ancak connection buffer ve OS ihtiyacı nedeniyle gerçek değer workload ile ayarlanmalıdır.
Buffer pool’un aşırı büyütülmesi swap riskini artırabilir.
SSD/NVMe ve disk I/O
Disk-bound workload’larda düşük latency SSD/NVMe büyük fark yaratır. Redo, data ve temporary I/O profilleri monitoring ile ölçülmelidir.
RAID controller write cache güvenliği, fsync ve cloud disk IOPS limitleri tasarımın parçasıdır.
Güvenlik
TLS 1.0/1.1 desteği modern MySQL sürümlerinde kaldırılmıştır; güncel TLS ve güçlü authentication plugin’leri kullanılmalıdır.
Root/administrative hesap erişimi sınırlandırılmalı, uygulama hesaplarında least privilege uygulanmalı ve DB portu internete açık bırakılmamalıdır.
Replication ve backup
Asenkron replication read scaling ve DR için kullanılabilir; Group Replication/InnoDB Cluster gibi modeller HA senaryolarında değerlendirilebilir.
Logical ve physical backup yöntemleri workload büyüklüğü ve restore hedefiyle birlikte test edilmelidir.
Sık Sorulan Sorular
InnoDB buffer pool RAM’in yüzde kaçı olmalı?
Dedicated sistemlerde %50–75 tipik başlangıç aralığı olabilir; kesin değer connection yükü, OS ve diğer MySQL buffer’larına göre ölçülmelidir.
MySQL için SSD yeterli mi, NVMe şart mı?
SSD birçok workload için yeterlidir; yüksek IOPS ve düşük latency gereken sistemlerde NVMe avantaj sağlar.
Replication veri kaybını önler mi?
Tek başına hayır. Replication backup değildir ve yanlış işlemler replikalara da taşınabilir.
Veritabanı Altyapınızı Birlikte Değerlendirelim
Workload, güvenlik, donanım, HA ve yedekleme gereksinimlerinize göre altyapıyı birlikte planlayabiliriz.
Mimari ve çalışma modeli
InnoDB buffer pool veri ve indeks cacheini, redo recoveryyi, undo ise transaction/sürümleme işlerini destekler. Binary log ile redo aynı günlük değildir ve recovery/replication tasarımı ayrı yapılır. Bellek yüzdesini sabit reçete olarak vermek yerine çalışma kümesi, bağlantılar ve diğer servislerle ölçün.
- 1Bağlantı/sorgu
- 2InnoDB cache ve kilit
- 3Redo/undo ve veri
- 4Binlog/backup/recovery
Tasarım parametreleri
- Buffer pool ve redo
- Çalışma kümesi, redo ve checkpoint baskısını ayrı ölçün; buffer pool tüm RAM’i tüketmemelidir.
- Durability ayarları
- Redo flush ve binlog sync tercihlerini güç kaybı, replication ve kurtarma hedefiyle birlikte değerlendirin.
- İş yükü ve sorgu dağılımı
- Okuma/yazma oranı, bağlantı sayısı, transaction süresi ve yoğun sorguları ölçün. Veritabanı boyutu tek başına donanım gereksinimini açıklamaz.
- Bellek ve depolama
- Çalışma kümesi, günlük yazması, geçici alan ve checkpoint davranışını ayrı inceleyin. Güvenilir yazma garantisi performans kadar önemlidir.
- Kurtarma zinciri
- Başlangıç yedeği, gerekli günlükler, yapılandırma ve anahtarların birlikte geri getirilebildiğini sınayın.
- Erişim ve değişiklik
- Uygulama rolü, yönetici rolü ve schema değişiklik yetkisini ayırın. Üretimde indeks veya parametre değişimini kontrollü yapın.
Hesap ve uygulama örneği
Örnek pilotta yoğun okuma ve yazma zamanlarını ayrı kaydedin. Buffer pool miss, log beklemesi ve çalışan thread sayısını sorgu gecikmesiyle karşılaştırın. Binary log saklama süresinin PITR zincirini karşılayabildiğini restore ile kanıtlayın.
Örnek komutlar: laboratuvar değerlerini değiştirin; kullanmadan önce yetkiyi ve yazılım sürümünü doğrulayın.
SHOW GLOBAL STATUS LIKE 'Threads_running';
Hata teşhisi
| Belirti | Olası neden / ayrım | Doğrulama |
|---|---|---|
| Commit gecikmesi yükseliyor | Log flush I/O veya kilit beklemesi olabilir. | Transaction beklemeleri, redo yazması ve depolama latencysini eşleştirin. |
| CPU düşük, sorgu yavaş | Kilit, I/O veya istemci beklemesi baskın olabilir. | Yürütme planını ve bekleme türünü aynı sorgu için inceleyin. |
| Replica bağlı ama verisi eski | Gönderme, uygulama veya transaction beklemesi gerilik yaratabilir. | Son uygulanmış işlem ve kaynağın commit zamanını karşılaştırın. |
| Disk sürekli büyüyor | Günlük tutma, açık transaction, replication slot veya bakım ihtiyacı etkili olabilir. | Ürünün desteklediği istatistikleri inceleyin; günlükleri elle silmeyin. |
Kabul ve doğrulama kontrolleri
- Redo, binary log ve backup kapsamını birbirinin yerine kullanmadan doğrulayın.
- Temsilî transactionları ve sorguları gerçek veri dağılımıyla test edin.
- Ayrı hedefe restore yapıp uygulama kayıtlarını doğrulayın.
- Yetkisiz okuma ve schema değişikliği denemelerini test kimliğiyle reddedin.
- Failover sonrasında tek yetkili yazıcı ve doğru bağlantı hedefini doğrulayın.
- Bakım sırasında kilit, günlük hacmi ve gecikme değişimini ölçün.
İlgili kavramlar
Transaction sınırı
Transaction, uygulamanın belirli işlemleri birlikte başarılı veya başarısız kabul ettiği mantıksal birimdir. Veritabanı içindeki atomiklik, e-posta gönderimi veya farklı servislerdeki değişikliklerin otomatik olarak aynı atomik kapsamda olduğu anlamına gelmez. Commit noktası ve hata sonrasında tekrar denemenin davranışı açık olmalıdır. Aynı isteğin iki kez işlenmesini önlemek için idempotency gereksinimini değerlendirin. Testte ağ kesintisi ve bağlantı kopmasını commit öncesi ve sonrasında ayrı uygulayın; istemcinin hata alması işlemin kesinlikle başarısız olduğu anlamına gelmeyebilir.
İşlem günlüğü ve recovery zinciri
WAL, redo veya transaction log gibi mekanizmalar, veri değişikliklerinin kalıcılaştırılması ve kurtarılması için sıralı kayıt tutar; ürünler arasında ayrıntılar farklıdır. Veri dosyası kopyası ile işlem günlüklerinin zamanı ve zinciri uyumlu olmalıdır. Günlüklerin bulunması tek başına belirli bir zamana dönülebileceğini kanıtlamaz: başlangıç yedeği ve kesintisiz gerekli günlük aralığı da gerekir. Arşivleme gecikmesini, günlük hacmini ve geri oynatma süresini ölçün. Günlükleri kapasite kazanmak için rastgele silmeyin; saklama ve temizleme ürünün desteklediği yöntemle yapılmalıdır.
İndeks ve sorgu planı
İndeks, uygun sorgularda taranacak veriyi azaltabilir; her yeni indeks yazma, bakım ve depolama maliyeti getirir. Sütun sırası, seçicilik, filtre ve sıralama gereksinimi birlikte değerlendirilir. Sorgu yavaşlığını yalnız indeks yokluğuna bağlamayın: yanlış tahmin, kilit beklemesi, disk gecikmesi veya gereksiz veri taşıma da neden olabilir. Temsilî sorgunun yürütme planını ve gerçek satır sayılarını inceleyin. Değişikliğin okuma kazancını, yoğun yazma sırasında oluşturduğu maliyetle birlikte ölçün; üretimde kontrolsüz bakım işlemleri başlatmayın.
Kilit, bekleme ve deadlock
Eşzamanlı işlemler veri bütünlüğü için kilit veya sürümleme mekanizmaları kullanır. Uzun açık transaction, diğer işleri bekletebilir; deadlock ise birbirini bekleyen işlemler arasındaki döngüdür. Ürün bazı işlemlerden birini sonlandırabilir ve uygulamanın güvenli tekrar deneme yapması gerekebilir. Bekleyen sorgu ile onu bloke eden sorguyu birlikte inceleyin. İzolasyon seviyesini rastgele düşürmek veri tutarlılığını değiştirebilir. Transaction süresini kısaltma, tutarlı erişim sırası ve uygun indeks gibi seçenekleri aynı iş yükünde doğrulayın.
Kalıcılaştırma ve güç kaybı
Commit edilmiş verinin güç kaybından sonra korunması veritabanı, işletim sistemi, dosya sistemi, kontrolcü ve diskin yazma garantilerinin birleşimine bağlıdır. Yazma önbelleği ve flush davranışını bilmeden performans için güvenlik ayarlarını kapatmayın. Güç kaybı korumalı depolama faydalıdır fakat bütün zincirin doğru yapılandırıldığını tek başına kanıtlamaz. Üretim yerine kontrollü laboratuvarda arıza ve recovery testi yapın. Veri bütünlüğünü örnek dosya açılmasıyla değil, uygulama kayıtları ve desteklenen tutarlılık kontrolleriyle doğrulayın.
Replikasyonun kapsamı
Replikasyon veri veya durum değişikliklerini başka bir kopyaya aktarır. Senkron aktarım gecikme ve bağlantı bağımlılığı yaratabilir; asenkron aktarım ise geride kalabilir. Kopyanın güncel olması, yanlış değişikliklerden korunması anlamına gelmez: silme veya bozulma da taşınabilir. Gecikmeyi yalnız bağlantı durumu üzerinden değil, uygulamanın tamamlanan son işlemiyle karşılaştırın. Kaynak düğüm kaybedildiğinde yazma yetkisinin hangi kopyaya geçeceğini ve eski düğüm geri gelince nasıl uzlaştırılacağını tanımlayın. Replikasyon gecikmesi ile gerçek kurtarma noktasını ayrı raporlayın.