Esta pregunta se hace en varias formas aquí, pero la pregunta se reduce a:
Sé que reducir una base de datos es arriesgado. En este caso, eliminé tantos datos y nunca los volveré a usar.
- ¿Cómo puedo reducir mi base de datos? ¿Qué archivos encojo?
- ¿Cuáles deberían ser mis consideraciones al hacer esto?
- ¿Debo hacer algo después?
- ¿Qué pasa si es una gran base de datos? ¿Puedo reducirlo en incrementos más pequeños?
sql-server
shrink
Mike Walsh
fuente
fuente
Respuestas:
Algunas advertencias iniciales:
Si ha leído sobre las preocupaciones y los riesgos y aún necesita hacer esta reducción porque liberó una cantidad significativa de espacio, es de esperar que el resto de esta respuesta lo ayude. Pero tenga en cuenta los riesgos.
Hay dos enfoques principales que dos consideramos aquí:
1.) Reducir Sí, realice la reducción real : considere usar en
DBCC SHRINKFILE
lugar deDBCC SHRINKDATABASE
, usted tiene más control sobre lo que se reduce y cómo. Esto va a causar una degradación de rendimiento con seguridad - es una gran operación de hacer un montón de IO. Potencialmente, puede escapar con reducciones repetidas a un tamaño objetivo que se vuelve progresivamente más pequeño.Este es el ejemplo "A)" en el
DBCC SHRINKFILE
enlace anterior . Un archivo de datos se está reduciendo a un tamaño de destino de 7 MB en este ejemplo. Este formato es una buena forma de reducirse repetidamente según lo permita su ventana de tiempo de inactividad. Haría esto en las pruebas de desarrollo para ver cómo se ve el rendimiento y qué tan bajo / alto puede ir de un incremento y para determinar el tiempo esperado en la producción. Este es un en línea operación en : puede ejecutarla con usuarios en el sistema que acceden a la base de datos que se está reduciendo, pero habrá una degradación del rendimiento, casi garantizada. Por lo tanto, supervise y mire y vea lo que le está haciendo al servidor, elija una ventana de tiempo de inactividad o un período de actividad más ligera, idealmente.Recuerde siempre: cada vez que se encoja, fragmenta sus índices y debe hacer una reconstrucción del índice si va a encogerse en trozos durante un período prolongado de tiempo. Ahora está incurriendo en ese costo cada vez si no puede hacerlo todo en una sola ventana.
2.) Nueva base de datos : puede crear una nueva base de datos y migrar datos a ella. Tendría que escribir la base de datos vacía y todas sus claves, índices, objetos, procesos, funciones, etc. y luego migrar datos a ella. Puede escribir scripts para esto o puede usar una herramienta como SQL Data Compare de Red Gate u otros proveedores con herramientas similares. Esto es más trabajo de configuración de su lado, más desarrollo y pruebas, y dependiendo de su entorno también puede eliminar su ventana de tiempo de inactividad, pero también es una opción a considerar.
Cuando me veo obligado a reducir una base de datos Si este fuera mi entorno, trataría de dejar una cantidad considerable / considerable de espacio en blanco en el archivo de datos porque me gusta ser un disco duro y me gustaría estar preparado para un crecimiento futuro / inesperado. Por lo tanto, estaría bien devolver el espacio si elimináramos la mayoría del espacio, pero nunca confiaría en los que dicen "pero nunca volverá a crecer" y aún dejaría algo de espacio en blanco. La ruta con la que probablemente iría ( suspiro ) es el enfoque de reducción si tuviera ventanas de tiempo de inactividad más pequeñas y no No quiera incurrir en la complejidad de crear una base de datos vacía y migrar datos a ella. Por lo tanto, lo reduciría un montón de veces de forma incremental (en función de cuántas veces pensé que necesitaba basarme en mis pruebas en dev y el tamaño deseado. Elegir progresivamente un tamaño de archivo más pequeño) y luego reconstruir los índices ... Y luego ' Nunca le dije a nadie que reduje mi base de datos ;-)
fuente
DBCC SHRINKFILE
comando que menciona. Depende de su servidor de cuántos archivos consta su base de datos. Una base de datos simple tiene un archivo de base de datos y un archivo de registro de transacciones.Todos sabemos que de todos modos no se recomienda hacer SHRINK regularmente. Intento omitir todas las advertencias y renuncias que probablemente conozcas de todos modos. Copia de seguridad, y no hagas esto en casa si es posible :)
Bonificación: en el entorno de replicación si realiza esto en la base de datos del editor, no hará que las bases de datos del suscriptor se reduzcan (lo que puede tener el problema de tamaño porque son ediciones Express).
Finalmente, mi script reindex:
La única variable en esto es el 14, que se puede obtener emitiendo select
DB_ID('YourDBName')
, y el script asume que solo le interesan las tablas en el esquema dba. *.fuente
Has escuchado todas las advertencias sobre la reducción de las bases de datos y todas son ciertas. Fragmentará sus índices y, en general, arruinará su base de datos y no debe hacerse en un sistema de producción.
Pero, generalmente lo hago semanalmente cuando restauro una copia de seguridad en mi estación de trabajo debido al espacio en mi unidad SSD. Eso sí, no escribí este guión, pero lo encontré hace años. En otras bases de datos [250 GB], creé un paquete SSIS que transferirá las tablas que necesito y luego recreará los índices para esa sensación de índice tan fresca.
fuente
Esta cita a continuación es directamente de Microsoft (se aplica a las versiones 2008-2016) y brinda orientación sobre si / cuándo y cómo debe usar el
DBCC SHRINKFILE
comando.https://msdn.microsoft.com/en-us/library/ms189493.aspx
fuente