Tant le proc stocké que la requête via ssrs seront paramétrés, donc ils devraient être mis en cache de la même manière bien qu'ils soient 2 caches différents. Si j'étais vous je commencerais par examiner le journal d'exécution sur la base de données du serveur de rapports pour trouver d'où vient votre problème.
Voici un script qui vous montrera les temps nécessaires pour obtenir les données, traiter et rendre.
select
reverse (substring (reverse (el . ReportPath), 1 , charindex ('/' , reverse (el . ReportPath))- 1)) as ReportName
, u . UserName as LastModBy
, coalesce (cast (el . parameters as varchar (max)), '') as [Parameters]
,(select count (*) from executionlog2 tmp where tmp . reportpath = el . reportpath and tmp . username = el . username and tmp . reportaction = 'Render' and tmp . status = 'rsSuccess' group by tmp . ReportPath) as UserCount60Day
, el . Format
, el . UserName
, el . ReportAction
, el . Status
, el .Source
, el . [RowCount]
, el . ExecutionId
, el . TimeDataRetrieval/1000 as DataRetrieval
, el . TimeProcessing/1000 as Processing
, el . TimeRendering/1000 as Rendering
,(el . TimeProcessing + el . TimeRendering)/1000 as ProcessAndRender
, el . AdditionalInfo
, case
when datediff (ss , el . TimeStart , el . TimeEnd) >= 30
then 1
else 2
end as DisplayInRed
from
ExecutionLog2 el
join ReportServer . dbo . Catalog c
on c . Path = el . ReportPath
join ReportServer . dbo . Users u
on u . UserId = c . ModifiedByID
where
el . ReportAction = 'Render'
garder également en cours d'exécution profileur pendant que vous exécutez le rapport afin que vous puissiez voir ce qui se passe dans les coulisses.
Espérons que ça aide.