เรามีตาราง mysql ที่เวลาประมาณ 12 ล้านแถว เราจำเป็นต้องลบข้อมูลเก่าเพื่อให้ขนาดของตารางค่อนข้างจัดการได้
ตอนนี้เรากำลังเรียกใช้แบบสอบถามนี้ทุกวันเวลาเที่ยงคืนโดยใช้งาน cron:
DELETE FROM table WHERE endTime < '1393632001'
ครั้งล่าสุดที่มีการเรียกใช้แบบสอบถามตรวจสอบ 4,602,400 ใช้เวลา 3 นาทีและ CPU ดำเนินการผ่านหลังคา
เราสามารถทำอะไรได้บ้างเพื่อป้องกันไม่ให้ CPU, การเชื่อมต่อฐานข้อมูลแบบซิงโครนัส, ความลึกของคิวดิสก์และอื่น ๆ จากการ spiking อย่างไม่มีเหตุผลในขณะที่ยังล้างข้อมูลเก่า
PS: คุณจะสังเกตเห็นว่าการค้นหาเกิดขึ้นจริงในเวลาที่ไม่เหมาะสมพอสมควรในรอบการใช้งานของเรา สมมติว่าเราได้เปลี่ยนเวลาของการค้นหาให้เกิดขึ้นที่จุดต่ำสุดของการใช้งานในแต่ละวัน นอกจากนี้ยังไม่มีดัชนีใน "endTime" และฉันต้องการเก็บไว้อย่างนั้นถ้าเป็นไปได้เพราะมีการแทรกข้อมูลจำนวนมากเป็นประจำและไม่ต้องค้นหามากนัก