Algún contexto:
al principio escribimos informes simplemente "directos", sin ninguna pista de bloqueo en las consultas. Con los informes más grandes, esto a veces podría causar problemas de bloqueo. Al principio solucionamos esto usando la WITH (NOLOCK)
sugerencia para tablas en la consulta.
Debido a que (a) es bastante molesto, y (b) que es fácil olvidar el toque de una de las mesas, se pasó a un segundo ajuste de enfoque TRANSACTION ISOLATION LEVEL
a READ UNCOMMITTED
(que está bien) en la parte superior de consulta de cada conjunto de datos.
Como puede suponer, aún es fácil olvidar la pista para uno de los conjuntos de datos. Entonces esto lleva a la pregunta:
Pregunta: ¿Cuáles son las opciones para enviar NOLOCK
sugerencias junto con consultas de informes?
PD. Me doy cuenta de que esto es, en cierta medida, un problema XY (con muchas de mis otras opciones para X, como optimizar la consulta, no hacer informes en la base de datos operativa, etc.), pero de todos modos traté de hacer una pregunta válida sobre sí misma. .
Opciones:
Estas son las opciones mencionadas anteriormente, con opciones adicionales sobre las que tengo curiosidad por saber si funcionarían:
- Establecer
WITH (NOLOCK)
pista para cada mesa. (molesto, muy fácil de olvidar) - Establezca el nivel de aislamiento
READ UNCOMMITTED
para toda la consulta. (sigue siendo fácil de olvidar) - ¿Es posible especificar esto a nivel de informe ? Por ejemplo, asegúrese de que todas las consultas del conjunto de datos para un informe se ejecuten sin bloqueo.
- ¿Es posible especificar esto en algún otro nivel de SSRS ? Por ejemplo, ¿puede configurar esto para una determinada carpeta de informes o mediante una extensión?
- ¿Es posible especificar esto en la fuente de datos / nivel de cadena de conexión ? Por ejemplo, ¿todos los informes relevantes utilizan una determinada "fuente de datos sin bloqueo"?
- Relacionado con la opción anterior: ¿tal vez es posible especificar una pista de bloqueo predeterminada para un "usuario no sql-lock" específico (el que se usa en la conexión)?
- ???
¿Qué opciones son viables? ¿Hay opciones que he perdido?
fuente
Respuestas:
Respuestas Rápidas:
Hay algunas opciones que son viables si los informes están optimizados y siguen causando problemas:
fuente
¿Ha considerado el
READ_COMMITTED_SNAPSHOT
versionado de filas para la base de datos?Kim Tripp tiene un buen artículo al respecto en http://msdn.microsoft.com/en-us/library/ms345124%28v=sql.90%29.aspx
READ_COMMITTED_SNAPSHOT
permite una mejor funcionalidadWITH (NOLOCK)
que porque proporciona una consistencia absoluta en un punto en el tiempo para agregaciones o consultas de larga duración con un mayor rendimiento debido a la contención de bloqueo reducida.fuente