La comparación de esquemas SSDT no funciona mientras hay un INSERTAR A GRANEL


11

Estoy trabajando en un gran proyecto ETL y DW donde utilizamos TFS / control de fuente junto con SSIS y SSDT.

Hoy, descubrí que si bien un paquete SSIS está realizando una INSERCIÓN A GRANEL en una tabla de base de datos, no es posible realizar una Comparación de esquema SSDT con esa base de datos. Esto es lamentable, ya que algunos de nuestros paquetes tardan bastante tiempo en completarse. Queremos usar la función Comparar esquemas para detectar cambios en la estructura de la base de datos para guardarlos en nuestro proyecto SSDT para el control de versiones de la base de datos.

Mirando un poco más sobre esto, descubrí que la función Comparar esquemas en SSDT ejecuta un script SQL que llama a la OBJECTPROPERTY()función del sistema en las tablas de la base de datos. Específicamente en mi caso, cualquier llamada a OBJECTPROPERTY(<object_id>, N'IsEncrypted')parece estar bloqueada, cuando se <object_id>refiere a una tabla que actualmente se está insertando en masa.

En Visual Studio, SSDT Schema Compare simplemente agota el tiempo de espera después de un tiempo y afirma que no se han detectado diferencias.

¿Hay alguna solución a este problema en SSDT, o tal vez debería intentar presentar un informe de error de MS Connect?

Alternativamente, dado que BULK INSERT ocurre desde un paquete SSIS, ¿hay alguna forma de hacer esta inserción sin bloquear las OBJECTPROPERTYllamadas en la tabla? Editar: en SSIS OLE DB Destinations, podemos eliminar la marca de verificación de "Tabla de bloqueo", que hace lo que dice, pero esto puede afectar el rendimiento en algunas situaciones. Estoy mucho más interesado en una solución que permita que SSDT Schema Compare haga su trabajo, incluso si algunos objetos están bloqueados.


Eche un vistazo a Control del comportamiento de bloqueo para la importación masiva : puede tener habilitado el 'bloqueo de tabla en carga masiva'. También verifique que su
INSERCIÓN

Si está tomando bloqueos de tabla, es posible que encuentre la carga más rápido si la deshabilita de todos modos ( technet.microsoft.com/en-us/library/ms177445.aspx ), sea cual sea la causa, provocaría una conexión porque un tiempo de espera debería al menos fallar en lugar de simplemente decir que no hay cambios
Ed Elliott

Gracias por las respuestas, Stuartd y Ed Elliot. Resulta que realmente queremos bloquear la mesa, por razones de rendimiento. En mi opinión, SSDT debería poder manejar esto, porque solo queremos comparar la base de datos, no aplicar cambios a los objetos en la base de datos. Crearé una publicación de conexión para abordar esto.
Dan

3
Lo interno no es mi fuerte, pero según tengo entendido, tienes un candado sobre la mesa. Cualquier bloqueo que se tome es para la inserción masiva es incompatible con los bloqueos necesarios para validar el esquema. Lectura relevante Bloqueo de esquema BOL
billinkc

¿Podría explicar mejor por qué la comparación de esquema debe ejecutarse en paralelo con una operación de carga? Quizás una alternativa es tener un modelo de referencia de la base de datos. Sin datos, solo esquema. Ejecute sus comparaciones con eso y luego asegúrese de que nadie modifique la base de datos real donde se realizan estas operaciones masivas sin actualizar primero el modelo de referencia.
billinkc

Respuestas:


19

La OBJECTPROPERTYllamada requiere un bloqueo de estabilidad de esquema (Sch-S), que solo es incompatible con un bloqueo de modificación de esquema (Sch-M).

El BULK INSERTtomará una cerradura Sch-M en algunas circunstancias. Estos se enumeran en la sección "Bloqueo y registro de tablas durante la importación masiva" de las Directrices para optimizar la importación masiva en libros en línea:

Bloqueo de importación masiva

Si la tabla de destino está agrupada, puede ser útil habilitar la marca de seguimiento 610 . Lea la serie completa de esas publicaciones y la Guía de rendimiento de carga de datos y pruebe a fondo si decide seguir esta ruta.

No tengo idea de por qué SSDT comprueba la IsEncryptedpropiedad en busca de tablas. No puedo imaginar un escenario en el que tenga sentido, pero esa es una pregunta para las personas SSDT.


3
Esta fue una respuesta muy completa y satisfactoria. Muchas gracias.
Dan
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.