La consulta rápida se ejecuta lentamente en SSRS

78

Tengo un informe SSRS que llama a un procedimiento almacenado. Si ejecuto el procedimiento almacenado directamente desde una ventana de consulta, volverá en menos de 2 segundos. Sin embargo, la misma consulta ejecutada desde un informe SSRS de 2005 tarda hasta 5 minutos en completarse. Esto no solo sucede en la primera ejecución, sucede todo el tiempo. Además, no veo este mismo problema en otros entornos.

¿Alguna idea sobre por qué el informe SSRS funcionaría tan lento en este entorno en particular?

user275554
fuente
1
¿Tu sp tiene parámetros?
Irwin M. Fletcher
1
Sí, tiene alrededor de 9 parámetros. Los tipos de parámetros del informe coinciden con los tipos de parámetros del procedimiento almacenado.
user275554
Siéntase libre de aceptar su propia respuesta para que la pregunta se pueda utilizar como preguntas duplicadas.
Dale K

Respuestas:

110

Gracias por las sugerencias proporcionadas aquí. Hemos encontrado una solución y resultó estar relacionada con los parámetros. SQL Server estaba produciendo un plan de ejecución complicado cuando se ejecutó desde el informe SSRS debido a la 'detección de parámetros'. La solución alternativa fue declarar variables dentro del procedimiento almacenado y asignar los parámetros entrantes a las variables. Luego, la consulta utilizó las variables en lugar de los parámetros. Esto provocó que la consulta se realizara de forma coherente si se llamaba desde SQL Server Manager o mediante el informe SSRS.

user275554
fuente
Este es un problema conocido de SQL Server ... no realmente relacionado con SSRS en sí.
AlexCode
Grrr! Gracias por publicar la solución y el problema. Se estaba optimizando correctamente el viernes, entra y es DOA, reasigna los parámetros a las nuevas vars y vuelve a la normalidad.
Volvox
3
En lugar de reasignar todas las variables, también puede marcar la consulta OPTIMIZAR POR DESCONOCIDO. Ver stackoverflow.com/questions/12979493/…
Mike
1
Esto funcionó para mí también. Solo tuve que reasignar una de las cuatro variables para que funcionara.
Darren Griffith
16

Agregue esto al final de su proceso: option(recompile)

Esto hará que el informe se ejecute casi tan rápido como el procedimiento almacenado.

Brian Smedley
fuente
Esto realmente volverá a compilar el procedimiento almacenado cada vez que lo ejecute. No estoy seguro de si es una buena solución, ya que frustra el propósito de los procedimientos almacenados.
Yodacheese
6
Si hay una consulta individual que se está ejecutando lentamente, agregar una opción (recompilar) en el nivel de la consulta puede marcar una gran diferencia. Solo recuerda: recompilación = optimización. Si necesita que la consulta se ejecute en muy poco tiempo (100 ms o menos, por ejemplo), entonces el tiempo de recompilación puede ser inaceptable y omitir el rastreo de parámetros puede funcionar mejor para usted. Pero en informes grandes que tardan minutos en completarse, el costo de la recopilación es insignificante en comparación con la penalización de tener un plan de consulta incorrecto.
Paul Williams
14

Agregaré que tuve el mismo problema con una consulta de procedimiento no almacenado, solo una declaración de selección simple. Para solucionarlo, declaré una variable dentro de la declaración SQL del conjunto de datos y la establecí igual al parámetro SSRS.

¡Qué solución tan molesta! Aún así, ¡gracias a todos por acercarme a la respuesta!

JHFB
fuente
3
Gracias por compartir esto. También estaba haciendo el método de procedimiento no almacenado y esto me ahorró mucho tiempo.
Bob Horn
1
rastreo de parámetros; especialmente si la interfaz tiene un montón de parámetros. restablecerlos a los parámetros internos me sirvió en el pasado, por lo tanto, voto por esta respuesta. La opción recompilada no funcionó en mi caso de tener 8 parámetros de informe; 3 con valor (es) multiparámetro.
junketsu
11

Tuve el mismo problema, aquí está mi descripción del problema

"Creé un procedimiento de tienda que generaría 2200 filas y se ejecutaría en casi 2 segundos; sin embargo, después de llamar al procedimiento de tienda desde SSRS 2008 y ejecutar el informe, en realidad nunca se ejecutó y finalmente tengo que eliminar el BIDS (Business Intelligence Development Studio) desde el administrador de tareas ".

Lo que intenté: Intenté ejecutar el SP desde el inicio de sesión de reportuser, pero el SP también funcionaba normalmente para ese usuario, verifiqué Profiler pero nada funcionó.

Solución:

En realidad, el problema es que, aunque SP está generando el resultado, el motor SSRS se está demorando en leer estas muchas filas y devolverlas. Así que agregué la opción WITH RECOMPILE en SP y ejecuté el informe ... aquí es cuando sucedió el milagro y mi problema se resolvió.

Redroidmator
fuente
5

Tuve el mismo escenario ... Informe muy básico, el SP (que solo toma 1 parámetro) tardaba 5 segundos en recuperar registros de 10K, pero el informe demoraría 6 minutos en ejecutarse. Según el generador de perfiles y la tabla RS ExecutionLogStorage, el informe dedicaba todo su tiempo a la consulta. El comentario de Brian S. me llevó a la solución ... Simplemente agregué WITH RECOMPILE antes de la declaración AS en el SP, y ahora el tiempo del informe coincide prácticamente con el tiempo de ejecución del SP.

Varilla C
fuente
5

Simplemente deseleccioné 'Repetir columnas de encabezado en cada página' dentro de las Propiedades de Tablix.

