我有非常简单的SSRS报告,运行存储过程需要不到1秒。当我在本地服务器上上传时,该报告工作得很好。但是,在远程服务器(SQL Server 2012)上运行报告需要5-7分钟。其他关于远程服务器的报告工作得很好。有人可以帮帮我吗?提前谢谢!
答案 0 :(得分:3)
您应该使用SQL事件探查器或ReportServer DB来检查哪个进程很慢。 您可以使用此SQL进行检查:
USE ReportServer
SELECT ReportPath,
RequestType,
Format,
ReportAction,
TimeDataRetrieval,
TimeProcessing,
TimeRendering,
DATEDIFF(S, TimeStart, TimeEnd) AS TotalSeconds
FROM ExecutionLog2
其中TimeDataRetrieval是存储过程执行的时间+向ReportServer,TimeProcessing发送时间 - 它是在报告端进行分组,排序等所花费的时间,TimeRendering是用于渲染的时间。
然后当你知道为什么执行速度很慢时 - 你可以考虑修复方法(修复存储过程,添加索引,更改报告结构等)。
我遇到了导致参数嗅探(about parameters sniffing)的问题,为了防止这种情况,您不应该在查询中使用输入参数,如下所示:
CREATE PROCEDURE [dbo].[usp_MySP] @InputValue INT
AS
BEGIN
DECLARE @SomeValue INT;
SET @SomeValue = @InputValue;
SELECT SomeColumn
FROM SomeTable
WHERE SomeColumn = @SomeValue
END