Pregunta

Tenía una tabla con más de 70 millones de registros en una base de datos de SQL Server, dejé caer esa mesa (una cosa única) para liberar espacio en el disco, pero parece que el tamaño no cambió mucho. Veo que podría encoger el DB al mínimo.

¿Es esa la forma de hacerlo?

La última vez que hice un encogimiento usando SQL Server Management Studio, tardó unas horas en completarse. ¿Hay una manera mas rápida?

enter image description here

¿Fue útil?

Solución

Dejar caer una mesa liberará el espacio dentro de la base de datos, pero no liberará el espacio de nuevo a Windows. Eso requiere reducir el archivo de la base de datos. Sin embargo, no queremos el archivo de base de datos lleno. Queremos mucho espacio libre para que a medida que cargamos más datos no tengamos que hacer crecer el archivo de datos con frecuencia. Esto causa fragmentación del archivo de datos en los discos físicos.

En cuanto a hacer que la disminución sea más rápido, no, no hay forma de hacerlo más rápido. La reducción de la base de datos requiere leer y reescribir la mayoría de los datos dentro de la base de datos para que todo el espacio en blanco pueda liberarse del archivo de la base de datos al sistema operativo. Todo este IO lleva tiempo y causa muchos problemas de fragmentación.

Otros consejos

Querrá leer sobre DBCC Shrinkfile con mucho cuidado.

http://technet.microsoft.com/en-us/library/ms189493.aspx

En general, no desea reducir su base de datos al tamaño más pequeño posible en el disco. Desea dejar SQL Server con mucho espacio para que no tenga que crecer automáticamente. La respuesta aquí tiene mucha información útil:

https://stackoverflow.com/questions/4522719/to-dbcc-shrinkdatabase-or-not-to-dbcc-shrinkdatabase-thats-the-Question

El encogimiento es un procedimiento bastante costoso y puede tomar horas. Para usar el espacio de manera más eficiente, puede transferir tablas a un nuevo grupo de archivo con índices agrupados precedidos y soltar anteriormente. Personalmente, prefiero esto porque es más fácil hacer que este "encogimiento" en varios pasos y más predecible, por lo tanto, más fácil de planificar. Cuando comience a encoger DBCC, no sabe cuánto tiempo llevará.

Actualización (gracias a Mrdennny por señalar eso): este es un enfoque muy específico y solo se puede usar si tiene una base de datos de solo lectura (como el almacén de datos) porque mientras se copia datos en otra tabla no se permiten escrituras en esta tabla para la tabla para la tabla para la tabla aras de consistencia. Para ahorrar tiempo y obtener el rendimiento máximo de TI, puede cambiar la base de datos al modelo de recuperación simple y usar Seakock Sugerencia: esto permitirá que el sistema use un registro mínimo y haga mucho menos escritos en el registro de transacciones.

Mira este artículo: http://itknowledgeExchange.techtarget.com/sql-server/deleting-lob-data-and-shrinking-tatabase/

"La solución que se nos ocurrió fue bastante simple. Haga la eliminación de la base de datos como de costumbre. Luego respalda y restaura la base de datos. Luego, haz el cambio, seguido de la reconstrucción de los índices agrupados para solucionar el problema de fragmentación que introducirá el cambio "

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top