none
El archivo .mdf no reduce su tamaño luego de borrar la mayor cantidad de registros RRS feed

  • Pregunta

  • Hola como estan

    Tengo una base de datos "aún en desarrollo", la cual fue alimenda con miles de registros para hacer pruebas confiables en la fase de desarrollo. En esa oportunidad la tabla tenia mas de 40.000 imagenes usando campos FileStream. Ahora se ha decidido remover dichos campos y almacenar las URL de las imagnes, por lo que se removieron todos campos, los FileGroups y demas relaciones con FileStream.

    Anteriormente al hacer un back up, la base de datos pesaba cerca de 2GB, ahora pesa solo 250mn aproximadamente. Lo extraño es que el tamaño del archivo .mdf no ha bajado para nada, a que se debe esto y como puedo corregirlo?

    Como menciono es una base de datos aun de pruebas, pero se han insertado miles de registros lo cual fue un proceso tedioso, por lo que no se quiere tener que eliminar toda la data, solo quiero remover ese exceso que tenia con las imagenes de manera que cuando se terminen las pruebas la base de datos este depurada y mediante unos cuantos scripts pudieramos limpiar las tablas faltantes.

    Saludos

    jueves, 27 de octubre de 2016 13:49

Respuestas

  • Hola SQL reserva el espacio de la base de datos y deja ese tamaño fijo, si quieres hacerla mas pequeña en las propiedades cambia la propiedad Auto Shrink a True o  utiliza  el siguiente comando especificando el porcentaje de espacio que quieres dejar libre

    DBCC SHRINKDATABASE (TuBaseDatos, 10);

    • Propuesto como respuesta Carlos Martínez Tercero jueves, 27 de octubre de 2016 14:24
    • Marcado como respuesta AdyIr jueves, 27 de octubre de 2016 17:13
    jueves, 27 de octubre de 2016 14:09
  • Saludos

    Si ya eliminaste los filestream no deberia de ser problema, debes de usar un shrink para recuperar espacio como nota no es una operacion recomendada normalmente ni hagas uso habitual de la misma pues causa una defragmentacion de los indices de tu base de datos, es recomendado que hagas un plan de mantenimiento de indices y estadisticas de la base despues del uso de un shrink.

    Lo que ahora tienes es espacio reservado o sea espacio vacio que sql esta solicitando al sistema operativo y que no esta dolviendo y por lo tanto aparece como mayor al realmente usado, no es algo malo y en recomendado en general.

    https://msdn.microsoft.com/en-us/library/ms189035.aspx

    • Marcado como respuesta AdyIr jueves, 27 de octubre de 2016 17:14
    jueves, 27 de octubre de 2016 14:12
  • AdyIr,

    Entiendo que la funcionalidad de almacenamiento FileStream permite almacenar los datos binarios en el sistema de archivos y no en la base de datos (o para entenderlo mejor fuera de la base de datos), de hecho, el tamaño inicial (2GB) del archivo de respaldo (BACKUP) es porque "adjunta" los datos binarios. Al retirar el almacenamiento FILESTREAM no es de esperar que disminuya el tamaño de la base de datos porque nunca se consideró el tamaño de las imágenes.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    • Editado Willams Morales jueves, 27 de octubre de 2016 14:28
    • Marcado como respuesta AdyIr jueves, 27 de octubre de 2016 17:13
    jueves, 27 de octubre de 2016 14:27

Todas las respuestas

  • Hola SQL reserva el espacio de la base de datos y deja ese tamaño fijo, si quieres hacerla mas pequeña en las propiedades cambia la propiedad Auto Shrink a True o  utiliza  el siguiente comando especificando el porcentaje de espacio que quieres dejar libre

    DBCC SHRINKDATABASE (TuBaseDatos, 10);

    • Propuesto como respuesta Carlos Martínez Tercero jueves, 27 de octubre de 2016 14:24
    • Marcado como respuesta AdyIr jueves, 27 de octubre de 2016 17:13
    jueves, 27 de octubre de 2016 14:09
  • Saludos

    Si ya eliminaste los filestream no deberia de ser problema, debes de usar un shrink para recuperar espacio como nota no es una operacion recomendada normalmente ni hagas uso habitual de la misma pues causa una defragmentacion de los indices de tu base de datos, es recomendado que hagas un plan de mantenimiento de indices y estadisticas de la base despues del uso de un shrink.

    Lo que ahora tienes es espacio reservado o sea espacio vacio que sql esta solicitando al sistema operativo y que no esta dolviendo y por lo tanto aparece como mayor al realmente usado, no es algo malo y en recomendado en general.

    https://msdn.microsoft.com/en-us/library/ms189035.aspx

    • Marcado como respuesta AdyIr jueves, 27 de octubre de 2016 17:14
    jueves, 27 de octubre de 2016 14:12
  • Por favor no hagas eso de auto-shrink true... nunca   
    jueves, 27 de octubre de 2016 14:25
  • AdyIr,

    Entiendo que la funcionalidad de almacenamiento FileStream permite almacenar los datos binarios en el sistema de archivos y no en la base de datos (o para entenderlo mejor fuera de la base de datos), de hecho, el tamaño inicial (2GB) del archivo de respaldo (BACKUP) es porque "adjunta" los datos binarios. Al retirar el almacenamiento FILESTREAM no es de esperar que disminuya el tamaño de la base de datos porque nunca se consideró el tamaño de las imágenes.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    • Editado Willams Morales jueves, 27 de octubre de 2016 14:28
    • Marcado como respuesta AdyIr jueves, 27 de octubre de 2016 17:13
    jueves, 27 de octubre de 2016 14:27
  • tanto como nunca...  por supuesto es una opción no recomendable en bases de datos en producción, en caso de equipos de desarrollo y bases de datos en proceso de desarrollo o pruebas te puede ahorrar algunos dolores de cabeza, sobre si tienes poco espacio.
    jueves, 27 de octubre de 2016 14:32
  • Y crear una espectativa poco realista del desempenio que puede tener la instancia al estar fragmentando constantemente e invalidando los planes de ejecucion creando un ambiente inestable sobre el cual trabajar y desarrollar dando como resultadoo posibles queries que no se comporten de manera adecuada.

    El simple hecho de decir que es de dev y por eso es factible no justifica este hecho y algunas workshop luego solo clonan servidores y los ponen en produccion llevando estas malas practicas a produccion.

    jueves, 27 de octubre de 2016 14:36
  • Hola como estan

    Tengo una base de datos "aún en desarrollo", la cual fue alimenda con miles de registros para hacer pruebas confiables en la fase de desarrollo. En esa oportunidad la tabla tenia mas de 40.000 imagenes usando campos FileStream. Ahora se ha decidido remover dichos campos y almacenar las URL de las imagnes, por lo que se removieron todos campos, los FileGroups y demas relaciones con FileStream.

    Anteriormente al hacer un back up, la base de datos pesaba cerca de 2GB, ahora pesa solo 250mn aproximadamente. Lo extraño es que el tamaño del archivo .mdf no ha bajado para nada, a que se debe esto y como puedo corregirlo?

    Como menciono es una base de datos aun de pruebas, pero se han insertado miles de registros lo cual fue un proceso tedioso, por lo que no se quiere tener que eliminar toda la data, solo quiero remover ese exceso que tenia con las imagenes de manera que cuando se terminen las pruebas la base de datos este depurada y mediante unos cuantos scripts pudieramos limpiar las tablas faltantes.

    Saludos


    Hola, gracias a todos los que respondieron... Ya veo que simplemente estaba dando golpes inncesarios...
    jueves, 27 de octubre de 2016 17:15