Obtenga MS SQL Server para liberar espacio en disco

9

Una tabla de base de datos mal administrada se ha vuelto enorme. Más de 48 conciertos de discos huérfanos. Estoy tratando de limpiarlo y volver a poner mi disco duro peligrosamente lleno en un estado normal. Eliminaré aproximadamente 400 millones de registros de esta tabla. Esto se está ejecutando mientras escribo. Noto que no veo ninguna caída en el espacio de mi disco duro, pero veo que la memoria cae en las consultas de la tabla del sistema, estoy corriendo para obtener el tamaño de la tabla. La base de datos está utilizando el "Modelo de recuperación simple".

Hay muchas preguntas similares a esta con respuestas que dicen que necesita reducir la base de datos. Pero continúan explicando qué tan malo / aterrador es esto debido a datos fragmentados, etc.

  1. Dado que la base de datos no debe ser de este tamaño. ¿Todavía es malo para mí encogerlo?
  2. Esta es una base de datos de producción. Si lo reduzco, ¿causará tiempo de inactividad o bloqueará la base de datos?
  3. En SQL Server Management Studio tiene dos opciones para reducir, la base de datos o los archivos. Dada mi situación, ¿cuál sería la mejor opción?
  4. ¿Existe una regla sobre el porcentaje de espacio libre que debe tener un DB?

Incluso leer la descripción de la etiqueta de shrink hace que no quiera hacerlo. ¿Hay otra manera?

Jackncoke
fuente

Respuestas:

14

Eliminaré aproximadamente 400 millones de registros de esta tabla.

Con suerte, lo está haciendo en trozos , para evitar el registro de transacciones hinchado.

tenga en cuenta que no veo ninguna caída en el espacio de mi disco duro

No lo hará, ya que debe reducir explícitamente el archivo de la base de datos para liberar espacio. Simplemente borrando los registros, el servidor SQL no liberará el espacio al SO .

  1. Dado que la base de datos no debe ser de este tamaño. ¿Todavía es malo para mí encogerlo?

En general, es una mala práctica ya que las bases de datos deben estar correctamente dimensionadas. Si está 100% seguro de que su base de datos NO volverá a ser de este tamaño, está bien que reduzca la base de datos (en su caso) .

  1. Esta es una base de datos de producción. Si lo reduzco, ¿causará tiempo de inactividad o bloqueará la base de datos?

La reducción de una base de datos es muy intensiva en IO. Es aconsejable reducir el uso DBCC SHRINKFILEdurante la ventana de mantenimiento o cuando hay una actividad mínima.

  1. En Management Studio tiene dos opciones, Base de datos o Archivos. Dada mi situación, ¿cuál sería la mejor opción?

Debe usar TSQL para hacer el encogimiento. (ya que usted preguntó, reducir el ARCHIVO es el camino a seguir en lugar de la base de datos). Puede usar reducir la base de datos en fragmentos: secuencia de comandos tsql para reducir los fragmentos.

Recuerda que cuando encoges, estás fragmentando tus índices.

  1. ¿Existe una regla sobre el porcentaje de espacio libre que debe tener un DB?

Puede consultar el artículo Estimación de requisitos de espacio en disco para bases de datos . No hay una regla de arreglo, debe tener en cuenta cómo se espera que crezca su base de datos. También debe tener en cuenta el crecimiento automático de sus bases de datos .

Referencias: ¿Por qué el registro de transacciones sigue creciendo o se queda sin espacio?

Kin Shah
fuente
5

tiene buenas razones para preocuparse ya que la base de datos se reduce en SQL Server a menudo "apesta". Paul Randal, el jefe del motor de almacenamiento en SQL 2005 declaró: ShrinkDB está escrito muy mal. Encontrará espacio vacío tomando los datos al final y colocándolos al principio y siga haciendo esto hasta que tenga espacio libre al 'final' de los archivos DB. En este punto, puede liberar el espacio de SQL Server y devolverlo al sistema operativo. Está invirtiendo efectivamente los archivos de su base de datos, por lo que generalmente verá una fragmentación masiva. Puede leer sobre sus puntos de vista en esta publicación de blog o en este video de MCM Internals

Como con todo, primero debes probarlos en tu entorno. Una mejor manera de hacerlo es mover datos a un grupo de archivos diferente. Puede hacer una reconstrucción del índice en línea con el índice agrupado y luego reindexar en el nuevo grupo de archivos. Luego puede soltar el viejo y liberar el espacio y casi no tener fragmentación. Tenga en cuenta que esto tomará aproximadamente un 120% de espacio adicional mientras se trabaja a través de él. El problema con esto es que necesita incluso espacio libre adicional que parece que podría no tener. Esta es una característica empresarial.

Si el espacio libre es tan importante, entonces es posible que tenga que morder la bala y reducir lentamente la DB un trozo pequeño a la vez para evitar procesos de larga ejecución. Tenga en cuenta que sus datos estarán muy fragmentados y querrá reindexar todo nuevamente. Tenga en cuenta que después de reindexar todo, aumentará un poco su espacio utilizado y volverá a tener espacio libre adicional. Vea el consejo de Brent aquí .

En cuanto a cuánto espacio libre es bueno para usted, es una cuestión de cuánto puede permitirse las actividades de fragmentación y crecimiento de archivos. Con IFI habilitado, el crecimiento del archivo es casi instantáneo pero aún se obtiene fragmentación. Una buena regla general es preasignar tanto espacio como creas que necesitarás, o monitorear el crecimiento y ajustar los fragmentos periódicamente si es necesario. Esto mantiene baja la fragmentación física.

También el crecimiento del archivo de registro es mucho más importante. Los archivos de registro adicionales pueden causar fragmentación de VLF. Esto hace que sus restauraciones sean mucho más lentas y puede afectar el punto de control / truncarse. Aquí hay algunos riesgos de rendimiento que toma con un registro fragmentado. Haz un DBCC LOGINFO();en cada base de datos. Intente mantener el número alrededor de 50 por Kim Tripp, pero si ve cientos, tiene problemas de fragmentación, lo que significa que sus archivos de registro tuvieron que crecer para admitir las operaciones. Una buena manera de ver cuál debería ser su archivo de registro según Paul Randal es dejarlo crecer durante una semana y reindexarlo. Ese podría ser un buen punto, tal vez pueda tirar un poco más de espacio libre allí por si acaso. Asegúrese de que sus registros no estén fragmentados con DBCC LOGINFO (); de nuevo y si lo son, significa que crecieron mucho. Reducir y volver a expandir el archivo de registro utilizandoeste método .

Ali Razeghi
fuente
2

Está bien que lo reduzca lo suficiente para asegurarse de que su servidor no se bloquee en la cantidad de tiempo que le toma evaluar sus necesidades de almacenamiento y planificar adecuadamente los servicios de hardware / hosting (consulte la pregunta 4). No, no lo bloqueará. Ver restricciones . Reduzca la base de datos porque hace las cosas simples.

Sugiero contratar la experiencia para realizar el estudio y redactar el plan.

usuario41207
fuente