¿Desventajas de MARS (conjuntos de resultados activos múltiples)?

83

¿Alguien sabe de alguna desventaja de MARS (conjuntos de resultados activos múltiples)? ¿Alguien sabe de alguna razón por la que uno debería evitar el uso de MARS, como los casos en los que los cursores son más útiles que MARS?

Samiksha
fuente

Respuestas:

61

Aparentemente, hay al menos dos inconvenientes conocidos (potenciales) (de este (1) blog del equipo ):

  1. Obviamente, esto puede causar problemas potenciales para cualquier sistema heredado que no fue diseñado para ejecutarse con un diseño habilitado para MARS: "el código existente optimizado para ejecutarse en el mundo que no es MARS puede mostrar una ligera caída en el rendimiento cuando se ejecuta sin modificar con MARS".

  2. “Con MARS puede enviar varios lotes de declaraciones múltiples al servidor. El servidor intercalará la ejecución de dichos lotes, lo que significa que si los lotes cambian el estado del servidor a través de declaraciones SET o USE, por ejemplo, o usan declaraciones de administración de transacciones TSQL (BEGIN TRAN, COMMIT, ROLLBACK), tanto usted como el servidor pueden confundirse sobre cuál es tu intención real ".

Todavía tengo que probar un diseño habilitado para MARS, pero estoy muy cerca de hacerlo en mi proyecto actual. Tenemos un pequeño problema con las operaciones de consulta competitivas (y en ocasiones dependientes) (como datos de configuración de carga diferida de la misma base de datos que está ejecutando un conjunto de registros activo).

Hay más información en el sitio de MSDN (2) aquí.

[(1) http://blogs.msdn.com/sqlnativeclient/archive/2006/09/27/774290.aspx ]
[(2)http://msdn.microsoft.com/en-us/library/ms131686.aspx ]

RobS
fuente
3
Antes de aplicar la gran solución de @RobS, leería este artículo primero para asegurarme de que no puede resolver este problema con la siguiente solución: devproconnections.com/development/… O agregar .ToList () al final de su llamada DB, que resolvió mi problema. Por cierto, gracias RobS por el gran consejo, MARS será útil en el futuro. :)
Termato
6
  • Se necesitan un poco más de recursos del servidor que hacer una conexión a la vez.
  • Debe ejecutar SQL Server 2005 o posterior. Entonces eso puede ser un problema en entornos heredados (¡ack!).
Dave Markle
fuente
no puedes usar SqlTransaction muy bien.
Mladen Prajdic
17
¿Cuánto es "un poco más de recursos del servidor"? ¿Puede hacer una estimación en términos de memoria o CPU? Esto me interesa principalmente porque estoy en un entorno de Azure donde los recursos son proporcionales al costo del servidor.
Mathias Lykkegaard Lorenzen
1
@MathiasLykkegaardLorenzen ¿Alguna vez descubrió la respuesta a su pregunta?
Sinjai
4

¿dependiendo de qué? no hay desventajas reales.

no admiten puntos de guardado de transacciones. pero no creo que esto sea una desventaja.

Mladen Prajdic
fuente