Herhangi bir zamanda yaklaşık 12 milyon satır içeren bir mysql masamız var. Tablonun boyutunu biraz yönetilebilir tutmak için eski verileri silmemiz gerekir.
Şu anda bu sorguyu bir cron işi kullanarak her gün gece yarısında çalıştırıyoruz:
DELETE FROM table WHERE endTime < '1393632001'
Sorgu son çalıştırıldığında 4.602.400 incelendi, 3 dakika sürdü ve CPU çatıdan geçti.
Eski verileri temizlerken CPU'nun, senkronize db bağlantılarının, disk ipucu derinliğinin vb. Makul olmayan bir şekilde yükselmesini önlemek için ne yapabiliriz?
Not: Sorgunun kullanım döngümüzde oldukça yetersiz bir zamanda gerçekleştiğini göreceksiniz. Sorgunun zamanlamasını her gün en düşük kullanım noktasında olacak şekilde değiştirdiğimizi varsayalım. Ayrıca, "endTime" üzerinde bir dizin yoktur ve ben çok düzenli olarak eklenen ve çok fazla arama bir ton veri var çünkü mümkünse bu şekilde tutmak tercih ederim.