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

http://blogs.msdn.com/b/esecuelesinfronteras/archive/2009/10/19/el-email-de-mi-subscripci-n-no-llega-al-destinatario.aspx

 

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:

Dean Kalanquin's Reporting Services Blog

http://blogs.msdn.com/b/deanka/

 

 

Maria Esteban

Reporting Services Support Engineer