Tengo una tabla de notificaciones que contiene alrededor de 100 millones de filas de host en Amazon RDS con 1000 IOPS, y quiero eliminar esas filas de más de un mes.
Si lo hago DELETE FROM NOTIFICATION WHERE CreatedAt < DATE_SUB(CURDATE(), INTERVAL 30 day);, se tomarán todos los IOPS, el proceso tomará horas y no se pueden insertar muchas entradas nuevas debido a que "Se excedió el tiempo de espera de bloqueo; intente reiniciar la transacción".
Estaba tratando de hacer la forma descrita aquí: http://mysql.rjweb.org/doc.php/deletebig Sin embargo, estoy usando UUID en lugar de ID de incremento.
¿Cuál es la forma correcta y eficiente de eliminar esas filas sin afectar la inserción / actualización de nuevos datos?

Respuestas:
Haga una tabla temporal, enciéndala y extráigala, y copie los datos de los últimos 30 días.
En tus horas libres, deja caer la vieja mesa
Aquí están las ventajas de hacer DELETEs como este
NOTIFICATIONse vacía rápidamente mediante el cambio en una tabla vacía.NOTIFICATIONestá disponible de inmediato para nuevos INSERTNOTIFICATIONmientras se pueden realizar nuevos INSERT.NOTIFICATIONno interfiere con los nuevos INSERTDarle una oportunidad !!!
fuente
ALTER TABLE ENGINE=InnoDBy reducir la tabla.Mi favorito es pt-archiver de Percona Toolkit. Se encarga de la carga de MySQL, el retraso de replicación.
fuente
cree la tabla notificación_temp como select * desde la notificación donde CreatedAt <DATE_SUB (CURDATE (), INTERVAL 30 day);
notificación de caída de tabla;
NOMBRAR notificación_temp A NOTIFICACIÓN;
fuente
CREATE TABLEse pierden.RENAME TABLE notification_temp ...