Merhaba arkadaşlar, bugün sizlere özellikle MariaDB 10.1.7 ve MySQL 5.7.20 sonrası sürümlerde artık önerilmeyen, hatta performans sorunlarına yol açabilen Query Cache'i nasıl kontrol edeceğinizi ve tamamen nasıl devre dışı bırakacağınızı anlatacağım. Bu işlem, modern sunucu yapılarında daha stabil ve yüksek performanslı bir veritabanı hizmeti almanıza yardımcı olacaktır.
Query Cache Nedir ve Neden Kapatmalıyız?
Query Cache (Sorgu Önbelleği), aynı SELECT sorgusu tekrar çalıştırıldığında sonucu önbellekten döndürerek hız kazandırmayı amaçlayan eski bir özellikti. Ancak, özellikle yüksek yazma (UPDATE/INSERT) oranı olan sistemlerde, bu önbelleği sürekli temizlemek (invalidate etmek) ciddi bir kilitlenme (contention) kaynağı oldu. Geliştiriciler de bu nedenle bu özelliği kullanımdan kaldırdı (deprecated). Benim sunucularda genelde ilk yaptığım işlemlerden biridir, siz de güvenle kapatabilirsiniz.
Mevcut Durumu Kontrol Etme
Öncelikle Query Cache'in sunucunuzda aktif olup olmadığını ve durumunu kontrol edelim. MariaDB veya MySQL komut satırına bağlanıp aşağıdaki komutu çalıştırmanız yeterli.
İlk komut, önbelleğin durumunu gösterir. Eğer sonuç ON veya DEMAND ise aktif demektir. OFF ise zaten kapalıdır.
İkinci komut ise ayrılan önbellek boyutunu gösterir. Varsayılan değer genellikle 1M (1 Megabyte) civarındadır. Boyutun 0 olması, özelliğin etkisiz olduğu anlamına gelir.
Daha detaylı bir durum raporu almak için aşağıdaki komutu kullanabilirsiniz:
Query Cache'i Kalıcı Olarak Devre Dışı Bırakma
Şimdi gelelim asıl işleme. Query Cache'i tamamen kapatmak için iki ana değişkeni yapılandırmanız gerekiyor: query_cache_type ve query_cache_size.
Bu ayarı kalıcı yapmak için, MariaDB/MySQL'in yapılandırma dosyasını düzenlemeliyiz. Bu dosya genellikle /etc/mysql/my.cnf, /etc/my.cnf veya /etc/mysql/mariadb.conf.d/50-server.cnf yolunda olabilir. Benim tercihim /etc/mysql/mariadb.conf.d/50-server.cnf dosyasıdır.
Öncelikle dosyayı bir editörle açalım (sudo yetkisi gerektiğine çok dikkat edin):
Dosyanın içinde, genellikle [mysqld] bölümünün altında, aşağıdaki satırları bulun veya ekleyin:
query_cache_type = 0 özelliği tamamen kapatır. query_cache_size = 0 ise önbellek için bellek ayrılmasını engeller. İkisini birlikte kullanmak en garanti yöntemdir.
Değişiklikleri kaydettikten sonra (nano için Ctrl+X, sonra Y ve Enter), MariaDB/MySQL servisini yeniden başlatarak ayarların etkin olmasını sağlayın.
Servis yeniden başladıktan sonra, tekrar bağlanıp kontrol komutlarını çalıştırarak her iki değişkenin de OFF ve 0 olduğunu doğrulayın.
Son Kontrol ve Son Sözler
Her şeyin yolunda gittiğinden emin olmak için son bir kontrol yapalım:
Çıktıda query_cache_type değeri OFF, query_cache_size değeri ise 0 olmalıdır.
İşte bu kadar! Artık veritabanı sunucunuz, modern uygulamalar için daha uygun ve daha az kaynak çekişmesi yaşayan bir yapıda çalışıyor. Özellikle MariaDB 10.x ve MySQL 8.0 kullanan arkadaşların bu ayarı mutlaka yapmasını tavsiye ederim.
Peki siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Query Cache kapatıldıktan sonra gözlemlediğiniz bir performans farkı oldu mu? Ya da farklı bir optimizasyon yönteminiz var mı? Sorularınız ve tecrübeleriniz için aşağıya yazmaktan çekinmeyin. Hep birlikte öğrenelim.
Query Cache (Sorgu Önbelleği), aynı SELECT sorgusu tekrar çalıştırıldığında sonucu önbellekten döndürerek hız kazandırmayı amaçlayan eski bir özellikti. Ancak, özellikle yüksek yazma (UPDATE/INSERT) oranı olan sistemlerde, bu önbelleği sürekli temizlemek (invalidate etmek) ciddi bir kilitlenme (contention) kaynağı oldu. Geliştiriciler de bu nedenle bu özelliği kullanımdan kaldırdı (deprecated). Benim sunucularda genelde ilk yaptığım işlemlerden biridir, siz de güvenle kapatabilirsiniz.
Öncelikle Query Cache'in sunucunuzda aktif olup olmadığını ve durumunu kontrol edelim. MariaDB veya MySQL komut satırına bağlanıp aşağıdaki komutu çalıştırmanız yeterli.
SQL:
SHOW VARIABLES LIKE 'query_cache_type';
SHOW VARIABLES LIKE 'query_cache_size';
İlk komut, önbelleğin durumunu gösterir. Eğer sonuç ON veya DEMAND ise aktif demektir. OFF ise zaten kapalıdır.
İkinci komut ise ayrılan önbellek boyutunu gösterir. Varsayılan değer genellikle 1M (1 Megabyte) civarındadır. Boyutun 0 olması, özelliğin etkisiz olduğu anlamına gelir.
Daha detaylı bir durum raporu almak için aşağıdaki komutu kullanabilirsiniz:
SQL:
SHOW STATUS LIKE 'Qcache%';
Şimdi gelelim asıl işleme. Query Cache'i tamamen kapatmak için iki ana değişkeni yapılandırmanız gerekiyor: query_cache_type ve query_cache_size.
Bu ayarı kalıcı yapmak için, MariaDB/MySQL'in yapılandırma dosyasını düzenlemeliyiz. Bu dosya genellikle /etc/mysql/my.cnf, /etc/my.cnf veya /etc/mysql/mariadb.conf.d/50-server.cnf yolunda olabilir. Benim tercihim /etc/mysql/mariadb.conf.d/50-server.cnf dosyasıdır.
Öncelikle dosyayı bir editörle açalım (sudo yetkisi gerektiğine çok dikkat edin):
Bash:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Dosyanın içinde, genellikle [mysqld] bölümünün altında, aşağıdaki satırları bulun veya ekleyin:
INI:
[mysqld]
# Query Cache'i tamamen devre dışı bırak
query_cache_type = 0
query_cache_size = 0
query_cache_type = 0 özelliği tamamen kapatır. query_cache_size = 0 ise önbellek için bellek ayrılmasını engeller. İkisini birlikte kullanmak en garanti yöntemdir.
Değişiklikleri kaydettikten sonra (nano için Ctrl+X, sonra Y ve Enter), MariaDB/MySQL servisini yeniden başlatarak ayarların etkin olmasını sağlayın.
Bash:
sudo systemctl restart mariadb # MariaDB için
# veya
sudo systemctl restart mysql # MySQL için
Servis yeniden başladıktan sonra, tekrar bağlanıp kontrol komutlarını çalıştırarak her iki değişkenin de OFF ve 0 olduğunu doğrulayın.
Her şeyin yolunda gittiğinden emin olmak için son bir kontrol yapalım:
SQL:
SHOW VARIABLES WHERE Variable_name IN ('query_cache_type', 'query_cache_size');
Çıktıda query_cache_type değeri OFF, query_cache_size değeri ise 0 olmalıdır.
İşte bu kadar! Artık veritabanı sunucunuz, modern uygulamalar için daha uygun ve daha az kaynak çekişmesi yaşayan bir yapıda çalışıyor. Özellikle MariaDB 10.x ve MySQL 8.0 kullanan arkadaşların bu ayarı mutlaka yapmasını tavsiye ederim.
Peki siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Query Cache kapatıldıktan sonra gözlemlediğiniz bir performans farkı oldu mu? Ya da farklı bir optimizasyon yönteminiz var mı? Sorularınız ve tecrübeleriniz için aşağıya yazmaktan çekinmeyin. Hep birlikte öğrenelim.