Abbiamo una tabella mysql che in ogni dato momento ha circa 12 milioni di righe. Dobbiamo eliminare i vecchi dati per mantenere un po 'gestibili le dimensioni della tabella.
In questo momento stiamo eseguendo questa query ogni giorno, a mezzanotte, utilizzando un processo cron:
DELETE FROM table WHERE endTime < '1393632001'
L'ultima volta che la query è stata eseguita ha esaminato 4.602.400, ha impiegato oltre 3 minuti e la CPU ha superato il tetto.
Cosa possiamo fare per evitare che la CPU, le connessioni db sincrone, la profondità dell'indicazione del disco, ecc., Si spargano irragionevolmente pur cancellando i vecchi dati?
PS: Noterai che la query si sta effettivamente verificando in un momento abbastanza inopportuno nel nostro ciclo di utilizzo. Supponiamo che abbiamo già spostato i tempi della query in modo che si verifichino nel punto di utilizzo più basso ogni giorno. Inoltre, non esiste alcun indice su "endTime" e preferirei mantenerlo in questo modo, se possibile, perché ci sono tonnellate di dati che vengono inseriti molto regolarmente e non c'è molta ricerca.