
MySQL Performans Optimizasyonu: Index, Query Cache ve InnoDB Ayarları
MySQL performans optimizasyonu rehberi. Index stratejileri, EXPLAIN ile sorgu analizi, InnoDB buffer pool ve slow query log kullanımı.
MySQL Performans Optimizasyonu
Yavaş MySQL sorguları, web uygulamalarının en yaygın performans sorunlarından biridir. Bu rehberde veritabanı performansını artırmak için kritik teknikler ele alınmaktadır.
Yavaş Sorgu Log Etkinleştirme
İlk adım: hangi sorgular yavaş, bunu öğrenmek.
-- Mevcut ayarları kontrol et
SHOW VARIABLES LIKE 'slow_query%';
SHOW VARIABLES LIKE 'long_query_time';
-- Yavaş sorgu log aç
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1; -- 1 saniyeden yavaş
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
-- Index kullanmayan sorguları da logla
SET GLOBAL log_queries_not_using_indexes = 'ON';
my.cnf'de kalıcı:
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
mysqldumpslow ile Log Analizi
# En yavaş 10 sorguyu göster
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log
# En çok çalışan sorgular
mysqldumpslow -s c -t 10 /var/log/mysql/slow.log
# pt-query-digest (daha kapsamlı)
pt-query-digest /var/log/mysql/slow.log
EXPLAIN ile Sorgu Analizi
EXPLAIN SELECT * FROM siparisler s
JOIN kullanicilar k ON s.kullanici_id = k.id
WHERE s.durum = 'beklemede'
ORDER BY s.tarih DESC;
EXPLAIN çıktısı analizi:
| Kolon | İyi | Kötü |
|---|---|---|
| type | ref, eq_ref, const | ALL, index |
| key | Var | NULL |
| rows | Az | Çok |
| Extra | Using index | Using filesort, Using temporary |
-- Daha detaylı analiz
EXPLAIN FORMAT=JSON SELECT ...;
EXPLAIN ANALYZE SELECT ...; -- MySQL 8.0+
Index Stratejileri
-- Tek sütun index
ALTER TABLE siparisler ADD INDEX idx_durum (durum);
ALTER TABLE kullanicilar ADD UNIQUE INDEX idx_email (email);
-- Bileşik (composite) index - sıralama önemli!
ALTER TABLE siparisler ADD INDEX idx_kullanici_durum (kullanici_id, durum);
-- Covering index (sorgu tüm veriyi index'ten alır)
ALTER TABLE siparisler ADD INDEX idx_covering (durum, tarih, toplam);
-- Index kullanımını doğrula
SHOW INDEX FROM siparisler;
-- Kullanılmayan index'leri bul (MySQL 8.0+)
SELECT * FROM sys.schema_unused_indexes;
-- Index sil
DROP INDEX idx_eski ON siparisler;
Hangi sütunlara index ekleyin:
- WHERE koşullarında kullanılan sütunlar
- JOIN'lerde kullanılan foreign key sütunlar
- ORDER BY / GROUP BY sütunlar
- Yüksek kardinalite (benzersiz değer sayısı çok olan) sütunlar
InnoDB Buffer Pool Optimizasyonu
En kritik MySQL ayarı:
# my.cnf
[mysqld]
# RAM'in %50-70'i (GB cinsinden)
innodb_buffer_pool_size = 4G
# Buffer pool instances (8GB+ için)
innodb_buffer_pool_instances = 4
# Flush method
innodb_flush_method = O_DIRECT
# Log dosyası boyutu
innodb_log_file_size = 512M
# I/O kapasitesi (SSD için)
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
Buffer pool durumunu izle:
SHOW ENGINE INNODB STATUSG
-- Buffer pool hit ratio (%99+ olmalı)
SELECT (1 - (Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests)) * 100 AS hit_ratio
FROM (SELECT VARIABLE_VALUE AS Innodb_buffer_pool_reads
FROM performance_schema.global_status WHERE VARIABLE_NAME = 'Innodb_buffer_pool_reads') r,
(SELECT VARIABLE_VALUE AS Innodb_buffer_pool_read_requests
FROM performance_schema.global_status WHERE VARIABLE_NAME = 'Innodb_buffer_pool_read_requests') rr;
Bağlantı Havuzu Optimizasyonu
[mysqld]
max_connections = 200
thread_cache_size = 50
table_open_cache = 4000
table_definition_cache = 2000
# Geçici tablo boyutu
tmp_table_size = 256M
max_heap_table_size = 256M
Sorgu Optimizasyonu İpuçları
-- SELECT * yerine ihtiyaç duyulan sütunları seç
SELECT id, baslik, tarih FROM yazilar WHERE aktif = 1;
-- LIMIT kullan (büyük result set)
SELECT * FROM loglar ORDER BY tarih DESC LIMIT 100;
-- Subquery yerine JOIN tercih et
-- Kötü:
SELECT * FROM siparisler WHERE kullanici_id IN (SELECT id FROM kullanicilar WHERE aktif = 1);
-- İyi:
SELECT s.* FROM siparisler s JOIN kullanicilar k ON s.kullanici_id = k.id WHERE k.aktif = 1;
-- LIKE sorgusunda başına % koyma (index kullanılamaz)
-- Kötü: WHERE isim LIKE '%ahmet%'
-- İyi: WHERE isim LIKE 'ahmet%'
-- OR yerine UNION ALL
SELECT * FROM urunler WHERE kategori = 'A'
UNION ALL
SELECT * FROM urunler WHERE kategori = 'B';
Performance Schema ile İzleme
-- En yavaş sorgular
SELECT DIGEST_TEXT, COUNT_STAR, AVG_TIMER_WAIT/1000000000 AS avg_ms
FROM performance_schema.events_statements_summary_by_digest
ORDER BY AVG_TIMER_WAIT DESC LIMIT 10;
-- Tablo istatistikleri
SELECT * FROM performance_schema.table_io_waits_summary_by_table
ORDER BY SUM_TIMER_WAIT DESC LIMIT 10;
Büyükweb cPanel hosting paketlerinde MySQL optimize edilmiş yapılandırmayla gelir. VDS sunucularda kendi my.cnf ayarlarınızı yapabilirsiniz.
Veritabani Performans Optimizasyonu
Veritabani web uygulamalarinin kalbidir.
MySQL/MariaDB Tuning
innodb_buffer_pool_size'i RAM'in %60-70'ine ayarlayin. slow_query_log ile yavas sorgulari tespit edin. max_connections optimize edin.
Indeksleme
WHERE, JOIN, ORDER BY sutunlarina indeks ekleyin. EXPLAIN ile sorgu planlari analiz edin. Composite index kullanin.
Baglanti Havuzu
ProxySQL ile gelismis baglanti yonetimi. Connection pooling ile maliyet azaltma. Persistent connections kullanin.
Replikasyon
Master-Slave ile okuma yukunu dagitin. Galera Cluster ile multi-master yuksek erisilebilirlik. Semi-senkron replikasyon degerlendirin.
Yedekleme
mysqldump mantiksal, xtrabackup fiziksel yedek. Binary log ile point-in-time recovery. Incremental yedekleme ile tasarruf.
Sik Sorulan Sorular
MySQL mi PostgreSQL mi?
MySQL cogu web uygulamasi ile uyumlu. PostgreSQL gelismis veri tipleri ve JSON icin ideal. CMS'ler genelde MySQL kullanir.
Veritabanim buyudu ne yapmaliyim?
Gereksiz verileri temizleyin, tablo optimize edin, arsivleme yapin, partitioning kullanin.
Ne siklikla yedek almaliyim?
Kritik veritabanlari saatlik, standart siteler gunluk. Buyuk degisikliklerden once manuel yedek.
Sonuc
Veritabani optimizasyonu uygulama performansini dogrudan etkiler. Indeksleme, tuning ve yedekleme ile veri katmaninizi guclendirin.
Veritabani Boyut Yonetimi
Buyuk Tablolar icin Stratejiler
- Partitioning: Tarihe gore tablolari bolumlendirin. Sorgu performansi artar.
- Arsivleme: Eski verileri arsiv tablolarina tasiyin.
- Sikistirma: InnoDB sikistirmasi ile disk kullanimini %50-75 azaltin.
WordPress Veritabani Optimizasyonu
- wp_options autoload: Gereksiz autoload kayitlari temizleyin.
- Post revisions: wp-config.php'de WP_POST_REVISIONS sinirlayin.
- Transient veriler: Suresi dolmus verileri duzenli temizleyin.
- Spam yorumlar: Toplu silin.
Veritabani Guvenlik
- Varsayilan portu degistirin
- Uygulama bazli kullanici olusturun
- Minimum gerekli yetki verin
- SSL ile baglanti sifreleyin
- Duzenli guvenlik taramasi yapin
Turkiye'de Hosting Sektoru 2025-2026
Sektorel Trendler
Turkiye hosting pazari hizla buyumektedir. E-ticaretin genislemesi, dijitallesme calismalarI ve uzaktan calisma trendi hosting talebini artirmaktadir. NVMe SSD, HTTP/3 ve edge computing gibi teknolojiler hosting performansini yeni seviyelere tasimaktadir.
Dikkat Edilmesi Gerekenler
Hosting sektoru rekabetci bir pazardir. Dusuk fiyat vaat eden ancak altyapı kalitesinden odun veren firmalardan kacinin. Gizli maliyet, yenileme fiyat artisi ve yetersiz destek en sik karsilasilan sorunlardir.
Hosting Firmasi Secim Kriterleri
- Veri merkezi lokasyonu: Turkiye'de veri merkezi olan firmalari tercih edin
- Uptime garantisi: Minimum %99.5, ideal %99.8+
- Teknik destek: 7/24 Turkce destek zorunlu
- Guvenlik: DDoS korumasi, SSL, WAF dahil olmali
- Yedekleme: Gunluk otomatik yedekleme olmali
- Olceklenebilirlik: Ihtiyac artiginda kolayca yukseltme yapilabilmeli
- Musteri yorumlari: Gercek kullanici deneyimlerini arastirin
Buyukweb 2009'dan beri bu kriterlerin tumunu karsilayarak 5.200+ musteriye guvenilir hosting hizmeti sunmaktadir. Sorulariniz icin 0850 302 60 70 numarasini arayabilir veya destek@buyukweb.com adresine yazabilirsiniz.
Sik Yapilan Hosting Hatalari
Hosting secimi ve yonetiminde en sik karsilasilan hatalar:
1. Sadece Fiyata Bakmak
En ucuz hosting her zaman en iyi secim degildir. Performans, guvenlik ve destek kalitesi fiyattan daha onemlidir. Dusuk maliyetli hostinglerde yenileme fiyatlari genellikle cok daha yuksektir.
2. Yedekleme Almamak
Otomatik yedekleme olsa bile, onemli degisikliklerden once manuel yedek almak hayati onem tasir. Yedeklerin geri yuklenebilirligini test etmeyen sirketler veri kaybi yasadiginda ciddi sorunlarla karsilasir.
3. Guncellemeleri Ertelemek
WordPress, eklentiler ve isletim sistemi guncellemelerini ertelemek guvenlik aciklarına davetiye cikarir. Otomatik guvenlik guncellemeleri yapilandirmak en temel onlemdir.
4. SSL Kullanmamak
Hala SSL sertifikasi olmayan web siteleri mevcut. SSL olmadan Google siralama duser, ziyaretci guveni azalir ve veri guvenligi tehlikeye girer. Ucretsiz Let's Encrypt sertifikasi bile yeterlidir.
5. Kaynak Planlamasi Yapmamak
Trafik artisina hazirliksiz yakalanmak, sitenizin cokmesine neden olabilir. Trafik trendlerini izleyin ve ihtiyac halinde kaynakları zamaninda artirin.
Etiketler:

