Buyukweb
MySQL Performans Optimizasyonu: Index, Query Cache ve InnoDB Ayarları

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ı.

Büyükweb Teknik Ekibi26 Eylül 20247 dakika okuma

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

  1. Veri merkezi lokasyonu: Turkiye'de veri merkezi olan firmalari tercih edin
  2. Uptime garantisi: Minimum %99.5, ideal %99.8+
  3. Teknik destek: 7/24 Turkce destek zorunlu
  4. Guvenlik: DDoS korumasi, SSL, WAF dahil olmali
  5. Yedekleme: Gunluk otomatik yedekleme olmali
  6. Olceklenebilirlik: Ihtiyac artiginda kolayca yukseltme yapilabilmeli
  7. 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:

#mysql#performans optimizasyonu#optimizasyon#veritabanı indeks#veritabanı#database

Bu yazıyı paylaş