Eliminar a granel (truncar frente a eliminar)

Tenemos una table con más de 150 millones de loggings. Necesitamos limpiar / eliminar todas las filas. La operación de eliminación demoraría para siempre debido a que está escribiendo en t-logs y no podemos cambiar nuestro model de recuperación para toda la database. Hemos probado la opción de tabla truncada.

Lo que nos dimos count de que truncar desasigna las páginas de la tabla, y si no estoy equivocado las pone a disposition para su reutilización, pero no networkinguce el tamaño de la database automáticamente. Entonces, si queremos networkingucir el tamaño de la database, realmente tendríamos que ejecutar el command shrink db luego de truncar la tabla.

Es este procedimiento normal? ¿Hay algo de lo que necesitemos ser cuidadosos o conscientes, o hay mejores alternativas?

truncate es lo que estás buscando. Si necesita adelgazar la database posteriormente, ejecute una contracción.

Esta reference de MSDN (si está hablando de T-SQL) compara el detrás de escena de eliminar filas versus truncar.

" Eliminar todas las filas " … ¿no sería preferible DROP TABLE (y volver a crear una vacía con el mismo esquema / índices)? (Personalmente me gusta "nuevos comienzos" ;-))

Esta TRUNCATE TABLE también está bien, y sí, es posible que DBCC SHRINKFILE se requiera después si desea recuperar el espacio.

Dependiendo del tamaño de la database completa, la contracción puede tardar un time; He descubierto que va más rápido si se encoge en pedazos más pequeños, en lugar de tratar de recuperarlo todo de una vez.

Una cosa para recordar con Truncate Table (y drop table) es que esto no funcionará si alguna vez tiene keys externas que hacen reference a la tabla.

Como se señaló, si no puede usar truncar o soltar

 SELECT 1 WHILE @@ROWCOUNT <> 0 DELETE TOP (100000) MyTable 

Tiene una solución normal (truncar + contraer db) para eliminar todos los loggings de una tabla.

Como señaló Irwin. El command TRUNCATE no funcionará mientras se hace reference a él mediante una restricción de key externa. Entonces, primero suelte las restricciones, trunque la tabla y vuelva a crear las restricciones.

Si le preocupa el performance y esta es una rutina regular para su sistema. Es posible que desee considerar la posibilidad de mover esta tabla a su propio file de datos , ¡y luego ejecutar encoger solo contra el file de datos de destino!