2011-06-07 8 views
5

Tengo una declaración INSERT que está consumiendo muchísimo espacio de registro, tanto así que el disco duro se está llenando realmente antes de que la declaración finalice.Inserción mínimamente registrada Insertar en

Lo que pasa es que, I realmente no es necesario que se registre, ya que solo es un paso intermedio de carga de datos.

Por motivo de la discusión, digamos que tengo:

  • Tabla A: mesa de carga inicial (poblada usando bcp, por lo que no hay problemas de tala)
  • Tabla B: se llena mediante INSERT INTO B from A

¿Hay alguna manera de que pueda copiar entre A y B sin que se escriba nada en el registro?

P.S. Estoy usando SQL Server 2008 con simple modelo de recuperación.

Respuesta

3

De Louis Davidson, Microsoft MVP:

No hay manera de insertar sin registro en absoluto. SELECCIONAR INTO es la mejor manera de para minimizar el registro en T-SQL, usando SSIS puede hacer el mismo tipo de registro de luz usando Bulk Insert.

Desde sus requerimientos, me probable que el uso de SSIS, retirar todos los limitaciones, especialmente únicas y las claves primarias, cargar los datos en, añadir las limitaciones espalda. Puedo cargar aproximadamente 100 GB en poco más de una hora como esto, con una sobrecarga bastante mínima. I estoy usando BULK LOGGED modelo de recuperación, que simplemente registra la existencia de nuevas extensiones durante el registro, y luego puede eliminarlas más tarde.

La clave es comenzar con barebones tablas, y solo grita. El edificio que el índice deja una vez no tendrá índices de para mantener, solo el índice creado por índice.

Si no desea utilizar SSIS, aún se aplica el punto para eliminar todas sus restricciones y utilizar el modelo de recuperación BULK LOGGED. Esto reduce en gran medida el registro realizado en las declaraciones INSERT INTO y, por lo tanto, debería resolver su problema.

http://msdn.microsoft.com/en-us/library/ms191244.aspx

+0

Tengo un PK y un número justo de índices en estas tablas, así como algunos valores predeterminados. El PK y los índices que puedo colocar y crear, pero necesito los valores predeterminados durante el INSERT – Karl

+0

@Karl - Eso está bien entonces. Se ralentizará su INSERT pero su problema principal fue el tamaño del registro, que se resolverá con el modelo de recuperación 'BULK LOGGED'. El aumento de velocidad es principalmente solo una bonificación. Tendrá que asegurarse de que un registro insertado no esté causando disparos, ya que eso también podría aumentar sus archivos de registro incluso en un modelo de recuperación 'BULK LOGGED', creo. – IAmTimCorey

+0

¿No está usando Flag 610 para insertar ... into con un registro mínimo? – FLICKER

2

cargar los datos en tempdb en lugar de su base de datos, y hacer todas las transformaciones intermedias en tempdb. Luego copie solo los datos finales en la base de datos de destino. Use lotes para minimizar el tamaño de transacción individual.Si todavía tiene problemas, mira en el despliegue de indicador de traza 610, ver The Data Loading Performance Guide y Prerequisites for Minimal Logging in Bulk Import:

marca de seguimiento 610

SQL Server 2008 presenta el indicador de traza 610, que controla mínimamente conectado inserciones en tablas indexadas.

Cuestiones relacionadas