MariaDB, güçlü ve açık kaynaklı bir veritabanı sistemidir. Ancak yüksek trafikli uygulamalarda varsayılan ayarlarla sınırlı performans sergileyebilir. VDS Server üzerinde barındırılan projeler için performansı optimize etmek, hem donanım kaynaklarından maksimum verimi almak hem de uygulama gecikmelerini minimize etmek adına kritik önem taşır. Bu yazıda, özellikle buffer yönetimi ve query tuning konularına odaklanacağız.
Buffer Ayarlarıyla Bellek Yönetimi
MariaDB, disk erişimini azaltmak için RAM üzerinde çalışan çeşitli buffer yapıları kullanır. Doğru yapılandırılmış buffer’lar, sorgu sürelerini ciddi anlamda düşürür.
innodb_buffer_pool_size
Bu ayar, InnoDB motoru kullanan tabloların veri ve index yapılarının bellekte saklanacağı alanı belirler. VDS sunucunuzdaki toplam RAM’in yaklaşık %70–80’i bu alana ayrılabilir.
innodb_buffer_pool_size = 4G
RAM’iniz 8 GB ise, 4–6 GB arasında bir değer idealdir.
query_cache_size
ve query_cache_type
Query cache, aynı sorgulara verilen cevapların önbellekte saklanmasını sağlar. Ancak, yüksek yazma yoğunluklu uygulamalarda performansı düşürebilir. Bu nedenle sadece okuma ağırlıklı sistemlerde aktif edilmesi önerilir.
query_cache_type = 1
query_cache_size = 128M
Yüksek trafikli, sık güncellenen uygulamalarda bu özelliği kapatmak daha verimlidir.
tmp_table_size
ve max_heap_table_size
Geçici tablolar RAM’de tutulabilir. Bu ayarları artırmak, disk yerine bellekte geçici tablo oluşturulmasını sağlar.
tmp_table_size = 256M
max_heap_table_size = 256M
Bu değerlerin eşit olması önemlidir. Aksi durumda, küçük olan sınır dikkate alınır.
Query Tuning ile Sorgu Optimizasyonu
Buffer ayarları kadar önemli bir diğer konu da sorguların verimli yazılmasıdır. Yanlış indeksleme veya karmaşık JOIN işlemleri, CPU ve disk kullanımını artırır.
EXPLAIN
Komutu Kullanımı
Sorguların hangi yollarla işlendiğini analiz etmek için EXPLAIN
kullanılır. Bu sayede:
- Hangi tabloların tam tarandığı,
- Hangi index’lerin kullanıldığı,
- Sorgunun tahmini satır sayısı gibi bilgiler öğrenilebilir.
EXPLAIN SELECT * FROM siparisler WHERE kullanici_id = 1234;
Eğer type
değeri “ALL” çıkıyorsa, tablo tam taranıyordur. Bu genellikle index eksikliği anlamına gelir.
Index Kullanımı
Doğru sütunlara index eklemek, özellikle WHERE, JOIN ve ORDER BY içeren sorgularda performansı belirgin şekilde artırır.
CREATE INDEX idx_kullanici_id ON siparisler(kullanici_id);
Ancak çok fazla index kullanmak da yazma işlemlerini yavaşlatabilir. Bu nedenle dikkatli planlama şarttır.
Slow Query Log
Yavaş çalışan sorguların tespiti için slow_query_log
özelliği kullanılabilir.
slow_query_log = 1
long_query_time = 2
2 saniyeden uzun süren sorgular log’a yazılır. Bu sorgular analiz edilerek optimize edilmelidir.