¿Cómo puedo acelerar las eliminaciones de una tabla de base de datos grande?

Este es el problema que estoy tratando de resolver: recientemente completé un nuevo diseño de la capa de datos que me permite equilibrar la carga de mi base de datos en múltiples fragmentos. Para mantener los fragmentos equilibrados, necesito poder migrar datos de un fragmento a otro, lo que implica copiar desde el fragmento A al fragmento B, y luego eliminar los registros del fragmento A. Pero tengo varias tablas que son muy grandes. y tiene muchas claves externas apuntadas a ellas, por lo que eliminar un solo registro de la tabla puede llevar más de un segundo.

En algunos casos, necesito eliminar millones de registros de las tablas, y me lleva demasiado tiempo ser práctico.

Desactivar claves foráneas no es una opción. Eliminar grandes lotes de filas tampoco es una opción porque se trata de una aplicación de producción y los grandes borrados bloquean demasiados recursos, lo que provoca fallos. Estoy usando Sql Server, y sé sobre tablas particionadas, pero las restricciones de partición (y las tarifas de licencia para la edición empresarial) son tan poco realistas que no son posibles.

Cuando comencé a trabajar en este problema, pensé que la parte difícil sería escribir el algoritmo que determina cómo eliminar filas desde el nivel de hoja hasta la parte superior del modelo de datos, para que no se violen las restricciones de clave externa en el camino. Pero resolver ese problema no me sirvió, ya que lleva semanas eliminar los registros que deben desaparecer de la noche a la mañana.

Ya incorporé una forma de marcar los datos como virtualmente eliminados, por lo que en lo que respecta a la aplicación, los datos se han ido, pero todavía estoy tratando con archivos de datos grandes, copias de seguridad grandes y consultas más lentas debido al gran tamaño de las mesas.

¿Algunas ideas? Ya he leído publicaciones antiguas relacionadas aquí y no he encontrado nada que ayude.

Respuestas a la pregunta(7)

Su respuesta a la pregunta