Antonio
fuente
Sí, antes de anular la selección de mi informe procesado en aproximadamente 10 segundos, ahora se procesa en 2 segundos.
Antony
5

Si su procedimiento almacenado usa servidores vinculados o openquery , es posible que se ejecuten rápidamente por sí mismos, pero demorarán mucho en procesarse en SSRS. Algunas sugerencias generales:

  • Recupere los datos directamente del servidor donde se almacenan los datos utilizando una fuente de datos diferente en lugar de utilizar el servidor vinculado para recuperar los datos.
  • Cargue los datos del servidor remoto en una tabla local antes de ejecutar el informe, lo que simplifica la consulta del informe.
  • Utilice una variable de tabla para recuperar primero los datos del servidor remoto y luego únase con sus tablas locales en lugar de devolver directamente una combinación con un servidor vinculado.

Veo que la pregunta ha sido respondida, solo agrego esto en caso de que alguien tenga el mismo problema.

bubbassauro
fuente
5

Tuve el informe de problemas de salida html en el informe que recuperaba 32000 líneas. La consulta se ejecutó rápidamente, pero la salida al navegador web fue muy lenta. En mi caso, tuve que activar “Paginación interactiva” para permitir que el usuario vea la primera página y pueda generar un archivo de Excel. Las ventajas de esta solución es que la primera página aparece rápidamente y el usuario puede generar una exportación a Excel o PDF, la desventaja es que el usuario solo puede desplazarse por la página actual. Si el usuario desea ver más contenido, debe usar los botones de navegación sobre la cuadrícula. En mi caso, el usuario aceptó este comportamiento porque la exportación a Excel era más importante.

Para activar la "Paginación interactiva" debe hacer clic en el área libre en el panel del informe y cambiar la propiedad "InteractiveSize" \ "Altura" en el nivel del informe en el panel Propiedades. Establezca esta propiedad en un valor diferente de 0. En mi caso, la establecí en 8.5 pulgadas. También asegúrese de haber desmarcado la propiedad "Mantener juntos en una página si es posible" en el nivel de Tablix (haga clic derecho en Tablix, luego en "Propiedades de Tablix", luego en "General" \ "Opciones de salto de página").

ingrese la descripción de la imagen aquí

Alexey Sukhanov
fuente
¡Esto me lo arregló!
hasta el
4

Me encontré con un problema similar de mi procedimiento almacenado que se ejecuta rápidamente desde Management Studio pero se ejecuta muy lento desde SSRS. Después de una larga lucha, resolví este problema eliminando el procedimiento almacenado físicamente y recreándolo. No estoy seguro de la lógica detrás de esto, pero supongo que se debe al cambio en la estructura de la tabla utilizada en el procedimiento almacenado.

arrendajo
fuente
3

Enfrenté el mismo problema. Para mí fue solo para desbloquear la opción:

Propiedades de Tablix => Opción de salto de página => Mantener juntos en una página si es posible

Del informe SSRS. Intentaba poner todos los registros en la misma página en lugar de crear muchas páginas.

Joanne
fuente
3

Aparte del problema del rastreo de parámetros, descubrí que SSRS es generalmente más lento en el procesamiento del lado del cliente que (en mi caso) los informes de Crystal. El motor SSRS simplemente no parece tan capaz cuando tiene muchas filas para filtrar o agregar localmente. Por supuesto, estos son problemas de diseño de conjuntos de resultados que con frecuencia se pueden abordar (aunque no siempre si los detalles son necesarios para el desglose) pero el motor de informes más um ... maduro ... es más indulgente.

Steve
fuente
3

En mi caso, solo tuve que desconectar y conectar el SSMS. Hice un perfil de la consulta y la duración de la ejecución mostraba 1 minuto aunque la consulta en sí se ejecuta en menos de 2 segundos. Reinició la conexión y se ejecutó nuevamente, esta vez la duración mostró el tiempo de ejecución correcto.

Ranjan
fuente
1

Un par de cosas que puede hacer sin ejecutar el informe real, simplemente ejecute el sproc desde la pestaña de datos de los servicios de informes. ¿Todavía lleva tiempo? Otra opción es utilizar SQL Profiler y determinar qué entra y sale del sistema de base de datos.

Otra cosa que puede hacer para probarlo es volver a crear un informe simple sin ningún parámetro. Ejecute el informe y vea si marca la diferencia. Puede ser que su informe de RS esté dañado o mal formado, lo que puede hacer que el procesamiento sea muy lento.

JonH
fuente
1

Tuve el mismo problema y lo solucionó dando al conjunto de datos compartido un parámetro predeterminado y actualizando ese conjunto de datos en el servidor de informes.

Salomón
fuente
1

¿Utiliza "agrupar por" en la tabla SSRS?

Tenía un informe con 3 agrupados por campos y noté que el informe se ejecutaba muy lentamente a pesar de tener una consulta ligera, hasta el punto en que ni siquiera puedo marcar valores en el campo de búsqueda.

Luego eliminé las agrupaciones y ahora el informe sube en segundos y todo funciona en un instante.

mRiddle
fuente
1

Pude resolver esto eliminando el campo incorporado [& TotalPages] de la parte inferior. El tiempo que pasó de minutos a menos de un segundo.

Algo extraño que no pude determinar estaba teniendo impacto en el cálculo del total de páginas.

Estaba usando SSRS 2012.

MiguelSlv
fuente
-1

En nuestro caso, no se requirió ningún código.

Nota de nuestra mesa de ayuda: "Borrar la configuración de Internet solucionará este problema".

Quizás eso signifique "borrar caché".

usuario7788038
fuente