2008-09-05 13 views
6

Tengo más bases de datos sql que crecen muy grandes. Tras el examen, encuentro que hay un montón de espacio sin usar en ciertas tablas. No hago muchas eliminaciones físicas, así que no creo que sean solo registros eliminados. DBCC SHRINK no hace que el archivo sea más pequeño. Pero, si vuelco la tabla a una nueva y vacía base de datos, el tamaño disminuye un 80%. En lugar de los 7 gb que tengo en esta tabla en la base de datos actual, termino con aproximadamente 1.5 gb en la nueva base de datos. Es como si el servidor SQL está asignando demasiada memoria. Alguien se encontró con esto antes? Me gustaría poder reducir la tabla eliminando el espacio asignado sin usar sin tener que crear una base de datos completamente nueva.Servidor SQL no utilizado, pero espacio de tabla asignado

Información adicional:

Modelo de recuperación completa utilizado. Intentaré reconstruir los índices, creo que ha pasado un tiempo. Los ldf se contraen diariamente usando algún programa almacenado loco que los trunca.

+0

No hay absolutamente ningún punto en el uso del modelo de recuperación completa, ¡si todo lo que hace con los LDF los está truncando! La forma correcta de hacer que se encojan es hacer una copia de seguridad de los archivos de registro, momento en el que se reducirán automáticamente. Se necesita desesperadamente alguien que comprenda las cadenas de troncos y la estrategia de respaldo adecuada para intervenir y ayudarlo a hacerlo bien. Cualquier cosa menos te pone ** en grave riesgo de perder datos **. – ErikE

+0

¿Es pertinente? Artículo de KB 924027 - [SQL Server aumenta significativamente el espacio no utilizado para algunas tablas] (http://support.microsoft.com/kb/924947) –

+0

Eche un vistazo a este artículo de Knowledge Base y vea si se aplica: http://support.microsoft.com/kb/913399 –

Respuesta

0

En las opciones, puede especificar cuánto quiere crecer. De manera predeterminada, creo que es 10%, por lo tanto, si se proporciona una base de datos de 200 MB, cuando complete su última página, asignará otros 20 MB de espacio de página. En 7GB, asignaría 700MB.

No sé exactamente dónde puede modificarlo después de crear un db, pero sé que lo tiene cuando crea el db. un poco de trabajo de google probablemente revelará la respuesta para usted.

NOTA: mi respuesta no es cómo solucionarlo, sino cómo evitar/explicar por qué podría ver todo este espacio no asignado.

2

He descubierto que si no se ocupa de hacer una copia de seguridad de su archivo de registro de transición (el LDF) obtendrá algo como este comportamiento. No puedo enfatizar lo suficiente la importancia de tener una buena "higiene" de respaldo. No solo salvará tu tocino si algo sale mal, sino que también ayudaré a mantener una buena base de datos ajustada.

+0

De acuerdo, nunca olvide respaldar los registros de transacciones y las copias de seguridad de la base de datos. El registro crecerá hasta que se coma todo tu disco duro. – HLGEM

1

No hago muchas física elimina

lo que acerca de las actualizaciones de la tabla, ¿cuál es el nivel de fragmentación. ejecute DBCC SHOWCONTIG, luego reconstruya el índice si está muy fragmentado. Después de eso hacer un registro de copia de seguridad con TRUNCATE_ONLY seguido por un comando Shrink

0

Esto ha funcionado para mí en el pasado

USE [DBNAME] 
GO 

DBCC SHRINKFILE (N'FILENAME' , 0, TRUNCATEONLY) 

GO 
0

que tenía un problema similar una vez y creo que he encontrado que reindex/didn encoge' t reclamar todo el espacio no utilizado si no había un índice agrupado en una tabla dada.

0

Es posible que la tabla se haya creado con el relleno activado para el índice. La razón por la que las personas crean un índice acolchado es para evitar divisiones de página.

Haga clic con el botón derecho en SQL Manager y seleccione SCRIPT TABLE. Luego mira para ver si PAD_INDEX=OFF. Si PAD_INDEX está en uso, es probable que la mesa ocupe espacio.

Cuestiones relacionadas