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.

MySQL Event Scheduler ile Düzenli Olarak Tablo İstatistiklerini Güncelleme (ANALYZE TABLE)

codexor

Üye
Katılım
14 Mart 2026
Mesajlar
43
Merhaba arkadaşlar, bugün sizlere özellikle yoğun yazma işlemlerinin olduğu veritabanlarında, sorgu performansını korumak için çok faydalı bir yöntemden bahsedeceğim. MySQL'in Event Scheduler özelliğini kullanarak, belirli tablolarınızın istatistiklerini düzenli olarak nasıl otomatik güncelleyeceğinizi (ANALYZE TABLE) anlatacağım. Bu işlem, sorgu optimize edicinin (query optimizer) daha doğru kararlar vermesini sağlayarak, zamanla yavaşlayan sorgularınızı hızlandıracaktır.

🔍 Neden ANALYZE TABLE Gerekli?

MySQL, bir tabloya ne kadar veri eklerseniz ekleyin, bu verilerin dağılımı ve istatistikleri hakkında tahminlerde bulunur. Özellikle çok sık ekleme/silme/güncelleme yapılan tablolarda, bu tahminler gerçek durumdan sapar. Sonuç olarak, optimize edici yanlış indeks seçebilir veya verimsiz sorgu planları oluşturabilir. `ANALYZE TABLE` komutu, bu istatistikleri yeniden hesaplar ve optimize ediciyi taze bilgilerle besler. Manuel yapmak yerine olay zamanlayıcı (Event Scheduler) ile otomatikleştirmek, unutulma riskini ortadan kaldırır.

⚙️ Event Scheduler'ı Aktif Etme

İlk adım olarak, sunucunuzda Event Scheduler'ın çalıştığından emin olmalısınız. Genelde varsayılan olarak kapalı gelebilir. Kontrol etmek ve açmak için aşağıdaki komutları kullanabilirsiniz.

SQL:
-- Event Scheduler durumunu kontrol et
SHOW VARIABLES LIKE 'event_scheduler';

-- Eğer OFF ise, çalıştırmak için (Sunucu yeniden başlayınca kapanır)
SET GLOBAL event_scheduler = ON;

-- Kalıcı olarak açmak için my.cnf (veya my.ini) dosyasına ekleyin
-- [mysqld]
-- event_scheduler=ON

📅 ANALYZE TABLE Event'ini Oluşturma

Şimdi sıra, istatistiklerini güncellemek istediğimiz tablo için bir olay (event) oluşturmaya geldi. Diyelim ki `forum_mesajlari` adlı çok aktif tablomuzun istatistiklerini her gün gece 03:00'te güncellemek istiyoruz.

SQL:
DELIMITER $$

CREATE EVENT IF NOT EXISTS event_forum_mesajlari_analyze
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_DATE + INTERVAL 3 HOUR
COMMENT 'forum_mesajlari tablosunun istatistiklerini günceller'
DO
BEGIN
    ANALYZE TABLE forum_mesajlari;
END$$

DELIMITER ;

⚠️ Dikkat Edilmesi Gerekenler

Bu işlem tabloyu kilitler (MyISAM için tamamen, InnoDB için çoğunlukla okuma/yazma işlemlerini kısa süreliğine bekletir). Bu yüzden trafiğin en düşük olduğu zamanı seçmek çok önemli. Benim sunucularda genelde gece 02:00-04:00 arasını tercih ederim.

Ayrıca, çok büyük tablolarda (`ANALYZE TABLE`) işlemi biraz zaman alabilir ve sunucu yükünü artırabilir. Bu durumda, daha seyrek aralıklarla (örneğin haftada bir) çalıştırmayı düşünebilirsiniz.

🔧 Birden Fazla Tablo ve Gelişmiş Senaryo

Eğer birden fazla tablonuz varsa, hepsini tek bir event içinde toplayabilirsiniz. Hatta işlemin başarılı olup olmadığını loglayan bir tablo bile oluşturabilirsiniz. İşte basit bir örnek:

SQL:
DELIMITER $$

CREATE EVENT IF NOT EXISTS event_coklu_analyze
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_DATE + INTERVAL 3 HOUR + INTERVAL 30 MINUTE
DO
BEGIN
    ANALYZE TABLE forum_mesajlari, forum_konulari, kullanici_profilleri;
    -- ANALYZE TABLE sonucunu bir log tablosuna yazmak isteyebilirsiniz.
END$$

DELIMITER ;

✅ Oluşturulan Event'leri Yönetme

Event'lerinizi listelemek, durdurmak veya silmek için aşağıdaki komutları kullanabilirsiniz.

SQL:
-- Tüm event'leri listele
SHOW EVENTS FROM veritabani_adiniz;

-- Bir event'in çalışma planını değiştirme (Örnek: 2 günde bir)
ALTER EVENT event_forum_mesajlari_analyze
ON SCHEDULE EVERY 2 DAY;

-- Bir event'i geçici olarak durdurma
ALTER EVENT event_forum_mesajlari_analyze DISABLE;

-- Bir event'i tamamen silme
DROP EVENT IF EXISTS event_forum_mesajlari_analyze;

Sonuç olarak, bu yöntem özellikle büyük ve dinamik forum siteleri, e-ticaret veritabanları gibi ortamlarda "neden sorgularım yavaşladı?" sorusuna basit ve etkili bir çözüm sunar. Performans düşüşlerini proaktif olarak engellemek sistem yöneticisinin işidir.

Peki siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Farklı bir yöntem veya optimizasyon ipucunuz var mı? Ya da bu event'leri hangi sıklıkta çalıştırıyorsunuz? Deneyimlerinizi paylaşın. Sorusu olan arkadaşlar aşağıya yazsın, elimden geldiğince yardımcı olmaya çalışırım.
 

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