¿Por qué hay un retraso en la ejecución de mi subscripción de Reporting Services?
Un retraso en el envío de subscripciones podría ser debido a que las theads del procesamiento del servicio de Reporting Services no estén procesando los eventos a tiempo, quizás porque estén sobrecargadas y no les de tiempo a ser ejecutadas tan pronto como llegan. En este caso, los Jobs se ejecutarían en el SQL Agent pero las tablas “Events” y “Notifications” mostrarían un numero muy alto de entradas. Como el número de threads es fijo, no se puede incrementar, entonces, convendría averiguar por qué no se están procesando a tiempo, o acumulando.
- Primero podríamos ejecutar la consulta utilizada por el informe de la subscripción y comprobar si 6se ejecuta en un tiempo razonable respecto a la frecuencia en que se ejecutan las subscripciones. Por ejemplo, podríamos llegar a una situación parecida en el caso de que la subscrición/Snapshot se ejecutase cada media hora y el informe tardase 1 hora en ejecutarse. Esto provocaría que varias instancias del informe se ejecutasen simultáneamente y llegasen a ocupar todas las threads, impidiendo ejecutar nada más.
- También podemos observar, si todo funciona de manera razonable y no hay indicaciones de que el punto anterior ocurra, es que el problema ocurre a ciertas horas del día (por ejemplo a las 8 de la mañana). Cuando se programan muchas subscripciones a la vez, y lleva un tiempo en completarse, el procesamiento se puede retrasar. En este caso se aconseja espaciar las subscripciones, o añadir un segundo servidor en scale out (NLB) para trabajar en paralelo.
- Otra posibilidad sería, si las subscripciones son por email, es que las subscripciones se procesen a tiempo en Reporting Services pero que haya un retraso en el servidor de correo utilizado. En ese caso, convendría hacer pruebas ejecutando las subscripciones depositando el informe en un directorio de recogida, y ver si se procesan a tiempo. Podrás encontrar más información sobre como configurarlo en el siguiente blog:
El email de mi subscripción no llega al destinatario
Como ves en el siguiente blog, hay un par de consultas que se pueden utilizar para obtener la información sobre las subscriciones de las tablas de la base de datos de ReportServer, y así poder hacer un mejor diagnostico:
1. Primera consulta:
select
'SubnDesc'= s.Description,
'SubnOwner= us.UserName,
'LastStatus'= s.LastStatus,
'LastRun'= s.LastRunTime,
'ReportPath'= c.Path,
'ReportModifiedBy'= uc.UserName,
'ScheduleId'= rs.ScheduleId,
'SubscriptionId'= s.SubscriptionID
from
ReportServer.dbo.Subscriptions s
join
ReportServer.dbo.Catalog c on c.ItemID = s.Report_OID
join
ReportServer.dbo.ReportSchedule rs on rs.SubscriptionID = s.SubscriptionID
join
ReportServer.dbo.Users uc on uc.UserID = c.ModifiedByID
join
ReportServer.dbo.Users us on us.UserID = s.OwnerId
Join
msdb.dbo.sysjobs j on j.name = CONVERT(nvarchar(128),rs.ScheduleId)
2. Segunda consulta:
select
'Report'= c.Path,
'Subscription'= s.Description,
'SubscriptionOwner'= uo.UserName,
'SubscriptionModBy'= um.UserName,
'SubscriptionModDate'= s.ModifiedDate,
'ProcessStart'= dateadd(hh,DATEDIFF(hh,Getutcdate(),Getdate()),n.ProcessStart),
'NotificationEntered'= dateadd(hh,DATEDIFF(hh,Getutcdate(),Getdate()),n.NotificationEntered),
'ProcessAfter'= dateadd(hh,DATEDIFF(hh,Getutcdate(),Getdate()),n.ProcessAfter),
n.Attempt,
'SubscriptionLastRunTime'= dateadd(hh,DATEDIFF(hh,Getutcdate(),Getdate()),n.SubscriptionLastRunTime),
n.IsDataDriven,
'ProcessHeartbeat'= dateadd(hh,DATEDIFF(hh,Getutcdate(),Getdate()),n.ProcessHeartbeat),
n.Version,
n.SubscriptionID
from
Notifications n
join
Subscriptions s on n.SubscriptionID = s.SubscriptionID
join
Catalog c on c.ItemID = n.ReportID
join
Users uo on uo.UserID = s.OwnerID
join
Users um on um.UserID = s.ModifiedByID
Más información en:
Maria Esteban
Reporting Services Support Engineer