Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

MariaDB 10.6 Query Cache Kapatma ve Daha Etkili Alternatiflerle Performans Artırma Rehberi

Mesut

Kader gayrete aşıktır.☝🏻☝🏻☝🏻
Yönetici
Katılım
23 Şubat 2025
Mesajlar
27
Merhaba arkadaşlar, bugün sizlere özellikle MariaDB 10.6 ve üzeri sürümlerde çokça sorulan bir performans optimizasyonundan bahsedeceğim: Query Cache'i kapatmak ve onun yerine kullanabileceğiniz çok daha etkili alternatifleri anlatacağım. Eğer sunucunuzda "query cache" ile ilgili lock bekleme süreleri görüyorsanız veya MariaDB'nin resmi dokümanlarının da dediği gibi bu özelliği artık kullanmıyorsanız, bu rehber tam size göre.

📌 Query Cache Neden Kapatılmalı?
MariaDB 10.6'dan itibaren, Query Cache varsayılan olarak kapalı geliyor. Ancak eski bir yapılandırmanız varsa veya el ile açtıysanız, onu kapatmanız şiddetle tavsiye ediliyor. Sebebi ise basit: Query Cache, özellikle yoğun yazma (UPDATE/INSERT) işlemi olan sistemlerde ciddi performans sorunlarına ve global lock'lara yol açabiliyor. Belleği verimsiz kullanıyor ve modern uygulamaların ihtiyaçlarına pek cevap veremiyor.

Benim sunucularda genelde yaptığım ilk iş, bu özelliği kontrol edip kapatmak oluyor. Peki nasıl yapacağız?

⚙️ Query Cache'i Kalıcı Olarak Kapatma
Öncelikle, Query Cache'in şu anki durumunu kontrol edelim. MariaDB konsoluna bağlanıp aşağıdaki komutu çalıştıralım:

SQL:
SHOW VARIABLES LIKE 'query_cache_type';
SHOW VARIABLES LIKE 'query_cache_size';

Eğer `query_cache_type` değeri `ON` veya `DEMAND` ise, cache aktif demektir. `query_cache_size` değeri de 0'dan büyükse, bellek ayrılmış durumdadır.

Şimdi kalıcı olarak kapatmak için MariaDB'nin yapılandırma dosyasını düzenleyeceğiz. Genellikle bu dosya /etc/mysql/mariadb.conf.d/50-server.cnf veya /etc/my.cnf.d/server.cnf yolundadır. Sizin konfigürasyonunuz farklı olabilir, dikkat edin.

Dosyayı bir editörle açın (nano veya vi kullanabilirsiniz):

Bash:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

`[mysqld]` bölümünün altına aşağıdaki satırları ekleyin. Eğer zaten varsa, değerlerini değiştirin:

INI:
query_cache_type = 0
query_cache_size = 0

Bu ayarları kaydedip çıktıktan sonra MariaDB servisini yeniden başlatalım:

Bash:
sudo systemctl restart mariadb

Servis yeniden başladıktan sonra, tekrar MariaDB konsoluna bağlanıp aynı `SHOW VARIABLES` komutlarını çalıştırın. Artık `query_cache_type` değeri `OFF`, `query_cache_size` değeri ise `0` olmalıdır. Tebrikler, Query Cache'i kapattınız!

🚀 Query Cache Yerine Kullanılabilecek Alternatifler
Asıl önemli kısım burası arkadaşlar. Cache'i kapattık ama performansı nasıl artıracağız? İşte benim de sıkça uyguladığım ve çok daha etkili olan yöntemler:

🔹 1. InnoDB Buffer Pool Optimizasyonu
Bu, Query Cache'ten katbekat daha önemli ve etkilidir. Veritabanınızın sık kullanılan veri ve indekslerini bellekte (RAM) tutar. Boyutunu doğru ayarlamak çok kritiktir. Genel kural, mevcut RAM'inizin %70-80'ini ayırmaktır. 8GB RAM'li bir sunucuda şöyle yapılandırabilirsiniz:

INI:
innodb_buffer_pool_size = 4G
innodb_buffer_pool_instances = 4

🔹 2. MariaDB Query Response Time (QRT) Eklentisi
Query Cache, sorgu sonuçlarını saklıyordu. QRT eklentisi ise sorgularınızın ne kadar sürede çalıştığını izlemenizi sağlar. Yavaş sorguları tespit edip, onları optimize edebilirsiniz. Kurulumu basittir:

SQL:
INSTALL SONAME 'query_response_time';
SET GLOBAL query_response_time_stats = ON;

🔹 3. Sorgu Optimizasyonu ve İndeksleme
En kalıcı çözüm budur. `EXPLAIN` anahtar kelimesini kullanarak sorgularınızın nasıl çalıştığını analiz edin. Eksik indeksleri ekleyin. Kötü yazılmış sorguları (SELECT kullanımı, gereksiz JOIN'ler) düzeltin. Bu, cache'ten bağımsız olarak her zaman en büyük performans kazancını sağlar.

🔹 4. Uygulama Tarafında Cache (Redis/Memcached)
Modern çözüm budur. Sık değişmeyen, ancak sık okunan verilerinizi (site ayarları, kullanıcı oturumları, menü yapısı) MariaDB'den değil de Redis veya Memcached gibi bir bellek içi veri deposundan çekin. Bu, veritabanı yükünü inanılmaz derecede hafifletir.

⚠️ Dikkat Edilmesi Gerekenler
- Query Cache'i kapatmadan önce, sunucunuzda gerçekten bir performans sorunu olup olmadığını anlamak için monitoring araçları (örn: mytop, Prometheus + mysqld_exporter) kullanın.
- `innodb_buffer_pool_size` değerini ayarlarken, sunucunuzda çalışan diğer servislerin (nginx, php-fpm) de RAM'e ihtiyacı olduğunu unutmayın. Aşırı yüklemeyin.
- Her yapılandırma değişikliğinden sonra, mutlaka sunucu ve uygulama performansını izleyin. Bir ayar her sunucuda aynı etkiyi göstermeyebilir.

🎯 Sonuç
Query Cache, artık tarihe karışmış bir özellik. Onu kapatıp, kaynakları daha modern ve etkili yöntemlere (InnoDB Buffer Pool, sorgu optimizasyonu, Redis) kanalize etmek, sunucularınızın çok daha sağlıklı ve yüksek performansla çalışmasını sağlayacaktır.

Umarım bu rehber faydalı olmuştur. Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Query Cache kapatınca performansınızda gözle görülür bir iyileşme oldu mu? Ya da başka performans ipuçlarınız var mı? Sorularınız ve tecrübeleriniz için aşağıya yazmaktan çekinmeyin. Herkese sorunsuz sunucular!
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri